300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > cygwin 编译linux内核 【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

cygwin 编译linux内核 【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

时间:2024-01-22 08:38:42

相关推荐

cygwin 编译linux内核 【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

【背景】

折腾:

期间,已用make xxxx_defconfig调用默认配置:

此处,接着去:

make menuconfig

去确认和修改配置。

【折腾过程】

1.去make menuconfig,结果出现“scripts/kconfig/lxdialog/checklist.o:checklist.c:(.text+0x31): undefined reference to `wmove’”的错误:

2.虽然解决了上面的问题,接着又出现了“scripts/kconfig/mconf: scripts/kconfig/mconf: cannot execute binary file”的错误:

3.此处,可以make menuconfig之后,再去参考:

去确认一下配置。

此处,还是和之前一样,什么配置都没改。使用原先别人的那个配置。

【总结】

此处,使用make menuconfig,出现一堆错误,其最终的解决办法还是:

所总结的,再次强调一遍:

此处,在Cygwin下,交叉编译Linux内核时,在make menuconfig时候出现:scripts/kconfig/mconf: scripts/kconfig/mconf: cannot execute binary file

的错误时,

原因是:

之前的linux源码linux-2.6.19.1.tar.bz2,是别人已经在别的某个Linux平台下,交叉编译OK之后的。

所以,此处解压后,得到的源码,其中包含了,之前别人在其Linux下,

在make whgs_defconfig

(此处,应该和是否加ARCH和CROSS_COMPILE是无关的,即,make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnueabi- whgs_defconfig

也会遇到同样的问题)

时候,所生成的

scripts/basic/fixdep

scripts/kconfig/conf

以及:

在make menuconfig

(此处,应该和是否加ARCH和CROSS_COMPILE是无关的,即,make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnueabi- menuconfig

也会遇到同样的问题)

时候,所生成的

scripts/kconfig/mconf

这些文件,都是“for GNU/Linux”的,无法在当前的Cygwin下运行,所以导致出现:

上述三个文件,无法运行的问题:/bin/sh: scripts/basic/fixdep: cannot execute binary file

scripts/kconfig/conf: scripts/kconfig/conf: cannot execute binary file

scripts/kconfig/mconf: scripts/kconfig/mconf: cannot execute binary file

解决办法是:

(1)对于原先的源码linux-2.6.19.1.tar.bz2,解压后,先去坐一次彻底清除:make mrproper

然后手动再删除make mrproper没有删除掉的scripts/kconfig/mconf

然后,后续的:make whgs_defconfig

和make menuconfig

就不会出现:scripts/xxx/xxx: scripts/xxx/xxx: cannot execute binary file

的问题了。

内部逻辑是:

cygwin下,当去运行:scripts/basic/fixdep

scripts/kconfig/conf

scripts/kconfig/mconf

时,会自动找到,对应的scripts/basic/fixdep.exe

scripts/kconfig/conf.exe

scripts/kconfig/mconf.exe

而此三个exe文件,都是“for MS Windows”,都是可以在Cygwin下运行的。

所以就解决了不能运行的问题。

(2)而对于另外的问题:scripts/kconfig/conf.o:conf.c:(.text+0x1f): undefined reference to `libintl_gettext’

和:scripts/kconfig/lxdialog/checklist.o:checklist.c:(.text+0×31): undefined reference to `wmove’

原因是:

分别缺少了对应的库文件:intl和ncurses

解决办法是:

修改linux-2.6.19.1\scripts\kconfig\Makefile

加上对应的库,即,从:HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

HOST_EXTRACFLAGS += -DLOCALE

改为:HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))

IS_CYGWIN=$(shell uname | grep -i cygwin > /dev/null 2>&1 && echo yes || echo no)

ifeq ($(IS_CYGWIN),yes)

HOST_LOADLIBES += -lintl -lcurses

endif

HOST_EXTRACFLAGS += -DLOCALE

即可解决此类问题。

提示:

我此处,给对应的库,加上软连接的做法:ln -s /usr/lib/libintl.a /usr/lib/libintl.so

ln -s /usr/lib/libncurses.a /usr/lib/libncurses.so

貌似是没有效果的,是无法解决上述问题的。

并且,此处暂时是没有改动原先的内核的配置的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。