设为首页 加入收藏

TOP

Linux 2.6.32 在Arm9(s3c2440)平台的移植(二)
2014-11-24 03:03:28 来源: 作者: 【 】 浏览:9
Tags:Linux 2.6.32 Arm9 s3c2440 平台 移植
00,
.size = 0x00020000,
},
[2] = {
.name = "Kernel",
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root",
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand",
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};


再找到static struct s3c2410_platform_nand smdk_nand_info 的定义处,修改S3C2440时间参数TACLS=0,TWRPH0=3,TWRPH=0:


static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};


(2)关闭ECC校验,文件:drivers/mtd/nand/s3c2410.c, 找到函数s3c2410_nand_init_chip


/*chip->ecc.mode = NAND_ECC_SOFT; */
chip->ecc.mode = NAND_ECC_NONE;
/*chip->ecc.mode = NAND_ECC_SOFT; */
chip->ecc.mode = NAND_ECC_NONE;


(3) 指定启动时初始化, 找到这一段代码:
static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
};
static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
};
这段代码指定了内核启动时初始化的设备,其中s3c_device_nand是必须有的,因为我们需要NAND Flash驱动来挂载根文件系统,其余的根据需可自行添加,这里我们使用默认设置,不做修改。


(4) 这里是开发板的nand flash 设置表,因为板子上只有一片,因此也就只有一个表, 这里完全相同, 不改


static struct s3c2410_nand_set smdk_nand_sets[] = {
[0] = {
.name = "NAND",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(smdk_default_nand_part),
.partitions = smdk_default_nand_part,
},
};
static struct s3c2410_nand_set smdk_nand_sets[] = {
[0] = {
.name = "NAND",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(smdk_default_nand_part),
.partitions = smdk_default_nand_part,
},
};


5
修改drivers/mtd/nand/s3c2410.c,


禁止flash ECC校验(友善的手册没有此项), 注意, 这个去掉ECC校验的问题,在内核中明确说明是不建议这样做的,因为这样就等于忽略了对NAND FLASH坏块的检测. But~ 据说vivi或uboot通过软件算法产生的ecc校验码于S3C2410 NAND Flash 控制器产生的ecc校验码不一致,所以在这里选择禁止内核ECC校验.
找到s3c2410_nand_init_chip()函数,在该函数体最后加上:
chip->ecc.mode = NAND_ECC_NONE;
chip->ecc.mode = NAND_ECC_NONE;


6(暂不做)


为2.6.32打上yaffs2补丁,


早先的yaffs 仅支持小页(512byte/page)的nand flash,现在的开发板大都配备了更大容量的nand flash,它们一般是大页模式(2K/page),使用 yaffs2 就可以支持大页的 nand flash. 步骤如下,


(1)获取yaffs2代码


mkdir yaffs2-src


cd yaffs2-src


git clone git://www.aleph1.co.uk/yaffs2


(2)下载yaffs2的最新源码.并打补丁:


./patch-ker.sh c /root/linux-2.6.32


此时已经成功更新2.6.32代码中的yaffs2部分,linux-2.6.32.2/fs下增加一个yaffs2目录


回到/root/linux2.6.32, 执行make menuconfig, File systems->Miscellaneous->选中yaffs2支持.


7(暂不做)


为2.6内核增加devfs,linux2.6已经去掉devfs,为了内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统(yaffs文件系统是不是需

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux平台下对JMagick的一个简单.. 下一篇Linux下一个检查跑批是否成功的Sh..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)