gpt4 book ai didi

linux - 指定 mtd :name instead of/dev/mtd# in call to open

转载 作者:太空狗 更新时间:2023-10-29 12:36:48 27 4
gpt4 key购买 nike

您可以在内核命令行 root=mtd:name 上按名称指定 MTD 设备,并且可以使用名称 mount mtd:name 进行挂载。我希望我的应用程序能够做同样的事情。它必须调用 open,但是 open("mtd:name", ...) 失败并返回 No such file or directory。

如何从“mtd:name”到“/dev/mtd#”?

已更新

这是我想出的代码,以防它对其他人有用。

int mtd_lookup_minor(const char * mtdname)
{
int minor;
unsigned int size, erasesize;
char name[65];
char line[128];

if (mtdname == NULL)
{
errno = EINVAL;
return -1;
}

FILE * fp = fopen("/proc/mtd", "r");
if (fp == NULL)
return -1;

while (fgets(line, sizeof(line), fp))
{
if (sscanf(line, "mtd%d: %x %x \"%64[^\"]\"", &minor, &size, &erasesize, name) == 4 && strcmp(name, mtdname) == 0)
{
fclose(fp);
return minor;
}
}

fclose(fp);
errno = ENODEV;
return -1;
}

/*
* mtd_open_char allows specifying "mtd:name" instead of /dev/mtd#
* to refer to the MTD char device by name.
*/
int mtd_open_char(const char * mtdpath, int oflag)
{
int minor;
char pathbuffer[16];

if (mtdpath == NULL)
{
errno = EINVAL;
return -1;
}

if (strlen(mtdpath) > 4 && strncmp(mtdpath, "mtd:", 4) == 0)
{
minor = mtd_lookup_minor(mtdpath + 4);
if (minor < 0 || minor > 9999999) // paranoia fit into pathbuffer
{
errno = ENODEV;
return -1;
}

sprintf(pathbuffer, "/dev/mtd%d", minor);
mtdpath = pathbuffer;
}

return open(mtdpath, oflag);
}

最佳答案

您可以在 /proc/mtd 中查找 MTD 名称和设备。

关于linux - 指定 mtd :name instead of/dev/mtd# in call to open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437237/

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