随想录(被高估的busybox)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com


    传统的嵌入式系统都是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理解比较充分,调试就会变得很简单了。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值