By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!
返回总目录 : Yocto开发讲解系列 - 总目录
busybox简介
记得以前我们在移植和制作文件系统的时候通常使用的是busybox为蓝本,在加上自己的一些东西就成了一个文件系统,busybox很适合嵌入式,占用资源不多,也有类似的linux kernel一样的配置方法,例如下图:
busybox-1.32.0]$ make menuconfig
- 1
我们文件系统中很多的命令,基本上都来源于busybox,比如:
# ls -l /sbin/ | grep busybox
lrwxrwxrwx. 1 root root 23 Nov 12 2021 acpid -> /lib/busybox/sbin/acpid
lrwxrwxrwx. 1 root root 27 Nov 12 2021 add-shell -> /lib/busybox/sbin/add-shell
lrwxrwxrwx. 1 root root 26 Nov 12 2021 addgroup -> /lib/busybox/sbin/addgroup
lrwxrwxrwx. 1 root root 25 Nov 12 2021 adduser -> /lib/busybox/sbin/adduser
lrwxrwxrwx. 1 root root 26 Nov 12 2021 adjtimex -> /lib/busybox/sbin/adjtimex
lrwxrwxrwx. 1 root root 21 Nov 12 2021 arp -> /lib/busybox/sbin/arp
lrwxrwxrwx. 1 root root 24 Nov 12 2021 arping -> /lib/busybox/sbin/arping
lrwxrwxrwx. 1 root root 23 Nov 12 2021 blkid -> /lib/busybox/sbin/blkid
...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
busybox官方解释:
BusyBox将许多常见 UNIX 实用程序的小版本组合到一个小的可执行文件中。它为您通常在 GNU fileutils、shellutils 等中找到的大多数实用程序提供了替代品。然而,所包含的选项提供了预期的功能,并且表现得非常像它们的GNU 对应项。 BusyBox 为任何小型或嵌入式系统提供了一个相当完整的环境。 BusyBox的编写考虑了大小优化和有限的资源。它也是极其模块化的,因此您可以在编译时轻松包含或排除命令(或功能)。这使得定制您的嵌入式系统变得容易。要创建一个工作系统,只需在/dev 中添加一些设备节点,在 /etc 中添加一些配置文件,以及一个 Linux 内核。
busybox增加小程序(brctl为例)
现在我在移植的时候发现了这么一个情况,就是我的文件系统中少了一个命令工具,比如
brctl
没有,并不是因为busybox没有这个工具,而是编译选项上没有使能编译选项。我们可以这样查看是否使能编译选项的状态:
cd poky/build/tmp/work/xxxxx-poky-linux-gnueabi/busybox/1.32.0-r0/busybox-1.32.0
vim .config
# CONFIG_BRCTL is not set
# CONFIG_FEATURE_BRCTL_FANCY is not set
# CONFIG_FEATURE_BRCTL_SHOW is not set
- 1
- 2
- 3
- 4
- 5
使能brctl配置
添加一个others.cfg的配置文件(是不是和之前添加kernel的conf配置很类似):
poky]$ cd meta-mybsp/
meta-mybsp]$ mkdir -p recipes-core/busybox/files
meta-mybsp]$ cd recipes-core/busybox/
busybox]$ vim files/others.cfg
CONFIG_BRCTL=y
CONFIG_FEATURE_BRCTL_FANCY=y
CONFIG_FEATURE_BRCTL_SHOW=y
- 1
- 2
- 3
- 4
- 5
- 6
- 7
有读者盆友可能会问我怎么知道要使能那些宏呢?有办法,我们可以到
poky/build/tmp/work/xxxxx-poky-linux-gnueabi/busybox/1.32.0-r0/busybox-1.32.0/
- 1
目录下面,先备份原有的配置文件:
busybox-1.32.0]$ cp .config .config.bak
- 1
然后使用
make menuconfig
来配置,比如
brctl
命令:
配置完成后保存,对比一下
.config
和
.config.bak
文件即可看出有那些配置项增删。把增删的内容提取出来放到配置文件,例如上面的others.cfg文件中既可以。
然后我们开始写一个
busybox_%.bbappend
文件
busybox]$ cat busybox_%.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://others.cfg"
- 1
- 2
- 3
- 4
最后全编译刷机后验证:
~# brctl --help
BusyBox v1.32.0 () multi-call binary.
Usage: brctl COMMAND [BRIDGE [ARGS]]
- 1
- 2
- 3
- 4
希望帮我点个赞加关注,你的喜欢就是我持续更新的动力!
更新时间202112