18.14 构建Linux根文件系统

时间:2022-01-20 18:52:55

18.14.1 Busybox1.7.0之init程序分析

       1.读取配置文件

       2.解析配置文件

       3.执行用户程序(根据配置文件中指定的内容)

配置文件:

       1.指定应用程序

       2.何时执行

busybox ->
    init.c ->init_main()
        ->parse_inittab()
            ->fopen(INITTAB, "r");//打开配置文件/etc/inittab 
            ->new_init_action()
              new_init_action(int action, const char *command, const char *cons)


eg. new_init_action(ASKFIRST, bb_default_login_shell, VC_2);

                     1.创建一个结构体,填充

                     2.把init_action放入init_action_list链表

        ->run_actions(SYSINIT);
            ->waitfor(a, 0);    //等待应用程序运行完毕
                ->run(a);//创建一个子进程
                ->waitpid(runpid, &status, 0);
            ->delete_init_action(a);    //在init_action_list列表里删除该进程
        ->run_actions(WAIT);
        ->run_actions(ONCE);
            ->run(a);delete_init_action(a);
        while (1) {
            run_actions(RESPAWN);
            run_actions(ASKFIRST);
                ->if(a->pid == 0)
                    {    a->pid = run(a);}
                    print "Please press Enter to acticve this console"
                    wait Enter
            wpid = wait(NULL);/*Wait for a child process to exit*/
            while (wpid > 0) {
                        a->pid = 0;    //退出后设置pid为0
            }

在busybox-1.7.0\busybox-1.7.0\examples\inittab中:

    # Format<id>:<runlevels>:<action>:<process>
    # <id>: appended to "/dev/" and used as-is.
    用作标注输入输出终端:sdtin stdout stderr printf err scanf
  //创建以下两个文件   
 
/dev/console /dev/null # <runlevels>: The runlevels field is completely ignored. #<action>: Valid actions include:sysinit, respawn, askfirst, wait, once,restart, ctrlaltdel, and shutdown.

从默认的配置文件中反推出默认的配置文件:

    ::ctrlaltdel:reboot
    ::shutdown:umount -a -r
    ::restart:init
    ::askfirst:/bin/sh
    /dev/tty2:askfirst:/bin/sh
    /dev/tty3:askfirst:/bin/sh
    /dev/tty4:askfirst:/bin/sh
    ::sysinit:/etc/init.d/rcS    

最小根文件系统:

       1./dev/console /dev/null

       2.init ->busybox

       3./etc/inittab

       4.配置文件指定的应用程序

       5.应用程序需要的库(C库)

18.14.2 移植自己修改的根文件系统执行ifconfig没反应

在etc/init.d/rcS内增加一行代码

01 #!/bin/sh
02 ifconfig eth0 10.3.10.233

第1行表示这是一个脚本文件,运行时使用/bin/sh解析;

第2行用来配置IP地址为10.3.10.233;

【本人学习IP如下:

  Windows IP:10.3.10.230

  U-Boot IP:10.3.10.231

  Linux主机IP(服务器):10.3.10.232

  板载Linux IP:10.3.10.233