还是先来吐槽:本来我是在上一个星期的周末已经把 Linux2.6.34.11 的驱动已经成功的移植到, OK6410 的开发板上的,并且能够启动主机上的NFS 根文件系统, 可是我在周一的时候,开始学习LCD 的驱动程序, 在修改内核文件的时候,有几处错误修改,将原来自己做的2.6.34.11 的内核源码 搞的乱七八糟的,在这里还是自己在修改内核的时候没有提注重注释, 并且没有记录下来自己的操作步骤,以至于我没办法,恢复2.6.34 的内核, 所以也就只能重新先开始最基础的内核移植了。 这次我选择的是2.6.36.2 的内核, 谁知到一开始移植就出现一大堆问题。在这里我不得不说,飞凌开发人员对内核修改的代码,管理真的是太扯了,自己在注销任何一个设备是没有一点点注释,就把这个设备原有的线性地址分配给其它设备了,让我让我们这些菜鸟干看着一大堆的报错信息顶个什么用, 真的是伤不起。好了不乱扯了,现在开始记录。
我的开发环境是:
VMware Ubuntu 10.10 。OK6410 A版 256M+2G 的开发板。 主机系统:XP。Uboot:飞凌提供的Uboot。
参考内核 :飞凌提供的 Forlinx 的2.6.36.2 内核
操作步骤 以下./ 均代表你的内核 根目录
1、修改./Makefile191 ARCH ?=arm // 指定cpu类型, arm后面不要有空格,要不然编译是会提醒ARCH 不能为一个目录
192 CROSS_COMPILE ?=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- // 指定交叉编译器的路径,按照你自己的进行指定路径2、修改./arch/arm/mach-s3c64xx/mach-smdk6410.c 1) nandflash 驱动,修改方法
加载头文件
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <plat/nand.h> //这些头文件放在./arch/arm/plat-samsung/include/ 下面
添加nand 结构体
// add by acanoe first extern void s3c64xx_reserve_bootmem(void); //add by acanoe struct mtd_partition ok6410_nand_part[] = { { .name = "Bootloader", .offset = 0, .size = (1 * SZ_1M), .mask_flags = MTD_CAP_NANDFLASH, }, { .name = "Kernel", .offset = (1 * SZ_1M), .size = (5*SZ_1M) , .mask_flags = MTD_CAP_NANDFLASH, }, { .name = "User", .offset = (6 * SZ_1M), .size = (120*SZ_1M) , }, { .name = "File System", .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL, } }; static struct s3c2410_nand_set ok6410_nand_sets[] = { [0] = { .name = "nand", .nr_chips = 1, .nr_partitions = ARRAY_SIZE(ok6410_nand_part), .partitions = ok6410_nand_part, }, }; static struct s3c2410_platform_nand ok6410_nand_info = { .tacls = 25, .twrph0 = 55, .twrph1 = 40, .nr_sets = ARRAY_SIZE(ok6410_nand_sets), .sets = ok6410_nand_sets, }; //add by acanoe first