yocto系列讲解 (实战篇) 71 - busybox配置相关内容

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