为tq2440编译kernel全过程
按照之前别人的介绍,拿来了内核的源码以及patch后,就可以开始了。
1。解压:
tar xvjf linux-2.6.25.8_EmbedSky.tar.bz2
其中的j参数对应的压缩包是bz2的,如果是gzip的,就是参数了z。
2。进入解压后的目录:
cd linux-2.6.25.8/
3。把patch拷贝过来:
cp ../linux-2.6.25.8_EmbedSky.patch .
4。然后打上patch:
patch -p1 < linux-2.6.25.8_EmbedSky.patch
其中,p后面的数字1,取决于patch中的内容是:
diff -urNwB linux-2.6.25.8/arch/arm/boot/Makefile linux-2.6.25.8_EmbedSky/arch/arm/boot/Makefile
— linux-2.6.25.8/arch/arm/boot/Makefile 2008-06-22 13:25:26.000000000 +0800
+++ linux-2.6.25.8_EmbedSky/arch/arm/boot/Makefile 2009-01-11 02:10:52.000000000 +0800
。。。。。。。
这个1,就是对应的上面的去掉1层路径,也就是linux-2.6.25.8和 linux-2.6.25.8_EmbedSky,这样剩下的路径,就和当前处于linux kernel的根目录下的文件路径一致了,就可以找到对应文件去做patch了。
5。我的板子是tq2440的,是三星的s3c24XX系列的,所以,找一个和此板子最接近的config文件,去配置:
ls arch/arm/configs/
可以看到有个 s3c2410_defconfig,这个和我们所要的配置最为接近,所以就用它
make s3c2410_defconfig
6。这样,内核的多数配置就差不多了,自己再去根据自己实际的需要配置即可:
make menuconfig
配置好后,选择主菜单中的Save,存为.config
如果不保存,直接退出menucofig,也会提示你是否保存的。记得选yes,要保存。
7。配置好后,再编译之前,要去改对应的makefile,加上我们自己的CPU的类型:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
此处,由于我已经用buildroot编译好了一个arm交叉工具链了,而且已经把对应的路径加到环境变量PATH中去了,所以,此处直接可以写arm-linux-,否则,就要写绝对路径,让make编译的时候,能够找到你的交叉编译器。
8。由于其他东西,天嵌公司给的源码和patch都是弄好了的,所以,不需要自己折腾了。也就可以直接:
make
将去编译所有选中build-in,编译进入内核的文件及其module模块的文件。
9。再去:
make zImage
去生成压缩的kernel文件。
10。此处,我接着直接去:
make uImage
打算去声称对于Uboot能够识别的kernel镜像,但是出错了:
"mkimage" command not found – U-Boot images will not be built
接着去百google度一下,怎么搞定这个mkimage工具….
百度还没搜索完,就想起来了,这个工具,貌似是在uboot里面的。
去uboot目录下的tools下面看,的确是,有个已经编译好了的mkimage工具。
这样,直接把对应路径,加到PATH中去即可。
vi /home/crifan/.bashrc
然后加上:
export PATH=$PATH:/home/crifan/develop/buildroot/buildroot-2009.05/build_arm/staging_dir/usr/bin:/home/crifan/develop/uboot/uboot_withUSB/opt/EmbedSky/u-boot-1.1.6/tools
即可,这样再回去内核源码那边,去make uImage,就可以了:
crifan@ubuntu904:linux-2.6.25.8$ make uImage
CHK include/linux/version.h
make[1]: “include/asm-arm/mach-types.h”是最新的。
,。。。。。。。
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-2.6.25.8
Created: Sun Oct 18 01:33:53 2009
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1717188 Bytes = 1676.94 kB = 1.64 MB
Load Address: 0x30008000
Entry Point: 0x30008000
Image arch/arm/boot/uImage is ready
至此,编译内核完成。
[参考资料]
1。【转】嵌入式ARM移植之三:移植 linux-2.6.26 内核
http://hi.baidu.com/serial_story/blog/item/eb214631a3676b11eac4af7a.html
转载请注明:在路上 » 为tq2440编译kernel全过程