2
カーネルのコマンドラインroot=mtd:name
でMTDデバイスを名前で指定し、名前mount mtd:name
でマウントすることができます。私は私のアプリが同じことをすることができるようにしたい。それは開いて呼び出す必要がありますが、open("mtd:name", ...)
はそのようなファイルまたはディレクトリで失敗します。openの呼び出しで/ dev/mtd#の代わりにmtd:nameを指定してください
どのように '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);
}
はい、私はファイルを解析する必要はないと考えていました。 – Tergiver
これはあなたがしなければならないことです。 – duskwuff