zoukankan      html  css  js  c++  java
  • NAND NOR Flash 和MTD

    来自:http://blog.sina.com.cn/s/blog_6b489d5e0102xm62.html

    一、NAND和NOR Flash

    一般来说,快闪记忆体可分为两大规格,一个是NAND, 一个是NOR。简单来说,NAND一般以存储数据为主,晶片容量大,容量可以达到2Gb甚至更大,NAND的读取是以一次读取一块的形式来进行的,通常一次读取512个字节,采用这种技术的Flash比较廉价;NOR一般以存储程序代码为主,又称为Code Flash,所以可让微处理器直接读取,但晶片容量较低,主流容量512Mb,NOR采用内存的随机读取技术。如果利用闪存只是用来存储少量的代码,这是NOR Flash更合适一些。用户不能直接运行NAND Flash上的代码,因此很多使用NAND Flash的Demo Board除了使用NAND Flash以外,还加上一块小的NOR Flash来运行启动代码。通过下表我比较了几乎所有关于NAND FLASH以及NOR FLASH的全部重要特性。

    二 、 MTD

          Memory Technology Device即内存技术设备,在Linux内核中,引入MTD层为NOR FLASH和NAND FLASH设备提供统一接口。MTD将文件系统与底层FLASH存储器进行了隔离。

     

    如上图所示,MTD设备通常可分为四层,从上到下依次是:设备节点、MTD设备层、MTD原始设备层、硬件驱动层。

    Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。MTD设备的Nand Flash芯片的驱动则drivers/mtd/nand/子目录下,Nor Flash芯片驱动位于drivers/mtd/chips/子目录下。

    MTD原始设备层:用于描述MTD原始设备的数据结构是mtd_info,它定义了大量的关于MTD的数据和操作函数。其中mtdcore.c:  MTD原始设备接口相关实现,mtdpart.c :  MTD分区接口相关实现。

    MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。其中mtdchar.c :  MTD字符设备接口相关实现,mtdblock.c : MTD块设备接口相关实现。块设备模拟:MTD提供一个称谓mtdblock的块驱动程序,它在闪存上模拟一块硬盘,你可以将任何文件系统(如:ext2)放在模拟的闪存磁盘上,mtdblock隐藏了复杂的闪存访问过程(比如写之前先删除相关扇区的内容),被mtdblock创建的设备节点命名为/dev/mtdblock/X,其中X是分区号。字符设备模拟:mtdchar是底层闪存设备呈现出线性特点,与文件系统的块设备特性不同,mtdchar建立的设备节点命名为/dev/mtd/X,其中X为分区号,例如,写入引导程序: dd if=bootloader.bin of=/dev/mtd/0 ;一个原始mtdchar分区的使用示例是POST错误日志,另外一个嵌入式系统使用字符闪存分区的例子是保存类似于PC的CMOS、EEPROM信息。

    设备节点:通过mknod在/dev子目录下建立MTD块设备节点(主设备号为31)和MTD字符设备节点(主设备号为90)。通过访问此设备节点即可访问MTD字符设备和块设备 

     
    三、mtd-utils 工具的使用

            3.1 用来把flash镜像写入mtd分区,flashcp -v rootfs.image /dev/mtd1,该命令把erase,write,校验一块完成了;

    四、内存读写

    dd if=/dev/block/mmcblk0 of=/cache/nvram bs=1024 count=10240

  • 相关阅读:
    bwapp之xss(blog)
    渗透测试平台bwapp简单介绍及安装
    用glob()函数返回目录下的子文件以及子目录
    常见编码解码脚本
    生成以指定字符为开头的md5值(6位数字)
    从1到n的阶乘的和(python)
    python循环解码base64
    BASE64编码原理分析脚本实现及逆向案例
    史上最完整的MySQL注入
    初探APT攻击
  • 原文地址:https://www.cnblogs.com/jly594761082/p/10370791.html
Copyright © 2011-2022 走看看