开发平台:Ubuntu11.04
目 标板:优龙FS2410
编 译器:arm-gcc-4.1.1.tar.bz2 (可从http://download.youkuaiyun.com/detail/npy_lp/3821111 上下载)
内核源码:linux-2.6.38.8.tar.bz2
交叉编译Linux内核大概会经历如下几步:
第一步,解压内核源码包并进入源码目录
从ftp://ftp.kernel.org/pub/linux/kernel/v2.6/上下载linux-2.6.38.8.tar.bz2,然后解压并进入相应目录。
$ tar jvxf linux-2.6.38.8.tar.bz2
$ cd linux-2.6.38.8/
第二步,把基于ARM的编译器加载到终端上
建议把所提供的交叉编译工具链解压到$HOME目录下,然后通过下面的命令把它加载到终端上。
$ export PATH=$HOME/4.1.1/bin/:$PATH
第三步,修改内核源码顶层目录下的Makefile
可以使用VIM编辑器进行修改。
$ vi Makefile
把顶层目录下Makefile的第191和192行从
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改为:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnu-
第四步,拷贝相似的配置文件
优龙FS2410使用的MCU为S3C2410X,所以可以使用内核中自带的配置文件s3c2410_defconfig,并使内核编译时支持.config。
$ cp arch/arm/configs/s3c2410_defconfig .config
$ make menuconfig
General setup --->
<*> Kernel .config support
第五步,内核裁剪
根据开发板的特性裁剪掉不需要的模块,这里使用s3c2410_defconfig中的默认配置。
第六步,编译
执行make编译。
$ make
第七步,修改编译错误
使用默认配置,编译内核过程中会出现下面两个错误。
第一个错误:
include/linux/compiler-gcc4.h:8:4: error: #error Your version of gcc miscompiles the __weak directive
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
把文件include/linux/compiler-gcc4.h的第7行从
# if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1
修改为:
# if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 1
第二个错误:
drivers/leds/leds-h1940.c: In function 'h1940_greenled_set':
drivers/leds/leds-h1940.c:33: error: implicit declaration of function 'h1940_latch_control'
make[2]: *** [drivers/leds/leds-h1940.o] Error 1
make[1]: *** [drivers/leds] Error 2
make: *** [drivers] Error 2
去掉驱动leds-h1940:
$ make menuconfig
Device Drivers --->
-*- LED Support --->
< > LED Support for iPAQ H1940 device
修改好错误后继续执行make编译。
编译完成后,arch/arm/boot目录下会生成内核镜像zImage,如果须要生成uImage,再执行make uImage即可。
683

被折叠的 条评论
为什么被折叠?



