当前位置:首页 > 服务端 > 构建根文件系统之busybox

构建根文件系统之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,你会看到下面这东东:

构建根文件系统之busybox _ JavaClub全栈架构师技术笔记

(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

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/125251.html

标签: unused variable
分享给朋友:

“构建根文件系统之busybox” 的相关文章