查看文章 |
成功移植最新的2.6.22.3的linux kernel到S3C2410上(转)
2007-09-05 18:11
硬件平台:勤研2410开发板 开发平台:FC6+kernel 2.6.22.3+arm-linux-gcc-3.4.1 参考资料:panjet大侠的帖子《Linux 2.6.10 以后版本对 S3C2410 的支持》(在此特别感谢panjet大侠和所有参与过那个帖子的朋友) 由于kernel 2.6.22.3对s3c2410中文件的组织风格有了一些变化且删除了对devfs的支持,所以移植过程中遇到了一些《Linux 2.6.10 以后版本对 S3C2410 的支持》中没有提到的问题,但基本思路是一致的。 第一步:根据自己nand flash的分区情况,修改kernel中的相关参数: 由于kernel 2.6.22.3对s3c2410中文件的组织风格有了变化,所以要修改的文件不再是 arch/arm/mach-s3c2410/devs.c,而是arch/arm/plat_s3c24xx/common-smdk.c。在其中找到分区的定义 smdk_default_nand_part[] = { ... } 根据自己的分区情况修改其中的内容(分区情况可以通过bootloader查看) 第二步:修改nand flash的参数: 在同一个文件中找到 smdk_nand_info = { .tacls=20, .twrph0=60, .twrph1=20, ... } 改成 smdk_nand_info = { .tacls=0, .twrph0=30, .twrph1=0, ... } 第三步:修改ECC校验: 根据kernel官方网站上的说明,从2.6.22.3已经修改了ECC校验的问题(这也是我移植2.6.22.3的一个重要原因)。但实验下来发现,不管是用软件ECC还是硬件ECC都不行。只好改成NAND_ECC_NONE: 在driver/mtd/nand/s3c2410.c中找到s3c2410_nand_init_chip()函数,将其中的 chip->ecc.mode=NAND_ECC_SOFT; 改成 chip->ecc.mode=NAND_ECC_NONE; 第四步:修改Makefile文件: 修改其中的目标平台和交叉编译器为: ARCH ?= arm CROSS_COMPILE ?= arm-linux- 第五步:配置内核: make menuconfig 注意,要将tmpfs选上,否则kernel找不到root分区。 第六步:编译内核: make 到此内核的移植已经完成,但由于2.6.22.3中已经不包含devfs,所以还需要在root filesystem中配置console设备,否则将不能进入交互界面(不会出现提示符#) 第七步:配置console设备: 在root filesystem的/dev中,生成console设备: mknod -m 600 console c 5 1 最后将kernel和root filesystem烧到nand flash中,kernel的移植即大功告成!^_^ 由于2.6.22.3中用udev代替了devfs,下一步将进行udev的移植和配置。 成功移植busybox-1.7.0并加载mdev(udev的嵌入式版本) 上次成功移植完2.6.22.3后,由于没有启动udev,造成/dev下没有设备文件。也就是说所有的设备都没有挂接进来。 第三步:编译、安装 #make #make install 这时会在你的编译目录下生成一个_install的目录,里面包含了生成的所有文件和目录结构。 第四步:查找所依赖的共享库 #cd _install/bin #arm-linux-readelf -a ./busybox | grep "Shared library" 用上面的命令可以查到当前的busybox依赖哪些共享库(这些共享库一般可以在你的交叉编译器所在目录的lib下找到) 第五步:将生成的文件和共享库拷贝到你的root filesystem中 将_install中的目录结构和文件完全拷贝到你的root filesystem中。 然后将共享库拷贝到root filesystem的lib目录中,并建立相关的链接文件 第六步:为mdev的运行准备环境 mdev需要改写/dev和/sys两个目录。所以必须保证这两个目录是可写的(一般会用到sysfs,tmpfs。所以要重新编译内核)。 然后在你的启动脚本文件中加入 /bin/mdev -s 最后:将新的内核、新的root filesystem烧到nand flash中就行了。 呵呵,下面要开始调试usb host了。进度一步一步的推进,好开心啊...... 记得以前这里的哪位大侠提到2.6.21上已经解决了cramfs做rootfs必须禁用ECC的问题,不过我暂时还不用cramfs,所以没去研究。 |
最近读者: