【Busybox】Busybox init启动过程

来源:互联网 发布:拳击 泰拳 身材 知乎 编辑:程序博客网 时间:2024/05/29 12:07

Busybox会在内核刚完成加载后就立即启动,此后Busybox会跳转到它的init进程开始自横行,它的init进程主要进行一下的工作。

1、为init进程设置信号处理进程

2、对控制台进行初始化

3、解析inittab文件即/etc/inittab

4、在默认情况想ia,Busybox会运行系统初始化脚本/etc/init.d/rcS

5、运行导致init暂停的inittab命令(action type : wait)

6、运行仅执行一次的initta命令(action type : once)

完成初始化控制台后,busybox检查/etc/inittab文件是否存在,如果不存在,将使用一个缺省的inittab,我可可以自己写一个inittab文件,格式如下:

id:runlevel:action:process

id指定要启动的进程   runlevel是运行级别,busybox不支持运行级别,所以为空

action是要执行的动作,process指定要运行的程序和启动的命令行参数

 

Action:

sysinit   指定初始化脚本路径

respawn  当某进程结束时重启该程序

askfirst  在启动程序前提示用户按回车键

wait  等待所启动的进程结束

once  只运行进程一次,不等待进程结束

crtlaltdel 按组合键时执行的进程

shotdown 系统关闭时运行的进程

restart 重启时运行的进程,通常是init本身

 

自己写的inittab

::sysinit:/etc/init.d/rcs

::respawn:-/bin/sh

tty2:askfirst:-/bin/sh

::ctrlaltdel:/bin/umount –a –r

第一句指定执行初始化脚本为 /etc/init.d/rcS

第二句就是当进程退出,如执行exit后,又重新出现命令提示符

      如果要用帐号密码登陆,则改成-/bin/login

第三句是在启动linux后,提示要按回车才能进入

第四句是在按组合键后,执行umount,把所有文件系统umount

 

再看/etc/init.d/rcS

#!/bin/sh          //指定shell

/bin/mount –a        //mount –a 为挂载全部文件系统,详见/etc/fstab

exec /usr/etc/.rc.local   //执行rc.local

 

rcS只完成挂载全部文件系统,然后执行rc.local,进入/usr/etc,看rc.local

#!/bin/sh

ifconfig eth0 192.168.220.10   //设置板子IP

echo “Set IP = 192.168.220.10”

 

mount –t nfs –o nolock ……………..  //挂载NFS

echo “mount nfs ok”

也可以写一些其他的挂载命令

 

到这里就完成了启动过程,有时也可以在/etc下写一个profile,这个是由shell执行的,启动后,按完回车才执行,这里也可以写一些初化脚本,如初始化环境变量

 

总结:linuxrc -> /sbin/init -> /etc/inittab -> /etc/init.d/rcS -> /usr/etc/rc.local   /etc/profile

 

也可以编写自己的linuxrc

#!/bin/sh

/bin/mount –n –t ramfs ramfs /etc

/bin/cp –a /mnt/etc/* /etc

 

/bin/mount –f –ramfs ramfs /tmp

 

exec /sbin/init

 

主要就是最后一句,执行init

把/etc中的文件放到/mnt/etc/下,挂载/etc/为ramfs,然后把/mnt/etc/下的所有文件拷到/etc下,这时/etc下就为可写的了,这样可以方便修改脚本

 

最好也将/tmp挂为ramfs,因为执行QT程序时,需要tmp目录为可写

原创粉丝点击