搞了一天的内核移植终于成功,折磨了我一天的内核移植,快让我崩溃,不过目前仍然出现坏块,具体情况还不清楚
感谢那些贡献资料参考的朋友,是他们的无私贡献,所以让我能这么快时间的完成移植,不过目前的移植,只支持nand flash驱动,yaffs2文件系统,并且已经挂载上文件系统.下面说一下移植的需要的环境,以及移植过程
1.系统linux 5,交叉编译器:4.1.2,编译选用内核版本:2.6.31
2.进入内核根目录,修改Makefile文件
在内核的183行
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
3.修改机器码
在379行s3c2440 ARCH_S3C2440 S3C2440 362修改为s3c2440 ARCH_S3C2440 S3C2440 1999这个我说说自己的见解,机器码必须要和uboot传入的机器码一样,所以如果你的uboot移植过程中
机器码是多少,内核就修改为多少,因为我使用的是supervivi,传入的是1999,所以我得修改一下这个机器码
现在可以make uImage看看能不能成功,并且下载到开发板试试,如果能运行成功,会打印一堆内核的信息
若出现MACH_TYPE = 1999 NOW, Booting Linux......就停止,就说明uboot的机器码和内核的机器码不一致,修改
4.修改时钟频率
arch/arm/mach-s3c2440/mach-smdk2440.c修改
在160行
把时钟改成12000000;
接着移植nand flash,移植nand flash的时候,由于自己的失误,并且菜鸟,导致很多次也不成功
修改nand的时候,分区一定要清楚,并且一定要和uboot(或者supervivi)一样,不然会导致挂载文件系统的时候,挂载不上,或者其他问题,目前我只知道,分区不清楚,我的文件系统挂载不上,首先你得到你boatload中打印出分区信息,我的是supervivi,只需退到vivi shell中,然后输入 show part,就可以看见分区信息
下面是nand flash的修改,到arch/arm/plat-s3c24xx/common-smdk.c,替换109行那些代码
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.size = 0x00040000,
.offset = 0x00000000,
},
[1] = {
.name = "param",
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root",
.offset = 0x00560000,
.size = 0x3fa80000,
}
之后就可以退到,内核根目录下面
make menuconfig
选择 system->type
只选择
S3C2440 Machines ---> [*]SMDK2440[*] SMDK2440 with S3C2440 CPU module
这两项,其他的不需要选
由于我的编译器是支持Eabi的,而内核默认不支持,所以要选择下面选项
内核特性加上以下两项:
Kernel Features ---> [*]Use the ARM EABI to compile the kernel[*] Allow old ABI binaries to run with this(EXPERIMENTA) kernel
然后保存退出,make zImage,等待编译完毕,烧写到开发板,就可以看到如下信息:
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns
s3c24xx-nand s3c2440-nand: NAND soft ECC
出现这个,表示内核已经支持nand
下面要移植yaffs2文件系统
首先下载一个yaffs文件系统,然后给内核打上补丁
切换到内核根目录:make menuconfig
file systems -> Miscellanecous filesystems->yaffs2 file system support
选择上,重新编译,烧写内核,就打印一下信息,说明已经支持yaffs文件系统
信息:
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
yaffs: auto selecting yaffs2
到此内核移植完毕,使用busybox制作一个文件系统,就可以挂载上去
下面说一下自己在移植过程遇到的问题:
1.刚刚开始的时候我用的是uboot引导内核,老是错误,我以为是我移植uboot出错了,然后换了surpervivi
但是结果还是一样,索性就用surpervivi了,查看了一下分区情况,修改了一下内核(刚刚已经说过怎么修改),就成功了
2.这个问题我没印证过,不过还是留心了,就是MTD问题,以及Ecc校验
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-2440A)--->
开始我应用uboot引导内核是这样选上的,后面使用了surpervivi
没在选上ECC校验,不过现在没印证到底有没有关系
以上就是自己的移植心得,这么小小的移植,都搞得自己心碎
体现了对内核机制,驱动机制,还是那么薄弱