笔记整理—内核!启动!—kernel部分(6)buxybox详解

        上一章我们说到busybox,但还有一部分没有说完,busybox的配置与kernel的menuconfig几乎一样。也是配置然后make、makeinstall,kbuild是busybox的makefile,可以根据installtion options设定安装位置,安装后会出现/bin、/linuxrc、/sbin、/usr等文件夹。

        inittab文件与busybox有关,与init进程1文件有关,是一个配置文件,放在etc目录下。inittabs是一个文本格式的文件,其中的格式如下:

::sysinit:
    ::是格式,sysinit是项目

id:rulevels:action:process
    id为id字段,rulevels为运行级别,action为操作,process为执行进程

        busybox最终进入一个循环,当某个action满足,则执行这个操作的进程,所以inittab将会一直使用。

        action:respawm=>若process字段不存在,就会启动这个操作。

                     wait=>启动进程,等待处理结束后进入下一个进程

                      once=>只执行一次

                      boot=>只在系统启动时才启动一次

                      sysinit=>在访问控制台前执行(rcs)

                      askfirst=>让用户按下回车(控制台准备好了,可用respawn代替这样就不用回车了)

                      ctrlabtdel=>满足ctrl+alt+del则(重启)

                      shutdown=>关机就(取消挂载文件系统)

                       estart=>重启

        对于busybox而言coreutils是核心,用于存放核心指令。

        busybox的入口:kernel或uboot等的裸机程序入口不在main,而是在链接脚本,mian适用于应用层程序,作为其程序开始的标志,因为busybox是一个应用程序所以mian是其入口。

        kconfig是一个编译用工具文件夹,如果一个文件被使用了,会被编译为.o文件,但不是所有.o文件都有作用,在应用层上,有点编译了但并没有链接。

        busybox的main位置位于libbb/appletlib.c中,xxx_main()是支持的每一个程序的入口。

        busybox的ls、pwd、......都链接到了busybox,而非单独的一根个程序,通过如ls_main()去实现ls指令。在run_applet_and_exit(applet,argv)进行的指令调用,找不到就打印not find。

        inittab解析:busybox/init/initial.c/init_mian函数.console_init()初始化控制台,chdir("/")切换到根目录;setsid() super id;puyenv()保存环境变量;parse_inittab 解析inittab。

        inittab的作用:将action与process解析出来,然后执行一次sysinit、wait、once。在while(1)中执行respwan与askfurst。

        pwd指令:pwd_main()->buf=realloc_getcwd_or_warn->getcwd()(这是一个库函数)

        busybox的shell指令是阉割了的版本,能用但功能不全,只是对一些指令做了集合,ubuntu的vmlinuz作为内核是未压缩的。

        本章对busybox的解析就做到这,下一章将对rcs文件进行解析。

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值