- 论坛徽章:
- 0
|
5可用积分
关于直接编写应用程序读写/dev/mtd0 或者 /dev/mtdblock0的问题。
开发板的Linux环境:
# uname -a
Linux 192.168.102.213 2.6.12-4.2-brcmstb #73 Tue Apr 14 16:06:50 CST 2009 7403a0 unknown
我的开发板的Nor flash分区情况是
# cat /proc/mtd
dev: size erasesize name
mtd0: 01800000 00020000 "rootfs"
mtd1: 00200000 00020000 "vmlinux"
mtd2: 00400000 00020000 "config"
mtd3: 00080000 00020000 "splash"
mtd4: 00080000 00020000 "cfe"
mtd5: 00000080 00020000 "mactype"
mtd6: 00040000 00020000 "nvram"
mtd7: 00040000 00020000 "feature"
# ls /dev/mtd* -al
crwxr-xr-x 1 nobody nobody 90, 0 Mar 2 2009 /dev/mtd0
crwxr-xr-x 1 nobody nobody 90, 2 Mar 2 2009 /dev/mtd1
crwxr-xr-x 1 nobody nobody 90, 4 Mar 2 2009 /dev/mtd2
crwxr-xr-x 1 nobody nobody 90, 6 Mar 2 2009 /dev/mtd3
crwxr-xr-x 1 nobody nobody 90, 8 Mar 2 2009 /dev/mtd4
crwxr-xr-x 1 nobody nobody 90, 10 Mar 2 2009 /dev/mtd5
crwxr-xr-x 1 nobody nobody 90, 12 Mar 2 2009 /dev/mtd6
-rw-r--r-- 1 root root 19 Apr 15 2009 /dev/mtd9
brwxr-xr-x 1 nobody nobody 31, 0 Mar 2 2009 /dev/mtdblock0
brwxr-xr-x 1 nobody nobody 31, 1 Mar 2 2009 /dev/mtdblock1
brwxr-xr-x 1 nobody nobody 31, 2 Mar 2 2009 /dev/mtdblock2
brwxr-xr-x 1 nobody nobody 31, 3 Mar 2 2009 /dev/mtdblock3
brwxr-xr-x 1 nobody nobody 31, 4 Mar 2 2009 /dev/mtdblock4
brwxr-xr-x 1 nobody nobody 31, 5 Mar 2 2009 /dev/mtdblock5
brwxr-xr-x 1 nobody nobody 31, 6 Mar 2 2009 /dev/mtdblock6
crwxr-xr-x 1 nobody nobody 90, 1 Mar 2 2009 /dev/mtdr0
crwxr-xr-x 1 nobody nobody 90, 3 Mar 2 2009 /dev/mtdr1
crwxr-xr-x 1 nobody nobody 90, 5 Mar 2 2009 /dev/mtdr2
crwxr-xr-x 1 nobody nobody 90, 7 Mar 2 2009 /dev/mtdr3
crwxr-xr-x 1 nobody nobody 90, 9 Mar 2 2009 /dev/mtdr4
crwxr-xr-x 1 nobody nobody 90, 11 Mar 2 2009 /dev/mtdr5
crwxr-xr-x 1 nobody nobody 90, 13 Mar 2 2009 /dev/mtdr6
通过NFS启动系统后,执行应用程序能读出 /dev/mtd6里面的数据!
但是我要写入数据,在write()之前,要调用get_mtdinfo()获取mtd设备的一些参数(例如,分区大小,擦除块大小等)后再擦除。
int get_mtdinfo(int fd)
{
struct mtd_info_user mtdInfo;
struct erase_info_user mtdEraseInfo;
int num;
memset(&mtdInfo, 0, sizeof(struct mtd_info_user));
num = ioctl(fd, MEMGETINFO, &mtdInfo);
if(num < 0)
{
fprintf(stderr, "Error: could not get MTD device info from MTD device, [error=%d]\n", errno);
return -1;
}
printf("mtdInfo: type=%d, flags=%d, size=%d, erasesize=%d\n", \
mtdInfo.type, mtdInfo.flags, mtdInfo.size, mtdInfo.erasesize);
return 0;
}
fd = open("/dev/mtd6", O_RDWR, S_IXGRP); //这是我打开设备地方式
但是出错,errno=25。
这是为什么,难是我用NFS启动了linux,所以有问题?
我直接从板子启动内核(不通过NFS),执行这个应用程序获取/dev/mtd6(或者其它mtd设备),还是出错,errno=25.
难道要修改内核的MTD设备选项,还是别的原因?
我已经搞了2天了,还没搞定,请大家帮帮我,谢谢。
[ 本帖最后由 wenxy 于 2009-4-20 12:02 编辑 ] |
|