内核移植之编译初体验

    开发平台:Ubuntu11.04

    目 标板:优龙FS2410

    编 译器:arm-gcc-4.1.1.tar.bz2  (可从http://download.csdn.net/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即可。

你可能感兴趣的:(function,Path,makefile,终端,编译器,linux内核)