Linux 2.6.12的内核,mips CPU, /dev/目录下mtd字符设备只能挂载7个的问题。

Wenxy1 2009-07-03 02:56:08
Linux 2.6.12的内核,mips CPU, /dev/目录下mtd字符设备只能挂载7个的问题。
nor flash分区数:
# cat /proc/mtd
dev: size erasesize name
mtd0: 01800000 00020000 "rootfs"
mtd1: 00280000 00020000 "vmlinux"
mtd2: 00100000 00020000 "config1"
mtd3: 00100000 00020000 "config2"
mtd4: 00100000 00020000 "config3"
mtd5: 00100000 00020000 "config4"
mtd6: 00080000 00020000 "splash"
mtd7: 00000080 00020000 "mactype"
mtd8: 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
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

如何修改驱动?让后面的两个分区
mtd7: 00000080 00020000 "mactype"
mtd8: 00040000 00020000 "feature"
也在/dev/目录下出现设备名?
...全文
616 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fujunxu1 2012-10-26
  • 打赏
  • 举报
回复
兄弟你的MIPS cpu用的什么norflash,我的怎么都不可以用,我的nor地址是1fc00000,用的sst的芯片,要是mtd中没有是不是还要添加芯片读写程序啊?能不能共享点经验,306612305@qq.com
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复
确认,已搞定,多谢hefuhua.
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复

/* broadcom 97403的开发板,mips CPU,linux kernel 2.6.12, 32 MB nor flash */
static struct mtd_partition bcm9XXXX_parts[] =
{
{ name: "rootfs", offset: 0, size: 24576 * 1024 }, // 24576KB
{ name: "vmlinux", offset: 0x01D00000, size: 2560 * 1024},
{ name: "config1", offset: 0x01800000, size: 1024 * 1024},
{ name: "config2", offset: 0x01900000, size: 1024 * 1024},
{ name: "config3", offset: 0x01A00000, size: 1024 * 1024},
{ name: "config4", offset: 0x01B00000, size: 1024 * 1024},

{ name: "splash", offset: 0x01C80000, size: 512 * 1024},
//{ name: "cfe", offset: 0x01C80000, size: 512*1024 },
//{ name: "macadr", offset: 0x01FFF800, size: 144 },
//{ name: "nvram", offset: 0x01FFF890, size: 1904-128 },
{ name: "mactype", offset: 0x01FFF780, size: 128 },
{ name: "feature", offset: 0x01F80000, size: 256 * 1024 } // 256 * 1024
};


编译kernel后,用新kernel启动,由于没有mtd7,mtd8这两个设备,我手工创建:
mknod /dev/mtd7 c 90 14; chmod 755 /dev/mtd7; chown nobody:nobody /dev/mtd7
mknod /dev/mtd8 c 90 16; chmod 755 /dev/mtd8; chown nobody:nobody /dev/mtd8

然后检查能没能访问:
# cat /proc/mtd
dev: size erasesize name
mtd0: 01800000 00020000 "rootfs"
mtd1: 00280000 00020000 "vmlinux"
mtd2: 00100000 00020000 "config1"
mtd3: 00100000 00020000 "config2"
mtd4: 00100000 00020000 "config3"
mtd5: 00100000 00020000 "config4"
mtd6: 00080000 00020000 "splash"
mtd7: 00000080 00020000 "mactype"
mtd8: 00040000 00020000 "feature"
# cat mtd7
***1234567890123457V01.01.001-2008-07-22-17:14:*** //内容我做了编辑。

用这种方法,似乎解决了问题。
谢谢。过一下再看看。
hefuhua 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wenxy1 的回复:]
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=628054&page=&view=&sb=&o=&fpart=all&vc=1

我在这里找到udev的介绍。
当然现在的系统是嵌入式系统,rootfs里没有对应的/etc/udev/rules.d/目录,要重做rootfs文件系统?
[/Quote]

这个的前提是你mknod手动是成功的,再修正udev脚本
hefuhua 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wenxy1 的回复:]
mknod /dev/mtd7 c 90 14; chmod 755 /dev/mtd7

我手工建议设备mtd7,然后cat /dev/mtd7显示没有mtd7设备:
# ls -al /dev/mtd7
crwxr-xr-x    1 nobody  nobody    90,  14 Jul  3  2009 /dev/mtd7
# cat /dev/mtd7
cat: /dev/mtd7: No such device or address
[/Quote]

这个说明是驱动udev脚本建立没有问题,因为只要/dev/mtd7是有效的udev脚本会建立的,因为你手动建立也没成功,
所以是驱动本身有问题

我还是怀疑mtd分区表的那个数组大小跟你的flash大小没对上,导致后面没有实际的flash分区引起的,或者你分区的
多少块分区没有正确的传给mtd驱动

看看别人碰到这问题没有
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=628054&page=&view=&sb=&o=&fpart=all&vc=1

我在这里找到udev的介绍。
当然现在的系统是嵌入式系统,rootfs里没有对应的/etc/udev/rules.d/目录,要重做rootfs文件系统?
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hefuhua 的回复:]
楼主用mkmod手动建立对应的mtd7,mtd8,如果可以用就是表示udev脚本没建立,如果不可以用检查分区源码配置,看源码应该不难的

如:
90, 14 /dev/mtd7
90, 16 /dev/mtd8

还有注意的地方,看看的你flash的实际容量跟分区的地址容量是不是一至
[/Quote]
分区肯定没问题,我仔细核对过。
udev脚本没建立? 如何建立,请说说细路,谢谢。
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复
mknod /dev/mtd7 c 90 14; chmod 755 /dev/mtd7

我手工建议设备mtd7,然后cat /dev/mtd7显示没有mtd7设备:
# ls -al /dev/mtd7
crwxr-xr-x 1 nobody nobody 90, 14 Jul 3 2009 /dev/mtd7
# cat /dev/mtd7
cat: /dev/mtd7: No such device or address
hefuhua 2009-07-03
  • 打赏
  • 举报
回复
楼主用mkmod手动建立对应的mtd7,mtd8,如果可以用就是表示udev脚本没建立,如果不可以用检查分区源码配置,看源码应该不难的

如:
90, 14 /dev/mtd7
90, 16 /dev/mtd8

还有注意的地方,看看的你flash的实际容量跟分区的地址容量是不是一至
Wenxy1 2009-07-03
  • 打赏
  • 举报
回复
#define MAX_MTD_DEVICES 32 /* 我改了这个宏,原来是16,编译后,还是没有出现/dev/mtd7, /dev/mtd8 */
当然,要是改成4,那/dev/目录会出现mtd0 到 mtd3共4个字符设备。

查阅了devices.txt文档:
90 char Memory Technology Device (RAM, ROM, Flash)
0 = /dev/mtd0 First MTD (rw)
1 = /dev/mtdr0 First MTD (ro)
...
30 = /dev/mtd15 16th MTD (rw)
31 = /dev/mtdr15 16th MTD (ro)

应当支持多个>= 7个mtd设备啊?文当里都标出了 /dev/mtd15.


4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧