Yaffs2文件系统移植艰辛记录.pdf

Yaffs2文件系统移植艰辛记录.pdf

ID:52244742

大小:435.15 KB

页数:9页

时间:2020-03-25

Yaffs2文件系统移植艰辛记录.pdf_第1页
Yaffs2文件系统移植艰辛记录.pdf_第2页
Yaffs2文件系统移植艰辛记录.pdf_第3页
Yaffs2文件系统移植艰辛记录.pdf_第4页
Yaffs2文件系统移植艰辛记录.pdf_第5页
资源描述:

《Yaffs2文件系统移植艰辛记录.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Yaffs2文件系统移植艰辛记录Rocky于昆山1.下载yaffs2包2.将包以补丁形式放入内核中#tarxvfyaffs2.tar#cdyaffs2#./patch-ker.shc/home/arm/dev_home/kernel/gec2410-2.6.8.13.配置内核、并编译编译出现错误:图1此时,修改fs/yaffs2/yaffs_fs.c中111行:改为:#include重新编译通过!4.下载到板子上,运行,结果如下:图2上述过程把yaffs2的移植和挂载一起进行,为方便调试,找出遇到问题,对上述过程分开进行。按目前理解,成功移植yaffs2文件系统并

2、挂载需有以下两个步骤:A.下载yaffs2包,解压到内核fs目录下。修改fs/Makefile,重新编译内核;B.在根文件系统的启动脚本中添加mount命令行,对某分区进行挂载yaffs2操作;由此,先完成步骤A:根据上述过程1、2、3及完成步骤A,此时,可进入系统查看是否已支持yaffs2文件系统,系统启动后,进入/proc目录,查看filesystems文件,如下:图3由此可知,系统已支持yaffs2文件系统!故肯定步骤A正确无误。继续完成步骤B:对步骤B而言,为调试方便,先不将mount命令行写进启动脚本。直接在终端进行mount操作,将3号分区以yaffs2文件系统格式挂载到yaffs

3、2_dir目录下:cd/tmpmkdiryaffs2_dirmount–tyaffs2/dev/mtdblock/3yaffs2_dir终端显示结果为:图4此时,终端无反应了,敲击键盘没有任何作用。核心板上有两个发光管D1和D2(查手册得知为输入/输出指示灯)。发现挂载前后,D1指示灯照常闪烁,而D2指示灯由快速闪烁变为持续高亮。终端完蛋?系统崩溃?未知!上述“Hi,Rocky!I’mhere(yaffs2)”为我添加的打印信息。添加地方为“内核->/fs/yaffs2/Yaffs_fs.c->yaffs_internal_read_super()函数”中,经添加信息发现,此函数能完全执行完,

4、中间过程没有任何return发生。对此,查阅很多资料仍未果!查阅资料发现mount之前应先将所要mount的分区擦除一遍。于是费九牛二虎之力找erase分区工具。找资料,对nandflash擦除需要flash_erase、flash_eraseall工具。由此需交叉编译mtd-util工具。对于包为:mtd-util-1.0.0对应网络文章《cramfs+yaffs嵌入式平台的实现》中关于mtd-util的编译,成功获取flash_erase、flash_eraseall工具。拷贝到根文件系统的bin目录下,chmod成777,然后采用u-boot重新烧写根文件系统(cramfs格式)。启动系

5、统后执行如下命令:flash_eraseall/dev/mtdblock/3//擦除3号分区(用户分区)结果如下:图5无法获取MTD(内存技术设备)设备信息!好在有flash_eraseall命令代码,进入mtd-util目录,查看flash_eraseall.c文件:…if((fd=open(mtd_device,O_RDWR))<0){fprintf(stderr,"%s:%s:%s",exe_name,mtd_device,strerror(errno));exit(1);}if(ioctl(fd,MEMGETINFO,&meminfo)!=0){fprintf(stderr,"%s

6、:%s:unabletogetMTDdeviceinfo",exe_name,mtd_device);exit(1);}…由上代码知,问题出在ioctl。我的天,越揪问题越多!看来要开始充分来认识认识ioctl系统调用了。目前估计内核不支持此处的MEMGETINFO。MEMGETINFO在mtd-util-1.0.0/include/mtd/mtd-abi.h中定义:#defineMEMGETINFO_IOR('M',1,structmtd_info_user)关于ioctl系统调用的相关知识暂且放一放。(★)但查询资料发现上面编译的flash_eraseall命令是可以使用的,需要注意的

7、是:“擦除只能对字符设备,挂载要用块设备的”。此处“字符设备”和“块设备”是指MTD设备文件的两种类型,对于nandflash体现如下:/dev/mtd/n或/dev/mtdnà字符设备/dev/mtdblock/n或/dev/mtdblocknà块设备由此,使用flash_eraseall命令如下:图6擦除字符设备3和3ro,前者成功,后者失败!由此,因前面flash_eraseall的是一个块

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。