busybox在make编译过程中出错

busybox在make编译过程中出错
2018年01月11日 18:06:42 0o李指导o0 阅读数:262 标签: busybox Ubuntu linux make arm-linux-gcc 更多
个人分类: linux相关
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40452910/article/details/79037094
博主在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步的配置一样。