这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [转帖]在HCO5272-R1下实现jffs

共3条 1/1 1 跳转至

[转帖]在HCO5272-R1下实现jffs

菜鸟
2003-07-24 17:07:31     打赏
by coldfire 去年3月份写的,mcf5272的那款,基本能实现jffs,只是后来一直没有再用了。 在HCO5272-R1下第二片flash芯片中实现jffs文件系统 1.目的:在华恒HHCO5272-R1下第二片flash芯片中实现jffs文件系统。 2.www.uClinux.org下载最新的2.4内核的for ColdFire的uClinux版本,其发布时间为2001年11月12日,2002年3月6日发布的也可以。将其中的flash.c文件代替华恒给的2.0.38内核的uClinux的flash.c文件。或者是到Axis Communications公司的网站去下载新的flash.c文件, Revision 1.2 2001/01/11 03:56:48 ,2000年8月11日发布的。 3. flash.c文件,使之于我们的开发板HHCO5272-R1上的flash相匹配,我们的flash芯片型号为AM29LV160BB,其修改如下: ①. 在文件开头定义宏的地方加入一句: #include 在新的flash.c文件中,对flash芯片编程时延时用的是void udelay(int delay)函数,其包含在delay.h中,该函数表示延时delay微秒,在原来的flash.c文件中用的是void nop(void)函数,该函数大约延时10微秒,在uClinux的66M时钟的5272下。 ②. 修改D5_MASK宏的定义,将其由 #define D5_MASK 0X2020 改为 #define D5_MASK 0X0020 在对flash芯片编程时,当读D5位时,D5为1,则表示编程超时,即可能是错误编程。对于我们具体的AM29LV160BB芯片来说,其值应该修改为0X0020,即高8位在编程时,读出的数据是不定的,将其屏蔽。 ③. 修改getchip()函数 在getchip函数中找到 if (ptr >= chips[i].start && ptr < (chips[i].start + chips[i].size)) { 这句话,将其修改为: if (ptr >= chips[i].start && ptr < (chips[i].start + chips[i].size-1)) { 因为在华恒开发板中,第二片flash芯片的起始地址为:0xFFE00000,即上面 语句中的chips[i]值,其大小为0x00200000,即chips[i]值,那么在上面中 chips[i].start + chips[i].size=0xFFE00000+0x00200000=0,因为chips[i].start 和chips[i].size都为32位的无符号数,因此须将其值减一。 相同的错误在flash.c中有好几出: 在do_flash_request函数中的 if(fptr + fsize > part->start + part->size) { 修改为 if(fptr + fsize > part->start + part->size-1) { 及 opsize = (fptr + fsize) > (chip->start + chip->size) ? (chip->start + chip->size - fptr) : fsize; 修改为 opsize = (fptr + fsize) > (chip->start + chip->size-1) ? (chip->start + chip->size - fptr) : fsize; 在flash_safe_read函数中的 if(fptr + count > part->start + part->size) { 修改为 if(fptr + count > part->start + part->size-1) { 在flash_safe_write函数中的 if(fptr + count > part->start + part->size) { 修改为 if(fptr + count > part->start + part->size-1) { 在flash_write函数中的 fsize = (ptr + size) > (chip->start + chip->size) ? (chip->start + chip->size - ptr) : size; 修改为 fsize = (ptr + size) > (chip->start + chip->size-1) ? (chip->start + chip->size - ptr) : size; ④.修改flash_probe函数 找到 #ifdef CONFIG_COLDFIRE chips[0].start = (unsigned char *)(0x00200000); 修改为 #ifdef CONFIG_COLDFIRE chips[0].start = (unsigned char *)(0xffe00000); ⑤.修改flash_init函数 在开头加入一句 flash_probe(); 这句话是让程序自己找到关于flash芯片的信息,即bootblock信息,生产商,大小,扇区分布等。 4. 参照华恒的用户手册中关于加入应用程序的方法,把uClinux/usr/jffs-tools目录下的erase加入uClinux中的/bin目录中。 5. 加载设备flash,建立设备文件 进入uClinux/romfs/dev目录, mknod flash0 b 60 16 mknod flash1 b 60 17 mknod flash2 b 60 18 在这里,flash0的地址为:0xFFE00000—>0xFFE1FFFF,大小为64k,目前不可写。 flash1的地址为:0xFFE20000—>0xFFE1AFFF,大小为1664k,已经实现jffs文件系统。 flash2的地址为:0xFFE20000—>0xFFE1AFFF,大小为320k,还没有jffs文件系统,jffs有点错误,修改起来太麻烦,要改的地方很多,要修改jffs 文件系统的代码,这一步不做了。 6.修改完上面的以后,在编译内核中选择flash block设备以及jffs文件系统,重编译内 核,烧进板子里面去。 7. 进入uClinux,当第一次用flash芯片时,先运行erase /dev/flash1,将flash1全部擦 除,将flash1 mount上去,就能作为jffs文件系统来用了,能够read/write/remove等文件操作。 参考资料:AM29LV160BB的flash芯片资料 《linux从入门到精通》 《unix环境高级编程》 华恒关于HHCO5272-R1技术手册 [align=right][color=#000066][此贴子已经被作者于2003-7-24 9:12:22编辑过][/color][/align]



关键词: 转帖     HCO5272-R1     实现     flash     文件    

菜鸟
2003-07-24 17:31:00     打赏
2楼
谢谢! amine兄, 不知道jffs相对于tffs有哪些优点? 如果要移植到vxworks下难度大不大??

菜鸟
2006-02-07 01:20:00     打赏
3楼
......

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]