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

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Yaffs2文件系统移植艰辛记录

Yaffs2文件系统移植艰辛记录 Rocky 于昆山 1. 下载 yaffs2包 2. 将包以补丁形式放入内核中 #tar xvf yaffs2.tar #cd yaffs2 #./patch-ker.sh c /home/arm/dev_home/kernel/gec2410-2.6.8.1 3. 配置内核、并编译 编译出现错误: 图 1 此时,修改 fs/yaffs2/yaffs_fs.c中 111行: 改为:#include asm/uacesss.h 重新编译通过! 4. 下载到板子上,运行,结果如下: 图 2 上述过程把 yaffs2的移植和挂载一起进行,为方便调试,找出遇到问题,对上述过程分开进行。 按目前理解,成功移植 yaffs2文件系统并挂载需有以下两个步骤: 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 文件系统格式挂载到 yaffs2_dir目录下: cd /tmp mkdir yaffs2_dir mount –t yaffs2 /dev/mtdblock/3 yaffs2_dir 终端显示结果为: 图 4 此时,终端无反应了,敲击键盘没有任何作用。核心板上有两个发光管 D1和 D2(查手册得知为输入/输出指示灯)。 发现挂载前后,D1指示灯照常闪烁,而 D2指示灯由快速闪烁变为持续高亮。终端完蛋?系统崩溃?未知! 上述“Hi,Rocky! I’m here(yaffs2)”为我添加的打印信息。添加地方为“内核 - /fs/yaffs2/Yaffs_fs.c - yaffs_internal_read_super()函数”中,经添加信息发现,此函数能完全执行完,中间过程没有任何 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格式)。 启动系统后执行如下命令: 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\n, exe_name, mtd_device, strerror(errno)); exit(1); } if (ioctl(fd, MEMGETINFO, meminfo) != 0) { fprintf(stderr, %s: %s: unable to get MTD device info\n, exe_name, mtd_device); exit(1); } … 由上代码知,问题出在 ioctl。我的天,越揪问题越多!看来要开始充分来认识认识 ioctl系统调用了。 目前估计内核不支持此处的 MEMGETINFO。MEMGETINFO在 mtd-util-1.0.0/include/mtd/mtd-abi.h中定

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档