1 前言

创建设备文件:

mknod /dev/ttySAC0 c 4 64

mknod /dev/hda1 b 3 1

挂载文件/目录:

mount -t tmpfs none /tmp


printf()  scanf()  err()

接着上一讲的init_post()函数:

if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)

printk(KERN_WARNING "Warning: unable to open an initial console.\n");



(void) sys_dup(0);

(void) sys_dup(0);

if (execute_command) {

run_init_process(execute_command);

printk(KERN_WARNING "Failed to execute %s.  Attempting "

"defaults...\n", execute_command);

}

       。。。。。。

        //初始化的程序,明显系统跑的是这四个之一,优先级从上到下

run_init_process("/sbin/init");  

run_init_process("/etc/init");

run_init_process("/bin/init");

run_init_process("/bin/sh");


到此为止程序执行/sbin/init;


开始执行文件系统的函数:

2 文件系统函数执行流程:

韦东山第11课-根文件系统init进程分析

init_main()

    parse_inittab();

        file = fopen(INITTAB, "r");  //打开"/etc/inittab" ; /etc/inittab init(8) configuration for BusyBox  <id>:<runlevels>:<action>:<process>

        while(){

          new_init_action(a->action, command, id);  //得到应用程序的列表;如下默认情况下的分析

         }

  run_actions(SYSINIT);  //运行这一类动作

        waitfor(a, 0);            //执行应用程序等带它结束

               run(a);   //创建process子进程

               waitpid(runpid, &status, 0);  // 等待它结束

delete_init_action(a);   //从链表中删除

  run_actions(WAIT);

            waitfor(a, 0);            //执行应用程序等带它结束

                  run(a);   //创建process子进程

                  waitpid(runpid, &status, 0);  // 等待它结束

   delete_init_action(a);   //从链表中删除

  run_actions(ONCE);

           run(a);   //创建process子进程

          delete_init_action(a);   //从链表中删除

  while (1) {

        run_actions(RESPAWN);

               if(a->pid == 0){

                     a->pid =run(a);

               }

        run_actions(ASKFIRST);

               if(a->pid == 0){

                     a->pid =run(a);

               }

        wpid=wait(NULL);  //等带子进程退出

        while(wpid>0:

         {

            a->pid=0;         //推出后设置pid=0

         }


  }

3 对下节的承接内容


构建根文件系统最少要有:

/dev/console

/dec/null

/sbin/init

/etc/inittab

配置文件指定的程序



new_init_action(a->action, command, id);作用:

(1 创建一个init_action结构,填充

(2 把这个结构放入init_action链表


来分析默认的new_init_action()结构(反推):<id>:<runlevels>:<action>:<process>

id:作为 终端,stdin stdout printf

runlevels:忽略

action:执行时机

process:应用程序或者脚本



if (file == NULL) {

/* No inittab file -- set up some default behavior */

#endif

/* Reboot on Ctrl-Alt-Del */

new_init_action(CTRLALTDEL, "reboot", "");                                                                 //::CTRLALTDEL:reboot

/* Umount all filesystems on halt/reboot */

new_init_action(SHUTDOWN, "umount -a -r", "");                                                          //::SHUTBOWN:umount -a -r

/* Swapoff on halt/reboot */

if (ENABLE_SWAPONOFF) new_init_action(SHUTDOWN, "swapoff -a", "");

/* Prepare to restart init when a HUP is received */

new_init_action(RESTART, "init", "");                                                                             //::RESTART:init

/* Askfirst shell on tty1-4 */

new_init_action(ASKFIRST, bb_default_login_shell, "");                                               // ::ASKFIRST: bb_default_login_shell

new_init_action(ASKFIRST, bb_default_login_shell, VC_2);                                         // ::VC_2ASKFIRST:bb_default_login_shell

new_init_action(ASKFIRST, bb_default_login_shell, VC_3);                                           // VC_3::ASKFIRST:bb_default_login_shell

new_init_action(ASKFIRST, bb_default_login_shell, VC_4);                                        // VC_4::ASKFIRST:bb_default_login_shell

/* sysinit */

new_init_action(SYSINIT, INIT_SCRIPT, "");                                                              //::RESTART:init

return;

#if ENABLE_FEATURE_USE_INITTAB

}



<id>:<runlevels>:<action>:<process>


 开机后可以用ps命令查看有哪些命令在跑;

linux命令ls cp 等都是指向busybox的命令,所以要看busybox的源码。











相关文章:

  • 2022-01-22
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-10
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-26
  • 2021-10-30
  • 2021-08-04
相关资源
相似解决方案