busybox

本文探讨了BusyBox在嵌入式系统中的作用,解析其作为用户程序、命令集及初始化程序的本质,强调它并非不可或缺,而是根文件系统的一部分。文章还介绍了调试BusyBox的方法,并指出其在启动过程中的实际位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文博客:随想录(被高估的busybox)

 传统的嵌入式系统都是uboot+kernel+rootfs。其中最简单的rootfs就是ramfs+busybox+/dev + /etc + /lib。至于etc目录中的inittab和init.d/rcS这两个都是busybox中init程序分析的内容。如果本身没有busybox,其实也无所谓这两个脚本。

1、busybox就是普通的用户程序

    建议同学们可以用objdump看一下busybox,不管是静态编译还是动态编译,busybox只是一个简单的类hello_world程序。

2、所有的命令都指向busybox

    如果登录到嵌入式设备上,那么我们会发现其实所有命令指向的都是busybox这么一个程序。

3、第一个用户程序就是busybox

    在kernel返回用户侧运行的第一个程序,即/bin/init或者/sbin/init,其本身运行的还是busybox程序。

4、返回用户侧后,第一个c函数不是init_main

    之前说过,busybox就是普通的c代码,因此它的入口就是main函数、代码位于libbb目录下。只不过这个程序会判断argv[0]的数值,如果发现是init,那么会调用init_main,如果是cd,那么会调用cd_main,以此类推。

5、调试busybox

    调试busybox有很多办法。a、调试的时候一般静态编译busybox;b、如果是自己添加的命令,只要gdb server+gdb调试就可以了;c、如果是系统自带命令,不确认系统是否调用busybox,可以用打印或者点灯的方法来解决;d、如果以上方法都不合适,可以自己写一个init程序代替busybox,android开机后的第一个用户程序就是自己写的,也没有用busybox,问题不大。大家平时使用较多的ubuntu,它的启动程序也不是busybox,一般也是由sysvinit+systemd一起完成的。

6、过分夸大的busybox

    busybox只是rootfs的一个组成部分,没有busybox我们可以自己写一个简单的shell,这些问题都不大。特别是调试的时候,厘清drvier、busybox、script、rootfs问题的时候,常常需要我们自己手写init程序,这个时候如果对rootfs和busybox理解比较充分,调试就会变得很简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值