1、busybox源码下载
BusyBox 的官方网站是:http://www.busybox.net/
下面以busybox-1.26.0.tar.bz2为例来讲解一下 BusyBox 的编译安装过程。
2、 同步拷贝、解压到ubuntu
我的根文件系统目录是:/root/porting_x210/rootfs/rootfs1
在/rootfs目录下创建bill_rootfs目录,将该压缩包解压到这,代码如下:
cp /root/windows_share/s5pv210/rootfs/busybox-1.26.0.tar.bz2 ./
tar jxvf busybox-1.26.0.tar.bz2
3、修改vi Makefile
(1) ARCH = arm
(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
4、配置make menuconfig
Busybox Settings--->
Build Options--->
[*]Build BusyBox as a static binary(no shared libs)
Busybox Library Tuning--->
[*]vi-style line editing commands
[*]Fancy shell prompts
Linux Module Utilities--->
[ ]Simplified modutils
[*]depmod
[*]insmod
[*]lsmod
[*]modprobe
[*]rmmod
Linux System Utilities--->[*]mdev
[*]Support /etc/mdev.conf
[*]Support subdirs/symlinks
[*]Support regular expressions substitutions when renaming dev
[*]Support command execution at device addition/removal
[*]Support loading of firmwares
5、编译make -j6 报错:
5.1、出错1: 宏未声明MTD_FILE_MODE_RAW
解决思路:
上网查这个宏发现mtd/mtd-abi.h里面有定义,于是定位到工具链的该文件:sudo locate mtd-abi.h
vi /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include/mtd/mtd-abi.h
打开后在里面搜/MTD_FILE_MODE找不到,再搜MTD_MODE
有三种方法可以解决——
方案1是修改busybox中(最方便,但函数中的宏被修改了)
方案2是修改工具链mtd-abi.h,将enum中的MTD_MOD_RAW改为MTD_FILE_MODE_RAW
方案3是在vi miscutils/nandwrite.c中添加头文件(略微麻烦)
(要先grep “MTD_FILE_MODE_RAW” * -nR搜MTD_FILE_MODE_RAW,结果发现在本机的/usr/include/mtd/mtd-abi.h中有)
还是报错,找不到mtd-abi.h,需要将/usr/include/mtd/mtd-abi.h拷贝到busybox的include文件中再包含!
上述修改完后再次编译,成功解决,但出现新错误——
5.2、出错2: 未声明BLKDISCARD
解决思路:在make menuconfig中搜索/ BLKDISCARD
关掉后再次编译问题解决,但还是有别的错误——
5.3、出错3:其他未定义问题(stens、syncfs)
解决思路同上:在make menuconfig中找nsenter、sync
由于这些文件与主功能无关,就选择不编译这两个模块(=N)
再次编译,成功了!ls查看结果如下:
6、make install安装
默认安装目录是:./_install
安装到自己的根文件系统目录:
<make menuconfig查看make install时配置的位置:busybox settings—>Installation Options
<进入后填写自己的rootfs目录:/root/porting_x210/rootfs/rootfs1,保存退出
make install后,根文件系统目录中已经生成了这四个文件