块设备驱动?MTD设备驱动?有什么区别?FLASH驱动属于哪一类?
想写一块NOR FLASH的驱动,看了下LDD3上的块设备驱动开发,又在网上无意中看到MTD设备驱动。
LDD3的块设备中降到了块驱动里要添加DISK结构 ,,如果是一个面向块的NOR FLASH,写个块驱动也要添加这个结构 么?
好像又有人说FLASH驱动属于MTD层次,
源码里DRIVER下面又要MTD,也有BLOCK,该怎么写FLASH驱动呢?按那种方式呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
如果把自己的FLASH驱动写成MTD驱动,我看到MTD下有个chrdev.c,还需要自己写字符设备驱动么?如果写两个冲突不
Flash->MTD
看了一篇叫住LINUX MTD源码分析的文章,我自己写的FLASH MTD驱动必需放在/drivers/mtd/maps下,还是可以放在任何目录下面
可以放在你自己指定的目录,只要编译的时候包含的路径对了就行了。刚开始做的时候,最好多参考内核源码的一些实现。
一般嵌入式中Nor flash都放在mtd设备中的
最近学习nor flash的MTD驱动,对于map_info的read/write分量不太明白。
nor flash的MTD驱动中,驱动作者需要定义自己的map_info结构体,并且为read/write函数分量赋值。在write函数的实现中,大多使
用__raw_writew来实现。但是向nor flash写入数据是要经过program的过程的,不能像写内存一样写入。而且nor
flash的底层读写函数实际上是在cfi_cmdset_0001/2.c中实现的,并且被赋给mtd_info的read/write分量。
真不知道map_info结构体的read/write函数有何用?大家多指教啊!谢谢
是不是直接调用MTD->read,write的成员函数等就可以直接操作NOR FLASH了??跟踪了下源码,在read ,write函数的N层嵌套函数里有很多map_write(map, CMD(0xB0), adr)这类的调用,从字面意思看貌似是在想FLASH里写命令。看FLASH的芯片手册里说,FLASH可以直接读,编程FLASH时需要先向对应的块写命令。比如擦处块时,看到CFI_CMDSET_0001.C里面的static int __xipram do_erase_oneblock()里有map_write(map, CMD(0x20), adr);
map_write(map, CMD(0xD0), adr);之类的。是不是只需调用呢mtd->erase(mtd, erase)就可以直接把响应块给擦出,连对块进行的命令MTD层都给封装在相应的底层函数里的啊
具体的实现在于你自己,如果你把它当成普通的块设备,那就用块驱动也行;如果你想遵循cfi,就用MTD。