第一步,应该是修改对硬件平台的支持。
首先,应该是arm架构,其次是arm-linux-gcc的编译方式的支持
第二步,就是平台时钟和机器码了,只有选择了相对应得平台时钟才能正常的工作。
第三步,就是对硬件分区的支持了,也可以说是nand flash驱动的移植。
第四步,是对yaffs2的文件系统的支持。
在linux内核的移植中,你所要更改的大部分设置都在arch/arm目录下。
1. 先添加对arm的支持
进入内核文件夹
#vi Makefile
ARCH?=$(SUBARCH)
CROSS_COMPILE?=
改成:
ARCH?=arm
CROSS_COMPILE?=arm-linux-
2.修改平台时钟频率
# vi arch/arm/mach-s3c2440/mach-smdk2440.c
找到数字16930000改为12000000
3 .修改机器码
# vi arch/arm/tools/mach-types
将S3C2440后面的数字改为1999
将MINI2440后面的数字改为362
4.移植nandflash驱动
vi arch/arm/plat-s3c24xx/common-smdk.c
nand flash的分区,就要看你的vivi在开发板上显示的信息作相应的更改了,
将开发板连接上电脑,启动超级终端/secureCRT,选则q后,
进入supervivi模式,
输入以下命令:
param show 查看机器码
part show 查看分区
5. 在 arch/arm/tools/mach-type中s3c2440的机器码一定要与vivi中的一致
vivi中 param show –显示一小参数
6.修改MTD分区
根据vivi中part show 之后的信息
在 arch/arm/plat-s3c24xx/common-smdk.c中修改
例如:
Static struct mtd_partition smdk_default_nand_part[]={
[0]={
.name =”vivi”,
.size =0x00040000,
.offset =0x00000000,
},
[1]={
.name =”kernel”,
.offset =0x00060000,
.size =0x00200000,
},
[2]={
.name =”root”,
.offset =0x00260000,
.size =0x3fd80000,
}
};
注:多余项必须删掉。且param项也必须删除,不然会出现kernel panic的错误
修改成这样是没有问题的,但出现
上图中的 中ftl_cs:FTL header not found.的问题(这不是我当时做的截图,但问题是一样的)
我们修改成下图这样的数据格式就不会出现ftl_cs:FTL header not found这个问题了。
7.接下来就是对内核的定制了,
首先复制一下对于S3C2410/2440的通用配置
注意:在执行make menuconfig之前一定要先执行下面这一步
cp -rf arch/arm/configs/s3c2410_defconfig .config
make menuconfig
(1)支持EABI
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
(2)支持 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)。
(3)进行内核的初步裁剪
system type ->
找到 S3C2400 Machines --->
S3C2410 Machines --->
S3C2412 Machines --->
S3C2440 Machines --->
S3C2442 Machines --->
S3C2443 Machines --->
除了S3C2410Machines中的第一项和S3C2440Machines中全部选项留下外,
其余的全部去掉。
(4)接着去掉软浮点检测
gedit drivers/mtd/nand/s3c2410.c
找到chip->ecc.mode = nand_ECC_SOFT改为NONE
(5)接着就是添加yaffs2的文件系统的支持(即为内核打上yaffs2的补丁),当然你也可以选别的。
首先,如果选择yaffs2的话,
在网上下载一个yaffs2源码,解压后进入
执行 ./patch-ker.sh c /home/test/linux-2.6.32.2
后面是你自己的linux源码的位置
此时进入linux-2.6.32.2/fs目录,可以看到已经多了一个yaffs2目录(这样在make menuconfig中才会有YAFFS2 System Support选项)
,配置和编译带YAFFS2支持的内核
在 Linux内核源代码根目录运行:make menuconfig,移动上下按键找到File Systems,如图,按回车进入该子菜单
再找到“Miscellaneous filesystems”菜单项,按回车进入该子菜单,如图
出现如下图菜单,找到“YAFFS2 file system support”,并按空格选中它,这样我们就在内核中添加了yaffs2文件系统的支持,按“Exit”退出内核配置。
8.make zImage内核就算移植完成了。如果遇到什么问题的话,就具体问题具体分析了。