MTD层次、MTD设备驱动接口、Nor Flash/Nand Flash驱动
来源:互联网 发布:矩阵a与b相似,其中a= 编辑:程序博客网 时间:2024/05/16 04:41
Flash设备驱动及接口分为4层:设备节点,MTD设备层、MTD原始设备层(属于内核的子系统)和硬件驱动层
块设备与文件系统的关系:
(1)MTD+MTDblock+fat
(2)MTD+NFTL+fat
(3)SD(flash)+硬件翻译层+fat
(4)MTD+MTDblock+yaffs或jffs2
yaffs:文件系统只针对Nand flash它会占用00b,需要修改U-boot
jffs2:Nand flash和Nor flash均可
用于描述MTD原始设备的数据结构是mtd_info,它类似于字符设备的cdev和块设备的gendisk
struct mtd_info
{
u_char type;//内存技术的类型
u_int32_t flags;//标志位
u_int32_t erasesize;//主要的擦除块大小(同一个mtd设备可能有数种不同的eraseize)
u_int32_t oobblock;//oob导体小大
u_int32_t ecctype;//ecc类型
u_int32_t eccsize;//ecc工作的范围
}
注册和注销MTD设备
注册:int add_mtd_device(struct mtd_info* mtd)
注销:int del_mtd_device(struct mtd_info* mtd);
mtd_partition结构体
struct mtd_partition
{
char *name;//标识字符串
u_int32_t size;//分区大小
u_int32_t offset;//主MTD空间内的偏移
u_int32_t mask_flags;//掩码标志
}
另外,还需要配置内核使其支持MTD字符设备与块设备及MTD分区
注:在一个mtd_info上,将mtd_info分成几个小的mtd_info,分别对各个小的mtd_info进行注册,即分别逐一注册各个小的mtd_info结构体
Nor flash驱动
在Linux系统中,实现了针对cfi、jedec等接口的通用NOR驱动,这一层的驱动直接面向mtd_info的成员函数,这使得NOR的芯片级驱动变得十分简单,只需要定义具体的内存映射情况结构体map_info并使用指定接口类型调用do_map_probe()
Nor flash驱动结构
MTD --> CFI、JEDEC等NOR Flash通用驱动(mtd_info) --> CFI、JEDEC等NOR Flash底层驱动
Map_info结构体
struct map_info
{
char *name;
unsigned long size;//大小
unsigned long phys;//物理地址
void __iomem *virt;
void *cached;
int bankwidth;//总线宽度
}
CFI、JEDEC等通用接口驱动实际上已经支持了市场上的90%的flash驱动,因此我们可以通过它来探测是否支持我们要使用的flash,如果支持的话则由这个通用驱动来构建MTD驱动。工作重点:
(1)构建map_info看是否支持Nor flash芯片(一般都能支持90%)
(2)如果不支持则需要修改内核的相应驱动程序,修改方法见实验手册。
如果驱动支持这种芯片,只要完成mtd.info,调用do_map_probe(mtd_info),然后调用add_mtd_device(mtd_info),add_mtd_partitions();
以下是一个Nor flash驱动实验:
实验内容:为fs2410平台添加nor flash驱动,并在flash上制作jffs2文件系统
步骤:
(1)断开跳线,选择Nor flash启动方式
(2)打开MDK环境,将一个可以从nor flash启动的uboot烧写到开发板.
(3)复位,设置uboot参数(相关的uboot命令要掌握)
(4)将zImage和根文件系统分别放至/tftp及/source/rootfs中
(5)启动系统,进入终端
(6)将s3c2410_nor.c nor flash驱动程序编译成s3c2410_nor.ko模块文件入到source/rootfs中(编译前要修改一个东东:为JEDEC_TYPE)
(7)insmod s3c2410_nor.ko
(8)查看cat /proc/mtd
(9)如果系统没有加载udev还必须手动创建设备结点:mknod /dev/mtdblock6 b 30 6
(10)建立挂载目录:mkdir /tmp/udisk
(11)在mtdblock6上挂载jffs2文件系统:mount -t jffs2 /dev/mtdblock6 /tmp/udisk
(12)在/tmp/udisk中存储文件,然后复位,重新开启后挂载文件系统,查看文件是否存在,或存在则成功
Nor flash的uboot擦写命令
可以查看帮助:help erase
格式:erase 起始地址 结束地址-1
如: erase 0x0 0x3fff//结束地址为0x4000
- MTD层次、MTD设备驱动接口、Nor Flash/Nand Flash驱动
- MTD设备驱动--NAND flash
- MTD 设备驱动 和 NAND Flash 驱动程序分析。
- Nand Flash驱动, ECC, MTD, FTL, 文件系统
- mtd flash 驱动
- MTD flash 驱动
- MTD分区,NOR flash, nand FALSH
- Linux MTD驱动下的Nand Flash驱动中 mtd->write_oob和ecc.write_oob
- MTD(2)---nand flash的底层驱动代码分析 .
- MTD(2)---nand flash的底层驱动代码分析
- MTD(2)---nand flash的底层驱动代码分析
- MTD分区、NOR flash、NAND flash 的区别
- MTD分区、NOR flash、NAND flash 的区别
- powerpc如何创建mtd 分区,nor flash,nand flash,mpc83xx
- NAND FLASH与MTD
- 【驱动】Flash设备驱动基础·NOR·NAND
- 【驱动】Flash设备驱动基础·NOR·NAND
- NAND FLASH学习笔记之MTD下nand flash驱动(一)
- 我和几个同学编的聊天工具界面(linux下用GTK编的,有几个bug,不能通信)
- 正则表达式全部符号解释
- 局域网访问 MySQL 数据库
- 自己动手写操作系统(一)
- WinCE BSP工程文件pbcxml分析
- MTD层次、MTD设备驱动接口、Nor Flash/Nand Flash驱动
- 总理很忙
- 进展缓慢
- 如何提高自己的 Java 编程技能(有不错的网站推荐)
- 相关网摘:
- 基于WinCE的嵌入式系统注册表的研究
- c#中访问修饰符public,private,protected,internal,protected internal的区别
- 关于QMAKESPEC的问题
- AT91RM9200开发笔记(9):为Linux2.6.20添加Nor Flash MTD驱动