当前位置:  技术问答>linux和unix

请教个vivi启动linux内核的问题

    来源: 互联网  发布时间:2015-12-04

    本文导语:  在vivi里面第二阶段,main函数里面,最后阶段,应该启动linux内核吧。可我看vivi代码的时候没有看到启动linux内核啊,代码如下: int main(int argc, char *argv[]) {     …………     init_builtin_cmds();     update_program...

在vivi里面第二阶段,main函数里面,最后阶段,应该启动linux内核吧。可我看vivi代码的时候没有看到启动linux内核啊,代码如下:

int main(int argc, char *argv[])

{

    …………

    init_builtin_cmds();
    update_program();
    /* Step 8:
     *   绢叼肺 哎鳖唱?
     */
    /* GPDCON  = 0xaaa5aaaa;
    GPDUP   &= 0xfffffdff; 
    GPDDAT  |= ~(0xfffffdff); 
    */
    boot_or_vivi();       //应该从这里面启动内核吧???

}

void boot_or_vivi(void)
{
 char c;
 int ret;
 ulong boot_delay;

 boot_delay = get_param_value("boot_delay", &ret);
 if (ret) boot_delay = DEFAULT_BOOT_DELAY;
 /* If a value of boot_delay is zero, 
  * unconditionally call vivi shell */
 if (boot_delay == 0) vivi_shell();


 /*
  * wait for a keystroke (or a button press if you want.)
  */
 printk("Press Return to start the LINUX now, any other key for vivi%lxn",boot_delay);
 if(boot_delay>0x300) boot_delay=0x300;
// c = awaitkey(boot_delay, NULL);
 c = awaitkey(boot_delay, NULL);
 if (((c != 'r') && (c != 'n') && (c != ''))) 
 {
  printk("type "help" for help.n");
  vivi_shell();
 }
 run_autoboot();
 return;
}

void run_autoboot(void)
{
 while (1) {
  exec_string("boot");
  printk("Failed 'boot' command. reentering vivi shelln");
  /* if default boot fails, drop into the shell */
  vivi_shell();
 }
}

void 
vivi_shell(void)
{
#ifdef CONFIG_SERIAL_TERM
 serial_term();
#else
#error there is no terminal.
#endif
}

void serial_term(void)
{
 char cmd_buf[MAX_CMDBUF_SIZE];

 for (;;) {
  printk("%s> ", prompt);

  getcmd(cmd_buf, MAX_CMDBUF_SIZE);

  /* execute a user command */
  if (cmd_buf[0])
   exec_string(cmd_buf);
 }
}
————————————————————-

一直没有找到哪里有启动内核的代码啊?  请指教


|
vivi/lib/exec.c中:
这里启动os 

static void go(unsigned long addr, long a0, long a1, long a2, long a3)
{
printk("go to 0x%08lxn", addr);
printk("  argument 0 = 0x%08lxn", a0);
printk("  argument 1 = 0x%08lxn", a1);
printk("  argument 2 = 0x%08lxn", a2);
printk("  argument 3 = 0x%08lxn", a3);

cache_clean_invalidate();
tlb_invalidate();

__asm__(
"mov r0, %0n"
"mov r1, %1n"
"mov r2, %2n"
"mov r3, %3n"
"mov r4, %4n"
"mov ip, #0n"
"mcr p15, 0, ip, c13, c0, 0n" /* zero PID */
"mcr p15, 0, ip, c7, c7, 0n" /* invalidate I,D caches */
"mcr p15, 0, ip, c7, c10, 4n" /* drain write buffer */
"mcr p15, 0, ip, c8, c7, 0n" /* invalidate I,D TLBs */
"mrc p15, 0, ip, c1, c0, 0n" /* get control register */
"bic ip, ip, #0x0001n" /* disable MMU */
"mcr p15, 0, ip, c1, c0, 0n" /* write control register */
"mov pc, r4n"
"nopn"
"nopn"
: /* no outpus */
: "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (addr)
);
}

|
/* execute a function */
void execcmd(int argc, const char **argv)
{
user_command_t *cmd = find_cmd(argv[0]);

if (cmd == NULL) {
printk("Could not found '%s' commandn", argv[0]);
printk("If you want to konw available commands, type 'help'n"); 
return;
}
/*printk("execcmd: cmd=%s, argc=%dn", argv[0], argc);*/

cmd->cmdfunc(argc, argv);  //跟不进去了
}


............
我用的是ppcboot,不过看了这段我觉得和ppcboot挺像的
首先就是execcmd 这个函数,在ppcboot中相当于run_command函数

ppcboot中也是这样实现的,通过run_command函数来执行内核启动函数
ppcboot中有do_bootm命令 其实现函数do_bootm_linux是专门负责启动os的

我想vivi应该也差不多吧

|
就是,这东西要是能调试调试就好了。
 execcmd(argc, (const char **)argv);
继续跟下去呗。

    
 
 

您可能感兴趣的文章:

  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • 请教一个linux进程内核栈的问题
  • 【请教】怎么修改linux内核参数
  • 请教,linux内核协议栈中,从内核往驱动发送的报文(注意是下行,不是上行),如何从sk_buff判断是组播数据报文还是组播协议报文????
  • 万能的CSDN啊,100分请教高手一个编译内核传参的问题!
  • 请教风河 linux内核 如何配置使之支持xwindows?
  • 80分请教关于内核的module机制
  • 请教内核ppp代码的内容——在线等
  • 请教高手:如何学习内核编程?
  • 请教内核编译的问题!
  • 请教Linux内核编译的问题
  • 初学Linux内核编译,几个问题请教一下
  • 请教:想学LINUX内核编程,请指点
  • 内核安装错误,请教!
  • 请教内核树的问题
  • 请教部分内核参数的意义
  • 100分请教高手一个Linux内核ARM汇编的问题
  • 请教linux的学习,怎么学? 内核开发找什么样的工作?
  • 内核相关项目请教
  • 请教2.6内核下如何进行文件的读写?
  • 请问我的linux在启动时突然说不能启动xwindows了,请教原因?
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教高手我制作的redhat启动光盘为什么不能启动?
  • 请教:由于图形方式启动黑屏, 在grub下如何修改RHL9 以文字方式启动? 谢谢.-8:25
  • 请教如何将LINUX启动添加到windows启动菜单?
  • 请教:怎样实现Proftpd为系统启动时自动启动?
  • 我刚装上mandrake9.2,启动用的GRUB,请教怎么改默认启动项?
  • TOMCAT启动错误问题,请教!
  • 请教:redhat7.2 下GRUB双启动的问题!!!!!急急急!!!
  • 安装请教:没有软驱,不能光盘启动,怎样安装红帽子?
  • 请教一个自动启动的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题
  • 请教unix常用命令命令问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3