构建根文件系统之busybox

配置busybox

首先将busybox的压缩包放入服务器进行解压缩;

busybox集合了几百个命令,在一般的系统中并不需要全部使用。可以通过配置busybox来选择这些命令、定制某些命令的功能(选项)、指定busybox的连接方法(动态连接还是静态连接)

在解压之后的INSTALL文件里,有这样的提示:

The BusyBox build process is similar to the Linux kernel build:

make menuconfig    # This creates a file called ".config"
make          # This creates the "busybox" executable
make install       # or make CONFIG_PREFIX=/path/from/root install

首先,执行make menuconfig。

HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
scripts/basic/split-include.c: 在函数‘main’中:
scripts/basic/split-include.c:133:11: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
scripts/kconfig/conf.c: 在函数‘conf_string’中:
scripts/kconfig/conf.c:174:20: 警告: 变量‘help’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c: 在函数‘conf_sym’中:
scripts/kconfig/conf.c:208:6: 警告: 变量‘type’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c: 在函数‘conf_choice’中:
scripts/kconfig/conf.c:283:6: 警告: 变量‘type’被设定但未被使用 [-Wunused-but-set-variable]
scripts/kconfig/conf.c:359:9: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
scripts/kconfig/conf.c: 在函数‘conf_askvalue’中:
scripts/kconfig/conf.c:104:8: 警告: 忽略声明有 warn_unused_result 属性的‘fgets’的返回值 [-Wunused-result]
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/mconf.o
scripts/kconfig/mconf.c: 在函数‘show_textbox’中:
scripts/kconfig/mconf.c:836:7: 警告: 忽略声明有 warn_unused_result 属性的‘write’的返回值 [-Wunused-result]
scripts/kconfig/mconf.c: 在函数‘exec_conf’中:
scripts/kconfig/mconf.c:470:6: 警告: 忽略声明有 warn_unused_result 属性的‘pipe’的返回值 [-Wunused-result]
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
scripts/kconfig/lex.zconf.c:1606:16: 警告: ‘input’定义后未使用 [-Wunused-function]
HOSTLD scripts/kconfig/mconf
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: 致命错误: curses.h:没有那个文件或目录
编译中断。
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [menuconfig] 错误 2
make: *** [menuconfig] 错误 2

 如果执行make menuconfig时,出现上面的这一坨东西,说明Ubuntu系统中缺少一个套件ncurses devel,只需要把这个套件按上即可。

sudo apt-get install libncurses5-dev

再次执行make menuconfig,你会看到下面这东东:

(1)busybox的性能微调

  设置TAB键补全,需要进行如下配置:(不是必须的,为了开发方便)
  busybox  setting   --->

    busybox  library  tuning  --->

      [*]  tab  completion

其余的使用默认配置即可,保存、退出。

 

编译busybox,注意:一定要切换为root权限,否则在执行安装时,会出现找不到arm-linux-gcc的命令。在这里废了好多事,一定要注意。

编译之前,先修改busybox根目录的Makefile,使用交叉编译器。

修改前:

ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=

修改后:

ARCH ?= arm
CROSS_COMPILE ?=arm-linux-

先运行source /etc/profile,使改过的makefile生效

执行make命令,编译busybox。这时会让你感到崩溃,又会出现问题,如下所示:

CC ipsvd/tcpudp.o
In file included from /home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter_ipv4.h:8,
from ipsvd/tcpudp.c:33:
/home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:44: error: field 'in' has incomplete type
/home/glb/armtoolchain/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:45: error: field 'in6' has incomplete type
ipsvd/tcpudp.c: In function 'tcpudpsvd_main':
ipsvd/tcpudp.c:314: warning: ignoring return value of 'write', declared with attribute warn_unused_result
make[1]: *** [ipsvd/tcpudp.o] 错误 1
make: *** [ipsvd] 错误 2

解决办法:arm-linux交叉编译工具链

进入~/armtoolchain/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux目录

打开netfilter.h这个文件,添加#include <netinet/in.h>,保存,退出。

然后再进如busybox目录下,执行make,你会看到

AR util-linux/lib.a
LINK busybox_unstripped
Trying libraries: crypt m
Library crypt is needed
Library m is needed
Final link with: crypt m

这说明编译成功了。

 

安装busybox

注意注意注意!!!!千万不要直接make  install,你如果这样做的话,就将它安装到pc机上了。把pc机给破坏掉

创建一个文件:

mkdir /work/nfs_root/first_fs

make  CONFIG_PREFIX=/work/nfs_root/first_fs  install 

安装完成后,在该目录下生成了如下文件和目录

 

drwxr-xr-x 2 root root 4096 6月 27 11:27 bin
lrwxrwxrwx 1 root root 11 6月 27 11:27 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 6月 27 11:27 sbin

其中,linuxrc和/sbin/init程序功能完全一样,其他目录下是各种命令,不过他们都是/bin/busybox的符号链接。

 

转载于:https://www.cnblogs.com/-glb/p/7084385.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值