您的位置:首页 > 运维架构 > Linux

busybox在make编译过程中出错

2018-01-11 18:06 851 查看
博主在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文件中添加一句 #defineBLKSECDISCARD _IO(0x12,119)

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

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

版权声明:个人心得,欢迎来信来函交流。转载请与本人沟通并注明出处!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息