天天看点

busybox在make编译过程中出错

博主在busybox安装时,在make编译时出了两个错:'MTD_FILE_MODE_RAW' undeclared和'BLKSECDISCARD' undeclared ,在经过上网百度时,发现几乎所有的博客都是千篇一律,但是实际试了一下,发现并没有成功。在经过根据自己的猜想和实验之后,自己想出了一种解决方法,贴出来交流一下。

(前四步为busybox安装过程,第5步为上述问题的解决方法)

1.到官网下载busybox,并且在ubuntu中解压      busybox官网链接

2.在Makefile中修改ARCH = arm和

  CROSS_COMPILE = /你自己的交叉编译工具链的路径/bin/arm-none-linux-gnueabi-

3.make menuconfig进行配置(这一步的前题是你的Ubuntu系统里安装有ncurses库),配置项按下面的进行修改,下面没有提到的配置项就按默认的来:

Busybox Settings--->

Build Options--->

[*]Build BusyBox as a static binary(no shared libs)

Busybox Library Tuning--->

[*]vi-style line editing commands

[*]Fancy shell prompts

Coreutils--->

[ ]sync

Linux Module Utilities--->

[ ]Simplified modutils

[*]insmod

[*]rmmod

[*]lsmod

[*]modprobe

[*]depmod

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

[ ]nsenter

4.make进行编译,之后make install进行安装,make menuconfig配置以下项可以修改安装的目录

Busybox Settings--->

BusyBox installation prefix

5.注意:

make编译中出现如下错误时:

miscutils/nandwrite.c: In function 'nandwrite_main':

miscutils/nandwrite.c:151: error: 'MTD_FILE_MODE_RAW' undeclared (first use in this function)

miscutils/nandwrite.c:151: error: (Each undeclared identifier is reported only once

miscutils/nandwrite.c:151: error: for each function it appears in.)

scripts/Makefile.build:197: recipe for target 'miscutils/nandwrite.o' failed

make[1]: *** [miscutils/nandwrite.o] Error 1

Makefile:742: recipe for target 'miscutils' failed

make: *** [miscutils] Error 2

可以在/交叉编译工具链路径//arm-none-linux-gnueabi/libc/usr/include/mtd/mtd-abi.h文件中末尾的

enum mtd_file_modes {

MTD_MODE_NORMAL = MTD_OTP_OFF,

MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,

MTD_MODE_OTP_USER = MTD_OTP_USER,

MTD_MODE_RAW,

};

修改为

enum mtd_file_modes {

MTD_MODE_NORMAL = MTD_OTP_OFF,

MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,

MTD_MODE_OTP_USER = MTD_OTP_USER,

MTD_MODE_RAW,

MTD_FILE_MODE_RAW,

};

make出现如下错误时:

util-linux/blkdiscard.c: In function 'blkdiscard_main':

util-linux/blkdiscard.c:72: error: 'BLKSECDISCARD' undeclared (first use in this function)

util-linux/blkdiscard.c:72: error: (Each undeclared identifier is reported only once

util-linux/blkdiscard.c:72: error: for each function it appears in.)

scripts/Makefile.build:197: recipe for target 'util-linux/blkdiscard.o' failed

make[1]: *** [util-linux/blkdiscard.o] Error 1

Makefile:742: recipe for target 'util-linux' failed

make: *** [util-linux] Error 2

在/交叉编译工具链路径/arm-none-linux-gnueabi/libc/usr/include/linux/fs.h文件中添加一句 #define   BLKSECDISCARD _IO(0x12,119)

修改完这两项之后,再去make编译就不会出错了,接着就可以正常安装了。

如果修改完这两个文件仍有错误,可以查看一下自己make menuconfig配置时是否与我上边的第3步的配置一样。

继续阅读