gpt4 book ai didi

c - 是什么阻止了 mtd 被读取?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:29 27 4
gpt4 key购买 nike

我有一个小程序,用于尝试在我的嵌入式 Linux 平台上读取 MTD 的详细信息。我遇到了大多数 block 无法读取的问题,而且我不是 100% 确定为什么会这样。

检查 /dev 目录显示 8 个 mtd 都具有相同的权限:

# ls -al | grep "mtd*"
crwxrwxrwx 1 root root 90, 0 Jan 1 1970 mtd0
crwxrwxrwx 1 root root 90, 2 Jan 1 1970 mtd1
crwxrwxrwx 1 root root 90, 4 Jan 1 1970 mtd2
...
crwxrwxrwx 1 root root 90, 14 Jan 1 1970 mtd7

我的应用程序也以 root 身份运行:

# ls -al mtd_test
-rwxrwxrwx 1 root root 19688 Nov 30 01:18 mtd_test

检查 /proc 我可以看到 8 个 mtd 中的 7 个已安装(所以我预计 mtd7 无法读取)

# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00020000 "u-boot (128 kB)"
mtd1: 00020000 00020000 "u-boot Environment (128 kB)"
mtd2: 00040000 00020000 "Reserved (256 kB)"
mtd3: 00200000 00020000 "Kernel (2048 kB)"
mtd4: 00000064 00020000 "rootFS header"
mtd5: 003fff9c 00020000 "rootFS (4096 kB)"
mtd6: 00180000 00020000 "Permanent Storage (1536 KB)"

奇怪的是,只有 mtd1mtd6 能够被读取,所有其他的都失败并出现错误“Permission denied”,有没有人知道为什么会这样?

我怀疑这是我的代码,但它是:

int main()
{
mtd_info_t mtd_info;
int count, fd;
char devs[][15] = { {"/dev/mtd0"},{"/dev/mtdblock0"},
{"/dev/mtd1"},{"/dev/mtdblock1"},
{"/dev/mtd2"},{"/dev/mtdblock2"},
{"/dev/mtd3"},{"/dev/mtdblock3"},
{"/dev/mtd4"},{"/dev/mtdblock4"},
{"/dev/mtd5"},{"/dev/mtdblock5"},
{"/dev/mtd6"},{"/dev/mtdblock6"},
{"/dev/mtd7"},{"/dev/mtdblock7"}, };
for(count = 0; count < 16; count++) {
fd = open(devs[count], O_RDWR);
if(fd > 0) {
ioctl(fd, MEMGETINFO, &mtd_info);
printf("For dev: %s\nMTD Type: %u\nMTD total size: %u bytes\nMTD erase size: %u bytes\n",
devs[count], mtd_info.type, mtd_info.size, mtd_info.erasesize);
close(fd);
}
else
printf("Failed for %s: error - %s\n", devs[count], strerror(errno));
}
return 0;
}

最佳答案

如果您使用的是 ext 系列 FS,则命令 lsattr 在访问权限的更深层次上起作用,但通常不适用于 /dev/* - 您仍然可以尝试。 jffs2 FS planned实现 lsattr - 不确定他们是否实现了。

O_RDONLY 访问而不是 O_RDWR 可以帮助读取内存 - 一些设备需要写入特定协议(protocol),而读取可能是自由允许的。

也许使用 man 2 open 标志 - 例如 O_SYNC 等...... - 可能会有所帮助。

this page但作者也使用了 O_RDWR

关于c - 是什么阻止了 mtd 被读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com