最近一段时间以来一直学习TQ2440内核开发板移植、嫁接驱动器。

真诚地相信这方面的知识有很大的困难,。但有一种观点认为,从看,难度越大,的提升空间的能力更大!

1、解压源代码

从Internet下载Linux 内核,我是用的是Linux-2.6.20.4。然后用命令解压。建议解压到“/home/username”文件夹下。

我的内核源代码存放在:

【Linux驱动器】Linux-2.6.20.4内核移植_开发板

2、加入对ARM的支持

由于所用的是TQ2440开发板。属于ARM9。因此要在系统中加入对ARM的支持。

方法:进入内核源代码文件夹,

【Linux驱动器】Linux-2.6.20.4内核移植_开发板_02

改动“Makefile”文件,将193行的“ARCH ?=(SUBARCH)”与194行“CROSS_COMPILE?=”将其改动为(如图)

【Linux驱动器】Linux-2.6.20.4内核移植_git_03

也能够在第一次使用“make menuconfig”时使用“make  ARCH=arm  CROSS_COMPILE=arm-linux-  menuconfig ”来取代。记得有一次忘记了改动对ARM的支持。结果在配置的时候好多的选项都没有,一開始还以为是内核的原因,于是又一次下载了内核,结果还是一样。愚蠢的错误啊!

!!

。贴出来,刺激一下自己!

改动前的配置菜单:

【Linux驱动器】Linux-2.6.20.4内核移植_git_04

改动后的配置菜单:

【Linux驱动器】Linux-2.6.20.4内核移植_无法启动_05

3、交叉编译器环境搭建

4、时钟频率改动

TQ2440使用的是12MHz的外部时钟源,而对应的配置文件里是16.9344MHz,打开以下的文件:

【Linux驱动器】Linux-2.6.20.4内核移植_开发板_06

改动以下的函数:

【Linux驱动器】Linux-2.6.20.4内核移植_机器码_07

5、改动机器码

在TQ2440使用的uboot中设定的机器码是168,所以内核这里须要改动机器码。否则会出现不能启动的情况。

此參数保存在内核源代码的“arch/arm/tools/mach-tupes”中。

在编译第一个内核的时候,内核能成功下载到开发板上,可是就是无法启动。

刚開始还觉得是内核编译太大的原因,裁剪了非常多的东西之后,还是无法启动。经一个队友提示“是否改了机器码”,我还非常自信的说“已经改过了”,到了最后查看一下文件,机器码木有改啊~~~~~~~~~~~

【Linux驱动器】Linux-2.6.20.4内核移植_开发板_08

6、Nand Flash 驱动移植

进入内核源代码“arch/arm/plat-s3c24xx/common-smdk.c”,改动例如以下两个位置的代码(改动后的)

例如以下图:

(1)

【Linux驱动器】Linux-2.6.20.4内核移植_机器码_09

(2)

【Linux驱动器】Linux-2.6.20.4内核移植_linux_10

然后打开

【Linux驱动器】Linux-2.6.20.4内核移植_git_11

改动第752行的代码如图所看到的:

【Linux驱动器】Linux-2.6.20.4内核移植_机器码_12

7、加入对yaffs的支持

能够通过命令来获取yaffs的源代码:git clone git://www.alcphl.co.uk/yaffs2

然后进入到yaffs2文件夹下,打补丁到内核中,使用以下的命令:

./patch-ker.sh c m /home/xg/linux_arm/linux-2.6.30.4/(内核所在的文件夹)












版权声明:本文博客原创文章,博客,未经同意,不得转载。