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 promptsLinux Module Utilities--->[ ]Simplified modutils[*]depmod[*]insmod[*]lsmod[*]modprobe[*]rmmodLinux 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后,根文件系统目录中已经生成了这四个文件