ARM9开发—Linux内核的移植方法
上一篇《ARM9开发—基于TQ2440的Linux镜像编译方法》,介绍了嵌入式Linux移植的三个部分,接下来将介绍三部分的具体操作。
由于uboot移植过程中,相关的ARM硬件知识要求比较多,因此,此部分先不进行介绍,后期有专题讲解。本文将详细介绍如何将原始linux-2.6.30.4源码移植到TQ2440开发板中。
1. 目录创建
在/opt目录下新建文件夹Learn2440,用于区分官方目录EmbedSky,后期的各类原始源码将在此目录下进行修改和编译。
2. 源码下载
(1)官网下载源码
在打开的界面可以看到不同版本的Linux内核源码,本文以linux-2.6.30.4.tar.bz2为例进行下载。
(2)解压到源码
tar xvfj linux-2.6.30.4.tar.bz2 -C /opt/Learn2440
解压完成后目录文件,如下图:
3. 参数配置
需要修改linux源码相关内容以来适配TQ2440开发板。
(1)Makefile
打开主目录下的Makefile文件,第193行、194行内容:
ARCH ?= $(SUBARCH) CROSS_COMPILE ?=
修改为:
ARCH = arm CROSS_COMPILE = arm-linux-
如下:
(2)mach-smdk2440.c
打开内核源码/opt/Learn2440/linux-2.6.30.4/arch/arm/mach-s3c2440/mach-smdk2440.c文件,第163行内容:
s3c24xx_init_clocks(16934400);
修改为:
s3c24xx_init_clocks(12000000);
如下:
(3)生成配置单
由于配置单的配置选项很多,不推荐从零开始配置,建议参考源码自带的s3c2410_defconfig文件进行修改,将s3c2410_defconfig另存为默认配置文件:
cp /opt/Learn2440/linux-2.6.30.4/arch/arm/configs/s3c2410_defconfig /opt/Learn2440/linux-2.6.30.4/.config
4. 修改配置单
根据以上操作,尽管生成的.config配置文件已包含大部分内核配置选项,但针对S3C2440芯片,依然需要对其它选项进行修改,如下:
make menuconfig
(1)General setup
除以下配置项外,其它都取消选中。
(2)System Type
(3)Kernel Features
5. 修改机器码
打开 /opt/Learn2440/linux-2.6.30.4/arch/arm/tools/mach-types 文件,第379行内容:
s3c2440 ARCH_S3C2440 S3C2440 362
修改为:
s3c2440 ARCH_S3C2440 S3C2440 168
如下:
注意:
在《ARM9开发—基于TQ2440的Linux镜像编译方法》中提到的源码错误,也需修改。打开 kernel/timeconst.pl文件,第373行内容:
if (!defined(@val)) { 修改为: if (!@val) {
6. 编译Linux镜像
make zImage cp arch/arm/boot/zImage ./zImage.bin
此时在主目录下,可看到生成的zImage.bin镜像,利用DNW烧写工具进行下载即可。
7. 启动信息
将移植后的Linux启动信息和官方启动信息进行比对,如图所示:
根据log信息可知,linux内核源码的移植方法正确,系统已正常启动。
8. 其它
在Linux系统启动结尾,可看到如下错误提示:
这是因为Linux中未添加文件系统的缘故,下节将对详细介绍文件系统的移植。