第17-2章 移植Busybox

移植Busybox

所谓制作根文件系统,就是创建各种目录,并且在里面创建各种文件。比如/bin、/sbin目录下存放各种可执行程序,在/etc目录下存放配置文件,在/lib目录下存放库文件。

在创建一个最小的根文件系统时,使用Busybox的话,只需要在/dev目录下创建必要的设备节点、在/etc目录下创建一些配置文件就可以了,如果Busybox使用动态连接,还要在/lib目录下包含库文件

inittab文件解析

/etc/inittab文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下:

:::
  • id:表示这个子进程要使用的控制台(即标准输入、标准输出、标准错误设备)。如果省略,则使用与init进程一样的控制台

  • runlevels:对于Busybox init程序,这个字段没有意义,可以省略

  • action:表示init进程如何控制这个子进程,有8种取值

action名称 执行条件 说明
sysinit 系统启动后最先执行 只执行一次,init进程等待它结束才继续执行其它动作
wait 系统执行完sysinit进程后 只执行一次,init进程等待它结束才继续执行其它动作
once 系统执行完wait进程后 只执行一次,init进程不等待它结束
respawn 启动玩once进城后 init进程监测发现子进程退出时,重新启动它
askfirst 启动完respawn进城后 与respawn类似,不过init进程先输出“Please press Enter to activate this console”,等用户输入回车键之后才启动子进程
shutdown 当系统关机时 即重启、关闭系统命令时
restart busybox中配置了CONFIG_FEATURE_USE_INITTAB,并且init进程接收到SIGHUP信号 先重新读取、解析/etc/inittab文件,再执行restart程序
ctrlaltdel 按下ctrl+al+del组合键时 -

- process:要执行的程序,它可以是可执行程序,也可以是脚本。如果字段前有’-‘字符,这个程序被称为“交互的”。

inittab总结

  1. 在系统启动前期,init进程首先启动action为sysinit、wait、once的3类子进程
  2. 在系统正常运行期间,init进程首先启动action为respawn、askfirst的两类子进程,并监视它们,发现某个子进程退出时重新启动它
  3. 在系统退出时,执行action为shutdown、restart、ctrlaltdel的3类子进程(之一或全部)

glibc库

  1. 加载器ld-2.3.6.so、ld-linux.so.2

    动态程序启动前,它们被用来加载动态库

  2. 目标文件(.o)

    比如crt1.o、crti.o、crtn.o、gcrt1.o、mcrt1.o等。在生成应用程序时,这些文件像一般的目标文件一样被连接

  3. 静态库文件(.a)

    比如静态数学库libm.a、静态c++库libstdc++.a等,编译静态程序时会连接它们

  4. 动态库文件(.so、.so.[0-9]*)

    比如动态数学库libm.so、动态c++库libstdc++.so等,它们可能是一个链接文件

  5. libtool库文件(.la)

    在连接库文件时,这些文件会被用到。比如它们列出了当前库文件所依赖的其它库文件,程序运行时无需这些文件

  6. gconv目录

    里面是有头字符集的动态库

  7. ldscripts目录

    里面是各种连接脚本,在编译应用程序时,它们被用于指定程序的运行地址、各段的位置等

readelf -a xxx.elf | grep “Shared”

你可能感兴趣的:(第17-2章 移植Busybox)