最近打算做一个完整的嵌入式系统,首先就应该是内核的移植了,
所以便深入的学习了一下,为了联系,我总共是移植了三个版本的内核
分别是linux2.6.28和2.6.30,2.6.32。
我的开发板是mini2440,bootlorder是vivi。
首先说一下关于公司给的移植方法
比如说mini2440的官方技术手册。它里面就给出了很详细的移植方法。但是如果你使用它给你的内核的话,很显然你
学不到什么东西。因为那都是公司做好的,没有的东西,或者你会遇到的很多问题都已经帮你解决了。而且针对于不同
公司开发板的移植方法,都不是通用的,只是针对于一款硬件设备,所以下面我就介绍一下我的移植方法,一种通用的
移植方法。
关于内核的移植网上有很多资料,我想大家应该也已经看过很多了。
第一步,应该是修改对硬件平台的支持。
首先的应该是arm架构,arm-linux-gcc的编译方式的支持
第二步就是平台时钟了,只有选择了相对应得平台时钟才能正常的工作。
第三步就是对硬件分区的支持了,也可以说是nand flash驱动的移植。
在linux内核的移植中,你所要更改的大部分设置都在arch/arm 目录下
1。先添加对arm的支持
gedit Makefile
ARCH?=$(SUBARCH)
CROSS_COMPILE?=
改成:
ARCH?=arm
CROSS_COMPILE?=arm-linux-
arm-linux- 后的“-”容易丢失
2。修改平台时钟
gedit arch/arm/mach-s3c2440/mach-smdk2440.c
3.修改机器码
gedit arch/arm/tools/mach-types
4移植nandflash驱动
gedit arch/arm/plat-s3c24xx/commond-smdk.c
根据bootlorder 里面的分区情况进行更改
平台时钟要看你的开发板上外接的晶振是多少,
机器码和nand flash的分区呢,就要看你的vivi在开发板上显示的信息作相应的更改了
将开发板连接上电脑,启动超级终端
进入supervivi模式
输入以下命令
param show 查看机器码
part show 查看分区
5。 在 arch/arm/tools/mach-type 中s3c2440的机器码一定要与vivi 中的一致
Vivi中 param show –显示一小参数
6,修改MTD分区
在 arch/arm/plat-s3c24xx/common-smdk.c 中修改
Vivi 中 part show –显示以下参数
bootloader中的分区要与内核中的分区完全一致,包括分区名、起始地址、分区大小,比保
证内核、文件系统能够烧写到nandflash中
接下来就是对内核的定制了
首先复制一下对于S3C2410/2440的通用配置
cp arch/arm/configs/s3c2410_defconfig .config
make menuconfig
支持EABI
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
支持 NandFlash
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[*] S3C2410 NAND Hardware ECC //这个一定要选上
Nand Flash Capacity Select(256M Nand For TX-24
还有别的以下定制
system type -> 2410/arm92410
去掉软浮点检测
gedit drivers/mtd/nand/s3c2410.c
找到chip->ecc.mode = nand_ECC_SOFT 改为NONE
接着就是添加yaffs2的文件系统的支持,当然你也可以选别的
如果选择yaffs2的话,
在网上下载一个yaffs2源码,进入
执行 ./patch-ker.sh c /home/test/linux-2.6.32.2/
后面是你自己的linux源码的位置,注意最后面的/一定不要忘了
添加完成后,make zImage 内核就算移植完成了。如果遇到什么问题的话,就具体问题具体分析了。