BusyBox

BusyBox

The Swiss Army Knife of Embedded Linux


概念

一个集成了数百个常用Linux/Unix命和工具的软件,可与glibc或uclibc库进行链接编译,可采用动态/静态链接

特点

减小文件尺寸,减轻编译工作量

目录结构

重点关注 appletsinitlibbb

libbb:Busybox各个命令的共享代码,主要有功能测试失败、中止程序错误信息,链表管理功能(llist.c)、命令行参数解析(getopt32.c)

applets:命令集合

init:init进程实现的源文件(init/init.c)

init程序

开始→设置信号处理函数、初始化控制台→解析inittab文件→执行inittab众多命令

/etc/inittab

启动相关进程或脚本,配置文件、创建哪些进程在此定制,文件中每个条目用来定义一个子进程

条目格式:<id> : <runlevels> : <action> : <process> 
id:子进程要使用的控制台,默认为与init进程相同
runlevels:无意义,在Linux有意义
action:表示init进程如何控制这个子进程
process:执行的程序,可执行程序或脚本

例程: :sysinit:/etc/init.d/rcS
id省略,取默认值,runlevels无效,启动sysinit进程,执行rcS脚本
action描述
sysinit系统启动后最先执行
wait系统执行完sysinit进程后执行
once系统执行完wait进程后执行
respawn系统启动完once进程后执行,有退出则重新执行
askfirst系统启动完respawn进程后执行,有退出则重新执行
shutdown系统关机时
restart配置了CONFIG_FEATURE_USE_INITTAB,且init进程接收到SIGHUP信号
ctrlaltdelStuff to do before rebooting

Busybox编译、运行、安装

一般使用menuconfig(N-curses(基于菜单的)配置工具),make menuconfig→make→make install

  1. 配置时一般选择glibc动态编译,所得可执行文件linuxrc内存较小
  2. 编译后可在.config查看配置选项
  3. 解析.config文件,结果存放在include/bbconfigopts.h
  4. 各命令配置选项集合在include/config目录下,以该目录下文件生成一个完整的.h文件,即最终配置文件include/applet_tables.h
  5. 安装目录:_install/bin, sbin, user, linuxrc

向Busybox添加新命令

  1. 命令存放路径选择:任一xxxutils目录下(最好miscutils),取名hello_busybox.c
  2. 编写命令源代码:函数名有讲究,hello_busybox_main
  3. 修改编译文件:xxxutils/Config.src(Config.in),使配置界面有此命令可选择
  4. 环境变量设置:xxxutils/Kbuild.src
  5. 命令生成后存放位置:include/applets.src.h(applets.h),三个参数:命令名字、命令存放路径、命令权限
  6. 增加帮助信息:include/usage.src.h(usage.h)
  7. 编译、测试

--有参考,侵删--

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值