先介绍一下此次移植的主要目标对象:
平台:Windows 7 旗舰版 And Fedora 9
目标板:mini2440
目标系统: linux-2.6.32.2
交叉编译链: arm-liunux-gcc 4.4.3
busybox版本: busy.1.13.3
yaffs2版本: yaffs2-20100330(友善那坑爹的文档说光盘有这个压缩包……我有你妹啊……这个是我从官网下载的)
本来以为吧,有友善的移植文档作为参考,只要一步一步来,应该会比较顺利的……不过很快我发现我真是太天真了……友善那坑爹的移植文档实在是让我火大……一个简单的移植过程,在有参考文档的前提下,足足搞了哥4天时间,期间因为按部就班地按照友善的移植文档而犯了不少让人抓狂的错误……再说一次,哥TMD真的是很火大!
好吧,发泄了一通之后要平静下来了……记录一下整个移植过程,为以后留点笔记……移植期间参考了网上不少的文章,实在是万分感谢这些文章的作者……没有他们的共享精神,可能我现在还在懊恼那些坑爹的错误……为此,我一定要把自己的移植过程写出来……如果有人因为这篇文章而解决了某些问题,那我一定会由衷地感到高兴。
先说一下移植步骤,这个是很重要的:1.解压linux内核
2.修改目标平台
3.到arch/arm/mach-s3c2440文件夹,把mach-mini2440.c剪切到另外一个地方,建立自己的mach-mini2440,复制smdk-2440.c的内容到刚建立的mach-mini2440.c,修改晶振,修改MACHINE_START宏,增加分区信息,注意对照原来的mach-mini2440.c添加一些头文件,这些文件分别是:
#include <linux/mtd/mtd.h> #include <linux/mtd/nand.h> #include <linux/mtd/nand_ecc.h> #include <linux/mtd/partitions.h> #include <plat/nand.h>
另外还需要在mini2440_map_io这个函数里添加一行:s3c_device_nand.dev.platform_data = &mini2440_nand_info;不然还是会出现离奇的错误。原因一会具体再说。
这个时候板文件就算完成了,如果这个时候make mini2440_defconfig之后再make zImage,烧到板子上之后启动应该就能看到分区信息了。
不过这时候还没有文件系统。
4。内核移植完成,开始移植文件系统。按照移植文档建立脚本文件:
#!/bin/sh echo "------Create rootfs directons start...--------" mkdir rootfs cd rootfs echo "--------Create root,dev....----------" mkdir root dev etc boot tmp var sys proc lib mnt home <span style="color:#ff0000;">usr</span> mkdir etc/init.d etc/rc.d etc/sysconfig mkdir usr/sbin usr/bin usr/lib usr/modules echo "make node in dev/console dev/null" mknod -m 600 dev/console c 5 1 mknod -m 600 dev/null c 1 3 mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/run var/tmp chmod 1777 tmp chmod 1777 var/tmp echo "-------make direction done---------"
注意我加的一个目录"usr",不加的话会出现错误,友善那坑爹的文档害得我不浅啊……无语……5.建立/etc目录下的文件
(1)、拷贝主机 etc 目录下的passwd、group、shadow文件到 rootfs/etc目录下。
(2) etc/sysconfig目录下新建文件HOSTNAME,内容为”winson”,这里可以输入你想输入的名字 。
(3) etc/inittab文件
(4)etc/init.d/rcS
(5)etc/fstab
(6)etc/profile
6.编译busybox到rootfs中。