- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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中定
您可能关注的文档
- WAVELET-BASED FLOW REGIME IDENTIFICATION OF GAS-LIQUID TWO-PHASE FLOW.pdf
- Wavenumber dependence of structural alpha relaxation in a molecular liquid.pdf
- WCM3216F2SF.doc
- Weather Variability Of Close-in Extrasolar Giant Planets.pdf
- web of science文献导入endnote教程.pdf
- Web图像动态嵌入水印设计.pdf
- week 10 Advertising, PR and Sponsorship.pdf
- week5 crime.ppt
- Weight Functions in Time-Frequency Analysis.pdf
- Westermo SDW-550 系列工业交换机使用手册.pdf
文档评论(0)