mtd写入数据使用write函数有时会出错,困扰n天了
时间:2011-09-02
来源:互联网
已经给flash分区,往同一个地方写数据,有时候会成功,有时候会失败。
自己写的flash_write函数大致过程就是
fd = open("/dev/mtd5", O_RDWR);
...
rv = lseek(fd, iOffset, SEEK_SET);
...
uiLength = (2 * 1024) * ((uiLength - 1) / (2 * 1024) + 1);
rv = write(fd, buf, uiLength);
写入的数据是使用mkcramfs生成的镜像(大小为4M多),用来更新程序的。大致过程如下
while (iDataLen > 0)
{
int rlen;
int wlen;
if (iDataLen > UPDATE_BLOCK_SIZE)
{
rlen = UPDATE_BLOCK_SIZE;
}
else
{
rlen = iDataLen;
}
wlen = flash_write(iOffset, rlen, pRead, fd);
pRead += rlen;
iDataLen -= rlen;
iOffset += rlen;
}
------------------------
执行到最后一次flash_write时,在write那里写入失败,返回-1,errno为14(地址不正确?)
奇怪的现象是,一切都准备好,把设备上电启动,然后更新镜像,没有错误发生,不重启的情况下,再升级一次,就发生错误了。
都是在最后一次写入出错的,最后一次要写入的数据不满足UPDATE_BLOCK_SIZE,所以执行else里的语句,我猜想可能是什么对齐什么的。
我发现每次最少要写入2K的字节,于是在调用write前,对写入的数据长度做了处理(uiLength = (2 * 1024) * ((uiLength - 1) / (2 * 1024) + 1);这样保证每次写入都是2K的倍数),但是悲剧还是发生了,实在想不通了,困扰n天了,求高手求高手求高手!!!
自己写的flash_write函数大致过程就是
fd = open("/dev/mtd5", O_RDWR);
...
rv = lseek(fd, iOffset, SEEK_SET);
...
uiLength = (2 * 1024) * ((uiLength - 1) / (2 * 1024) + 1);
rv = write(fd, buf, uiLength);
写入的数据是使用mkcramfs生成的镜像(大小为4M多),用来更新程序的。大致过程如下
while (iDataLen > 0)
{
int rlen;
int wlen;
if (iDataLen > UPDATE_BLOCK_SIZE)
{
rlen = UPDATE_BLOCK_SIZE;
}
else
{
rlen = iDataLen;
}
wlen = flash_write(iOffset, rlen, pRead, fd);
pRead += rlen;
iDataLen -= rlen;
iOffset += rlen;
}
------------------------
执行到最后一次flash_write时,在write那里写入失败,返回-1,errno为14(地址不正确?)
奇怪的现象是,一切都准备好,把设备上电启动,然后更新镜像,没有错误发生,不重启的情况下,再升级一次,就发生错误了。
都是在最后一次写入出错的,最后一次要写入的数据不满足UPDATE_BLOCK_SIZE,所以执行else里的语句,我猜想可能是什么对齐什么的。
我发现每次最少要写入2K的字节,于是在调用write前,对写入的数据长度做了处理(uiLength = (2 * 1024) * ((uiLength - 1) / (2 * 1024) + 1);这样保证每次写入都是2K的倍数),但是悲剧还是发生了,实在想不通了,困扰n天了,求高手求高手求高手!!!
作者: nightwishfan 发布时间: 2011-09-02
rv = write(fd, buf, uiLength);
rv的值多少, 最后一次此值还会对齐块大小不?
rv的值多少, 最后一次此值还会对齐块大小不?
作者: zmlovelx 发布时间: 2011-09-02
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28