• 18.14 构建Linux根文件系统


    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.0usybox-1.7.0examplesinittab中:

        # 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


  • 相关阅读:
    大数据实践解析(上):聊一聊spark的文件组织方式
    npm 项目更换目录后无法启动
    Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求
    Vue 爬坑之路(五)—— 组件进阶
    Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
    Vue 爬坑之路(三)—— 使用 vue-router 跳转页面
    Vue 爬坑之路(二)—— 组件之间的数据传递
    Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目
    同步类的基础AbstractQueuedSynchronizer(AQS)
    由于不当的执行顺序导致的死锁
  • 原文地址:https://www.cnblogs.com/baixu/p/10481329.html
Copyright © 2020-2023  润新知