jffs2文件系统上mmap函数
来源:互联网 发布:php获取页面代码方法 编辑:程序博客网 时间:2024/06/06 17:37
问题描述:
在数码相框项目中,板子用NFS网络文件系统启动时,可以正常运行应用程序。
将文件系统做成JFFS2文件映像后,再运行应用程序,则出现问题,问题函数为mmap,返回错误代码EINVAL(通过打印errno ,它是记录系统的最后一次错误代码),即非法参数),感觉既然在网络文件系统中参数没问题,在jffs2中也会没问题吧。
尝试解决问题发现:
1.mmap函数中如果文件描述符参数为nandflash上的文件时候,是会失败的(但是可以fopen成功)。
2.mmap函数中如果文件描述符参数为网络文件系统上的文件的时候,则没有任何问题。(挂载SD卡后,mmap里面的文件也没有问题)
可能的出错点:
1.制作jffs2的工具有问题,但是这个工具是用的老师的ubuntu系统里面的现成的,并且制作jffs2的指令也不会出错的(sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o digitpic.jffs2),我用过yffas2文件系统也是会出现问题,但是问题又不一样了,直接出现段错误。
在数码相框项目中,板子用NFS网络文件系统启动时,可以正常运行应用程序。
将文件系统做成JFFS2文件映像后,再运行应用程序,则出现问题,问题函数为mmap,返回错误代码EINVAL(通过打印errno ,它是记录系统的最后一次错误代码),即非法参数),感觉既然在网络文件系统中参数没问题,在jffs2中也会没问题吧。
尝试解决问题发现:
1.mmap函数中如果文件描述符参数为nandflash上的文件时候,是会失败的(但是可以fopen成功)。
2.mmap函数中如果文件描述符参数为网络文件系统上的文件的时候,则没有任何问题。(挂载SD卡后,mmap里面的文件也没有问题)
可能的出错点:
1.制作jffs2的工具有问题,但是这个工具是用的老师的ubuntu系统里面的现成的,并且制作jffs2的指令也不会出错的(sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o digitpic.jffs2),我用过yffas2文件系统也是会出现问题,但是问题又不一样了,直接出现段错误。
原因找出来了: linux系统调用mmap在映射一个文件时只有使用MAP_SHEARED参数才会将映射内存的修改写回文件,但是jffs2文件系统却不支持有写回的映射,即MAP_SHARED参数不能使用,只能使用MAP_PRIVATE进行映射。
在数码相框代码中有3处用到mmap,分别是fb.c file.c和gbk.c 第一个fb.c中,将/dev/fb0文件映射到内存,这里必须使用MAP_SHEARED参数,不然显示屏无反应,第二个和第三个因为jffs2文件系统的特性,需要使用MAP_PRIVATE参数,不然无法完成映射,两者的区别在与后一个是实际存在于nand的文件,前一个则是系统启动后生成的一个文件。
不知道上诉的分析有没有错误,反正最后结果是成功了,如果有说错的,希望大牛留言。
所以说,还是得相信linux系统返回的错误代码 0.0.
0 0
- jffs2文件系统上mmap函数
- jffs2文件系统上mmap的应用
- 如何在AT91RM9200上移植jffs2文件系统
- jffs2 文件系统
- 实例分析-在FLASH上构造JFFS2文件系统
- 实例分析-在FLASH上构造JFFS2文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- 如何在板子上制作和使用jffs2文件系统
- 关于nand flash上实现jffs2文件系统的学习
- 在nand flash上实现JFFS2根文件文件系统
- 在nand flash上实现JFFS2根文件文件系统
- jffs2 文件系统介绍
- 从jffs2读出文件系统
- 揭开Socket编程的面纱
- 黑马程序员第五季——IO流
- codeforces 204A Little Elephant and Interval (数位dp)
- 关于自学的个人见解1
- Java程序运行时间的计算
- jffs2文件系统上mmap函数
- poj 1775 01背包(子集和)
- OpenGL 纹理贴图
- Java同步问题详解
- win7 VS2010搭建Qt开发环境
- erlang -> afile_sever.erl
- mysql删除表中造成唯一键冲突的记录
- 2.1笔记
- DaoFactory设计