问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux 中mtd设备一般用来干啥的? mtdblock呢,又是干啥的???

发布网友 发布时间:2022-05-05 07:36

我来回答

2个回答

热心网友 时间:2022-07-12 23:04

mtd是字符设备,mtdblock是块设备
可以看看dd命令的实现,在busybox里有
补充:
/dev/mtd/* 或者 /dev/mtd* 这两种表示方式一般表示的是字符设备/dev/mtdblock/* 或者 /dev/mtdblock* 这两种是块设备的表示方式mount 的一般都是块设备貌似dd只对字符设备进行操作
举例:
The mtd0 is char device of mtdblock0.
Create char mtd devices >
> mknod /dev/mtd0 c 90 0
> mknod /dev/mtd1 c 90 2
Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别
1. /dev/mtdN 是Linux 中的MTD架构中,系统自己实现的mtd分区所对应的字符设备,其里面添加了一些ioctl,支持很多命令,如MEMGETINFO,MEMERASE等。而mtd-util中的flash_eraseall等工具,就是以这些ioctl为基础而实现的工具,实现一些关于Flash的操作。比如,mtd 工具中的 flash_eraseall中的:if (ioctl(fd, MEMGETINFO, &meminfo) != 0) { fprintf(stderr, "%s: %s: unable to get MTD device info\n", exe_name, mtd_device); return 1;}其中,MEMGETINFO,就是Linux MTD中的drivers/mtd/nand/mtdchar.c中的:static int mtd_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long arg){。。。。。case MEMGETINFO: info.type = mtd->type; info.flags = mtd->flags; info.size = mtd->size; info.erasesize = mtd->erasesize; info.writesize = mtd->writesize; info.oobsize = mtd->oobsize; /* The below fields are obsolete */ info.ecctype = -1; info.eccsize = 0; if (copy_to_user(argp, &info, sizeof(struct mtd_info_user))) return -EFAULT; break;。。。}而/dev/mtdblockN,是Nand Flash驱动中,驱动在用add_mtd_partitions()添加MTD设备分区,而生成的对应的块设备。根据以上内容,也就更加明白,为什么不能用nandwrite,flash_eraseall,flash_erase等工具去对/dev/mtdblockN去操作了。因为/dev/mtdblock中不包含对应的ioctl,不支持你这么操作。2. mtd char 设备的主设备号是90,而mtd block设备的主设备号是31:# ls /dev/mtd? -l crw-r----- 1 root root 90, 0 May 30 2007 /dev/mtd0crw-r----- 1 root root 90, 2 May 30 2007 /dev/mtd1crw-r----- 1 root root 90, 4 Jul 17 2009 /dev/mtd2crw-r----- 1 root root 90, 6 May 30 2007 /dev/mtd3crwxrwxrwx 1 root root 90, 8 May 30 2007 /dev/mtd4crwxrwxrwx 1 root root 90, 10 May 30 2007 /dev/mtd5crwxrwxrwx 1 root root 90, 12 May 30 2007 /dev/mtd6crwxrwxrwx 1 root root 90, 14 May 30 2007 /dev/mtd7crwxrwxrwx 1 root root 90, 16 May 30 2007 /dev/mtd8crwxrwxrwx 1 root root 90, 18 May 30 2007 /dev/mtd9# ls /dev/mtdblock? -lbrw-r----- 1 root root 31, 0 May 30 2007 /dev/mtdblock0brw-r----- 1 root root 31, 1 May 30 2007 /dev/mtdblock1brw-r----- 1 root root 31, 2 May 30 2007 /dev/mtdblock2brw-r----- 1 root root 31, 3 May 30 2007 /dev/mtdblock3brwxrwxrwx 1 root root 31, 4 May 30 2007 /dev/mtdblock4brwxrwxrwx 1 root root 31, 5 May 30 2007 /dev/mtdblock5brwxrwxrwx 1 root root 31, 6 May 30 2007 /dev/mtdblock6brwxrwxrwx 1 root root 31, 7 May 30 2007 /dev/mtdblock7brwxrwxrwx 1 root root 31, 8 May 30 2007 /dev/mtdblock8brwxrwxrwx 1 root root 31, 9 May 30 2007 /dev/mtdblock9此设备号,定义在/include/linux/mtd/mtd.h中 :#define MTD_CHAR_MAJOR 90#define MTD_BLOCK_MAJOR 313. 其中,mtd的块设备的大小,可以通过查看分区信息获得:# cat /proc/partitionsmajor minor #blocks name31 0 1024 mtdblock031 1 8192 mtdblock131 2 204800 mtdblock231 3 65536 mtdblock331 4 225280 mtdblock4上面中显示的块设备大小,是block的数目,每个block是1KB。而每个字符设备,其实就是对应着上面的每个块设备。即/dev/mtd0对应/dev/mtdblock0,其他以此类推。换句话说,mtdblockN的一些属性,也就是mtdN的属性,比如大小。4。对每个mtd字符设备的操作,比如利用nandwrite去对/dev/mtd0写数据,实际就是操作/dev/mtdblock0。而这些操作里面涉及到的偏移量offset,都指的是此mtd 分区内的偏移。比如向/dev/mtd1的offset为0的位置写入数据,实际操作的是物理偏移offset=/dev/mtd0的大小=1MB=0x100000。

热心网友 时间:2022-07-12 23:04

http://ke.baidu.com/view/1741385.htm

嵌入式设备上面常见的一种存储设备接口。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
LG棒棒糖GD580这么看书 lg gd580怎么用moto看小说 各种海鲜馅饺子大全 海鲜水饺都有什么馅儿的 用网上交易系统进行股票操作资金安全吗,我是在中信建投开的户 北京瀚正化妆学校包就业吗 通江车检在哪里,可以摩托车年审不? 摩托车年审在通江县哪里啊 我是四川省通江县人、我是摩托车驾驶证,以快到期,请问我在江苏无锡... 通江县哪里可以托运摩托车 linux设备驱动为什么有主设备号与次设备号 unix/linux系统中主次设备号各表示什么含义 LINUX驱动设备号有什么用 web开发如何连oracle接数据库 为什么做春梦总是梦见旁边有别人在? 我上班打卡后,又点了下班打卡,更新打卡是到下班的时间点再更新吗 更新打卡有次数限制吗? 以前的快手号丢了,但是我绑定了快手号怎么样才能解绑? 更新打卡的后果? 为什么无法更新打卡? 求几首赛车游戏里超带劲歌曲! 我有一个了,还想再申请一个微信账号,怎么申请呢? 考勤机可以更新打卡吗? 如何关闭更新打卡? 赛车时代背景音乐 快手绑定了别的快手,怎样解绑? 我有一个了,还想再申请一个微信账号,怎么申请呢? 不小心点击更新打卡可以取消吗? 华为荣耀p10怎么啦 谁知道关于 F1赛车的 英文歌曲 最好是轻音乐! linux 主设备号注册在什么时候哪个文档注册 linux驱动程序设计中,设备号为32位,其中次设备号占多少位 简述linux内核如何给设备分配主设备号 为什么QQ每次登陆时显示的上次登陆地点都是美国? 为什么我登陆QQ上面显示美国的IP登陆地址? 为什么我的QQ上次登陆地区是美国 为啥我登陆QQ显示是在美国登陆的... 我想问一下,qq登录总是存在异常,而且我昨天登录时居然显示上一次的登录地点是美国。 我的QQ显示上次登录是在美国,怎么回事啊 为什么我的QQ会显示上次登陆在美国? 我的QQ用手机开通绿钻后用电脑登录,为什么上次登录地点显示是美国?这跟什么有关? 登陆QQ后 系统显示上次登录是在美国 难道偶滴Q号被盗? 为什么我每次登QQ地理位置都是在美国啊 怎样才能调会正常的呢 为什么打开QQ,有个小窗口显示:上次登录:地点美国,是不是QQ被人偷了 为什么qq登陆提示上次登陆地点是未知或者登陆地点在美国? 为什么,我登陆QQ的时候,显示上次登陆地是"美国"了 为什么我的QQ的密码告诉了一个在中国境内的朋友,可是我登录QQ的时候他却显示上次登录地点在美国呐?? 登录QQ的地点怎么变成美国了? 为什么我的QQ登录时显示上次登陆地点为美国 QQ本次登陆地址显示为美国,然后被限制,是否被入侵,求解!