mtd program in user space

来源:互联网 发布:c语言大小写转换 编辑:程序博客网 时间:2024/05/17 07:13

mtd 是linux用来管理存储设备的,在insmod 相关驱动模块后,一般会在 /dev 下面建立设备的节点,如字符或者块设备,在用户空间对相关设备进行编程的时候,只需要了解响应设备的操作I/O命令,引用.h头文件进行编程,open对应的设备节点,简化为对文件的操作。

 

一般情况下是对FLASH设备进行操作,需要注意FLASH的写是需要先EARSE的,在测试中如果你发现a可以写成b以为就完事了,实际上你就不能把b写出c,其实是1可以写成0,0不能写成1造成的,所以编写用户程序也需要注意这里的顺序,而erase是需要block大小来进行的,所以这里有个读写缓存提高效率的地方。

 

关于UBI

      在mtd上面建立UBI层,实用UBIFS可以提高RAW-FLASH类得存储设备的性能。如果使用UBI,则FLASH的oob都不用了,他不往oob上写东西,使用UBI需要初始化设备的使用空间,需要了解FLASH芯片的相关参数,其中主要考虑的sub-page size,因为他的大小会直接影响到以后的使用,在初始化UBI img 的时候制定的subpage size必须在以后的attach中使用相同的参数,否则会提示subpange的大小不一致,在编程中将会得到错误的返回。

      其次需要注意的是编程中源码的很多内核空间的函数,在bootloader中是需要屏蔽的,那么实现的具体动作需要移植的人员充分了解做了什么,这么做是否正确,如果进入到内核管辖的时候,基本UBI就相当于一个模块了,驱动模块编程应当不陌生了吧,而且源码是开源的,慢慢看动吧,就几个结构体,UBI_device,ubi_volume...,还有一些对这些设备的操作而已。