精华内容
下载资源
问答
  • mtd

    2014-11-07 23:46:02
    MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源...

    MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

    基本信息

    • 外文名称

      MTD

    • 英文全程

      memory technology device

     
    • 中文解释

      内存技术设备

    • 源代码

      在/drivers/mtd子目录下。

    目录
    展开

    基本介绍

    MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

    原始设备

    所有组成MTD原始设备的Flash芯片必须是同类型(无论是interleave还是地址相连),在描述MTD原始设备数据结构中采用同一结构描述组成Flash芯片。每个MTD原始设备有一个mtd_info结构,其中的priv指针指向一个map_info结构,map_info结构中的fldrv_priv指向一个cfi_private结构,cfi_private结构的cfiq指针指向一个cfi_ident结构,chips指针指向一个flchip结构的数组。其中mtd_info、map_info和cfi_private结构用于描述MTD原始设备,因为组成MTD原始设备的NOR型Flash相同,cfi_ident结构用于描述Flash芯片信息;而flchip结构用于描述每个Flash芯片专有信息。

    根文件系统

    文件系统mtdmtd

    字符设备节点

    MTD字符设备

    MTD块设备

    MTD原始设备

    FLASH硬件驱动

    块设备节点

    一、Flash硬件驱动层:硬件驱动层负责在init时驱动Flash硬件,Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程序位于drivers/mtd/chips子目录下。NAND型Flash的驱动程序则位于/drivers/mtd/nand子目录下

    二、MTD原始设备:原始设备层有两部分组成,一部分是MTD原始设备的通用代码,另一部分是各个特定的Flash的数据,例如分区。

    用于描述MTD原始设备的数据结构是mtd_info,这其中定义了大量的关于MTD的数据和操作函数。mtd_table(mtdcore.c)则是所有MTD原始设备的列表,mtd_part(mtd_part.c)是用于表示MTD原始设备分区的结构,其中包含了mtd_info,因为每一个分区都是被看成一个MTD原始设备加在mtd_table中的,mtd_part.mtd_info中的大部分数据都从该分区的主分区mtd_part->master中获得。

    在drivers/mtd/maps/子目录下存放的是特定的flash的数据,每一个文件都描述了一块板子上的flash。其中调用add_mtd_device()、del_mtd_device()建立/删除 mtd_info结构并将其加入/删除mtd_table(或者调用add_mtd_partition()、del_mtd_partition() (mtdpart.c)建立/删除mtd_part结构并将mtd_part.mtd_info加入/删除mtd_table 中)。

    三、MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。MTD字符设备的定义在mtdchar.c中实现,通过注册一系列file operation函数(lseek、open、close、read、write)。MTD块设备则是定义了一个描述MTD块设备的结构 mtdblk_dev,并声明了一个名为mtdblks的指针数组,这数组中的每一个mtdblk_dev和mtd_table中的每一个 mtd_info一一对应。

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

    五、根文件系统:在Bootloader中将JFFS(或JFFS2)的文件系统映像jffs.image(或jffs2.img)烧到flash的某一个分区中,在/arch/arm/mach-your/arch.c文件的 your_fixup函数中将该分区作为根文件系统挂载。

    六、文件系统:内核启动后,通过mount 命令可以将flash中的其余分区作为文件系统挂载到mountpoint上。

    设备层和原始设备层的函数调用关系(红色部分需要我们实现):

    一个MTD原始设备可以通过mtd_part分割成数个MTD原始设备注册进 mtd_table,mtd_table中的每个MTD原始设备都可以被注册成一个MTD设备,其中字符设备的主设备号为90,次设备号为0、2、4、 6…(奇数次设备号为只读设备),块设备的主设备号为31,次设备号为0、1、2、3…

    mtd_notifier mtd_notifier

    字符设备 mtd_fops 块设备 mtd_fops

    (mtdchar.c) (mtdblock.c) mtdblks

    设备层

    register_mtd_user()

    get_mtd_device()

    unregister_mtd_user()

    put_mtd_device()

    erase_info

    mtd_notifiers

    mtd_table

    mtd_info

    mtd_part

    (mtdcore.c)

    (mtdpart.c)

    Your Flash

    (your-flash.c)

    add_mtd_partitions()

    del_mtd_partitions()

    原始设备层 add_mtd_device()

    del_mtd_device()

    mtd_partition

    NOR型Flash芯片驱动与MTD原始设备

    所有的NOR型Flash的驱动(探测probe)程序都放在 drivers/mtd/chips下,一个MTD原始设备可以由一块或者数块相同的Flash芯片组成。假设由4块devicetype为x8的 Flash,每块大小为8M,interleave为2,起始地址为0x01000000,地址相连,则构成一个MTD原始设备(0x01000000-0x03000000),其中两块interleave成一个chip,其地址从0x01000000到0x02000000,另两块interleave成一个chip,其地址从0x02000000到0x03000000。

    请注意,所有组成一个MTD原始设备的Flash芯片必须是同类型的(无论是interleave还是地址相连),在描述MTD原始设备的数据结构中也只是采用了同一个结构来描述组成它的Flash芯片。

    0x03000000

    0x02000000

    0x01000000

    每个MTD原始设备都有一个mtd_info 结构,其中的priv指针指向一个map_info结构,map_info结构中的fldrv_priv指向一个cfi_private结构,cfi_private结构的cfiq指针指向一个cfi_ident结构,chips指针指向一个flchip结构的数组。其中mtd_info、 map_info和cfi_private结构用于描述MTD原始设备;因为组成MTD原始设备的NOR型Flash相同,cfi_ident结构用于描述Flash芯片的信息;而flchip结构用于描述每个Flash芯片的专有信息(比如说起始地址)

    展开全文
  • MTD

    千次阅读 2014-03-15 16:28:41
    MTD(memory technology device内存技术设备) 在硬件和文件系统层之间的提供了一个抽象的接口,MTD是用来访问内存设备(如:ROM、flash)的中间层,它将内存设备的共有特性抽取出来,从而使增加新的内存设备驱动程序...
    摘自:http://wen.shuijie.blog.163.com/blog/static/5786941020121115104651124/
    MTD(memory technology device内存技术设备) 在硬件和文件系统层之间的提供了一个抽象的接口,MTD是用来访问内存设备(如:ROM、flash)的中间层,它将内存设备的共有特性抽取出来,从而使增加新的内存设备驱动程序变得更简单。
    MTD - wen.shuijie - wen.shuijie的博客原始设备是MTD字符设备和MTD块设备的抽象。
    MTD设备层、MTD原始设备层和Flash硬件驱动层之间的接口关系如下图:
    MTD - wen.shuijie - wen.shuijie的博客
    MTD芯片驱动程序必须向MTD子系统注册,通过mtd_info结构体给add_mtd_device()函数提供一组缺省的回调函数及
    属性 ,回调函数一般用于删除,读出,写入与同步等操作,目前已经可以使用的MTD芯片驱动程序有:
    DiskOnchip(DOC)、Common Flash Interface (CFI)、JEDEC、非DOC的NAND Flash、旧式非CFI的flash、RAM,ROM和不存在系统上的芯片、非缓存的RAM、用于测试和评估的虚拟设备。
    有六种MTD /dev 条目,七种相应的MTD用户模块,看下表:
    MTD - wen.shuijie - wen.shuijie的博客  MTD - wen.shuijie - wen.shuijie的博客 MTD - wen.shuijie - wen.shuijie的博客 

     mtdN:每个条目就是一个独立的MTD设备分区,每个MTD分区如同一个独立的MTD设备

    mtdrN:每个条目就是相应的mtdN条目的只读版本

    mtdblockN:每个条目就是相应的mtdN项目的块设备版本

    nftlLN:每组设备就是一个独立的NFTL设备,在同组中每个条目就是NFTL设备上的一个分区,在同组设备中第一个条目就是整个设备,如:/dev/nftlb代表第二个NFTL设备的全部,/dev/nftlb3代表第二个设备的第3个分区。

    inftlLN,ftlLN,rfd_ftlLN,ssdfclL same as NFTL

    设定配置内核

    以下是关于一些配置的子菜单:

    MTD support,CONFIG_MTD:启用支持core MTD子系统:若要产生模块的话,名为mtdcort.ko

    MTD concatenating support,CONFIG_MTD_CONCAT:用于合并多个MTD设备或分区成为一个单一的逻辑分区;mtdconcat.ko

    MTD partitioning support,CONFIG_MTD_PARTITIONS:要让MTD设备能够划分成各个独立的分区;mtdpart.ko

    Direct char device access to MTD devices,CONFIG_MTD_CHAR:字符设备MTD用户模块(mtdN/mtdrN的配置选项);mtdchar.ko

    Caching block device access to MTD devices,CONFIG_MTD_BLOCK:读写块设备MTD用户模块(/dev/mtdblockN);mtdblock.ko

    Read-only block device access to MTD devices,CONFIG_MTD_BLOCK_RO:只读(与读写块设备同名的/dev);mtdblock_ro.ko

    FTL(Flash Translation Layer)support,CONFIG_FTL:支持FTL用户模块必须设定此选项;ftl.ko,NFTL用户模块可通过/dev/ftlLN设备条目来存取

    NFTL(NAND Flash Translation Layer)support,CONFIG_MTD_NFTL:NFTL用户模块,nftl,ko,/dev/nftlLN来存取

    Write support for NFTL, CONFIG_NFTL_RW:想要写入具有NFTL格式的设备必须启用此项,它只会影响NFTL用户模块的建立方式,本身不是独立的用户模块。

    注意:两种块设备用户模块只能选用一种。

    MTD次级菜单还包括四个次级菜单:用来设定支持实际MTD硬件的设备驱动程序。

    RAM/ROM/Flash chip drivers: CFI-compliant flash, JEDEC-compliant flash,old non-CFI flash, RAM, ROM, and absent chips.

    Mapping drivers for chip access:mapping drivers. Includes one generic mapping driver that can be configured by providing the physical start address of the device and its size in hexadecimal notation, and its bus width in octets. This submenu also contains one entry for each board for which there is an existing mapping driver included in the kernel

    Self-contained MTD device drivers:standalone drivers that are not part of the NOR,NAND, or OneNAND frameworks. This includes test drivers such as the memory-backed test device, “loopback” block device driver, and legacy drivers for the
    DiskOnChip devices.

    NAND Flash Device Drivers: NAND flash devices, including the supported DiskOnChip modules.

    OneNAND Flash Device Drivers: Samsung OneNAND flash devices.

    对于目标板,一定要把MTD相应模块编译成内核的一部分,否则根文件系统用不了。无法安装根文件系统的指示信息:

    kernel panic:VFS: unable to mount root fs on ...


    文件系统建立工具,

    mkfs.jffs2 [options] -r directory -o output_file           :从directory目录开始建立JFFS2文件系统的映象文件

    sumtool [options] -i input_file -o output_file      :添加信息到每一个擦除块,结合 CONFIG_JFFS2_SUMMARY,加快JFFS2的安装

    jffs2dump [options] image        :

    NFTL工具

    nftl_format device [start_address [size]]  : 将device设备格式化,供NFTL or INFTL 用户模块使用

    nftldump device [output_file]        :将NFTL分区的内容转储到output_file中

    FTL工具

    ftl_format [options] device   :FTL设备格式化

    ftl_check [options] device    :检查并提供与FTL设备有关的信息

    NAND flash工具

    nandwrite  device input_file start_address :将input_file内容写入nand中

    nandtest  device :测试nand芯片,包括那些在DOC设备里的nand 芯片

    nanddump device output_file [offset] [number_of_bytes] :将nand 芯片的内容转储到output_file文件中,相当于读?

    以上工具现在不会用,以后再用,先做个笔记。

    现在配置内核

    若要使用CFI flash,必须启用以下选项:

    ? MTD support
    ? MTD partitioning support if you would like to partition your flash device
    ? Direct char device access to MTD devices
    ? Caching block device access to MTD devices
    ? In the “RAM/ROM/Flash chip drivers” submenu, detect flash chips by CFI probe

    ? In the “Mapping drivers for chip access” submenu, the CFI flash device-mapping driver for your particular board

    那么如何分区呢

    进行分区一般是将相应的mapping驱动程序进行如下类似数据结构初始化:

    static struct mtd_partition tqm8xxl_partitions[  ] = {
        {
            name:   "uboot",                          /* uboot Firmware */
            offset: 0x00000000,
            size:   0x00040000,                       /* 256 KiB */
        },
        {
            name:   "kernel",                         /* default kernel image */
            offset: 0x00040000,
            size:   0x000C0000,
        },
        {
            name:   "user",
            offset: 0x00100000,
            size:   0x00100000,
        },
        {
            name:   "initrd",
            offset: 0x00200000,
            size:   0x00200000,
        }
    };

    static struct mtd_partition tqm8xxl_fs_partitions[  ] = {
        {
            name:   "cramfs",
            offset: 0x00000000,
            size:   0x00200000,
        },
        {

            name:   "jffs2",
            offset: 0x00200000,
            size:   0x00200000,
        }
    };

    tqm8xxl_partitions:为第一组4M的存储分了4个分区,tqm8xxl_fs_partitions:为第二组4M分了2个分区,每个分区包含3个属性。name单为一个助记符属性,offset:为分区的起始地址,size表分区大小。

    上面的实际物理存储位置如下表:

    MTD - wen.shuijie - wen.shuijie的博客

     可以在/proc/mtd来查看分区,cat /proc/mtd,注意分区要以擦除单位为最小单位进行分区

    分区好后,在/dev下要有必要的分区条目

    根据设备上的分区数,要为两种MTD用户模块建立相同数量的/dev条目

    # for i in $(seq 0 5)
    > do
    > mknod mtd$i c 90 $(expr $i + $i)
    > mknod mtdblock$i b 31 $i
    > done

    对于CFI flash写入前,必须进行擦除操作erase and eraseall

    需要擦除"initrd“分区如:eraseall /dev/mtd3

    写与读:cat 或dd进行写,但是flashcp for NOR flash and nandwrite for NAND就更好了,这两个命令的好处可以看相关文档

    flashcp /tmp/initrd.bin /dev/mtd3                                       :*.bin->mtd3

    以下是读取操作的例子:

    dd if=/dev/mtd0 of=/tmp/ppcboot.img       :mtd0->ppcboot.img

    展开全文
  • mtd模型详解

    2012-08-05 23:40:12
    mtd
  • 雷达动目标检测仿真,含脉冲压缩,mtd处理等
  • 雷达动目标检测仿真,含脉冲压缩,mtd处理等
  • mtd 分析文档】 mtd 分析文档 mtd 分析文档 mtd 分析文档
  • MTD算法,mtd算法流程,matlab源码
  • MTD相关

    2018-10-28 11:23:20
    使用cat /proc/mtd 命令查看MTD分区 # cat /proc/mtd dev: size erasesize name mtd0: 00040000 00020000 "bootloader" mtd1: 00020000 00020000 "params" mtd2: 00200000 00020000 "...

    使用cat /proc/mtd  命令查看MTD分区

    # cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 00040000 00020000 "bootloader"
    mtd1: 00020000 00020000 "params"
    mtd2: 00200000 00020000 "kernel"
    mtd3: 0fda0000 00020000 "root"
    

    分区需以抹除单位为界,因为flash芯片以块而非字节为单位,所以建立分区的时候必须考虑到摸出快的大小,此例中摸出快的大小为128kb因此所有分区必须以128KB(0x20000)为界

    展开全文
  • mtd-rw-MTD分区的写入启用器 在所有标记为只读的MTD分区上设置MTD_WRITEABLE标志。 卸载时,将还原只读分区。 该模块用于嵌入式设备,其中mtd分区布局可能会在固件中进行硬编码。 如果由于某种原因您必须写一个只读...
  • linux mtd

    2019-12-20 17:33:08
    目录一、参考资料二、mtd-utils 工具1.使用 `cat /proc/mtd` 命令查看QSPI FLASH的分区信息2.使用 `mtd_debug info /dev/mtd0` 命令查看FLASH类型、分区大小、块大小3.使用 `flash_eraseall /dev/mtd1` 擦除选择的...

    一、参考资料

    转载自嵌入式文件系统简介(一) — Linux MTD设备文件系统

    在嵌入式系统中,与文件系统相关的存储设备包括硬盘、Flash存储器等。Flash存储器又分为Flash芯片设备(Raw Flash device,也叫MTD设备)和带Flash控制器的设备(Flash Translation Layer device, FTL设备),两者的关键区别是是否带有Flash控制器,这也直接决定了文件系统分为不同的两类。

    在这里插入图片描述

    其中MTD设备包括NOR Flash、NAND Flash等,FTL设备包括SD、eMMC、SSD、USB大容量存储设备等。如图所示JFFS2、YAFFS2、UBIF、LogFS支持MTD设备,FAT、EXT3/4、XFS和Btrfs支持 FTL设备和硬盘(HDD)。MTD设备对应的设备文件为/dev/mtd,FTL设备对应的设备文件可为/dev/mtdblock。
    在这里插入图片描述
    在这里插入图片描述

    二、mtd-utils 工具

    mtd-utils需要预先编译进linux_rootfs中,否则没有这些命令。

    1.使用 cat /proc/mtd 命令查看QSPI FLASH的分区信息

    root@zedboard:~# cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 00500000 00010000 "boot"
    mtd1: 00020000 00010000 "bootenv"
    mtd2: 00a80000 00010000 "kernel"
    mtd3: 01060000 00010000 "spare"
    

    2.使用 mtd_debug info /dev/mtd0 命令查看FLASH类型、分区大小、块大小

    root@zedboard:~# mtd_debug info /dev/mtd0
    mtd.type = MTD_NORFLASH
    mtd.flags = MTD_CAP_NORFLASH
    mtd.size = 5242880 (5M)
    mtd.erasesize = 65536 (64K)
    mtd.writesize = 1
    mtd.oobsize = 0
    regions = 0
    

    3.使用 flash_eraseall /dev/mtd1 擦除选择的某个mtd分区。

    root@zedboard:~# flash_eraseall /dev/mtd1
    flash_eraseall has been replaced by `flash_erase <mtddev> 0 0`; please use it
    Erasing 64 Kibyte @ 10000 -- 100 % complete
    

    4.使用 flashcp -v BOOT.BIN /dev/mtd0 更新linux系统固件

    更新U-BOOT。(对于ZYNQ,打包FSBL、BIT流、U-BOOT成BOOT.BIN,放在mtd0分区)

    root@zedboard:~# flashcp -v firmware/BOOT.BIN /dev/mtd0
    Erasing blocks: 7/7 (100%)
    Writing data: 395k/0k (100%)
    Verifying data: 395k/0k (100%)
    

    更新image.ub内核。

    root@zedboard:~# flashcp -v firmware/image.ub /dev/mtd2
    Erasing blocks: 1/58 (1%)random: crng init done
    Erasing blocks: 58/58 (100%)
    Writing data: 3674k/0k (100%))
    Verifying data: 3674k/0k (100%))
    

    更新jffs2根文件系统。

    root@zedboard:~# flashcp -v firmware/rootfs.jffs2 /dev/mtd3
    Erasing blocks: 104/104 (100%)
    Writing data: 6656k/0k (100%))
    Verifying data: 6656k/0k (100%))
    

    5.使用 mtd_debug read /dev/mtd0 0x0 0x20000 读取出FLASH中的数据,确认是否刷写成功

    root@zedboard_jffs2:~# mtd_debug read /dev/mtd0 0x0 0x20000 ~/test
    Copied 131072 bytes from address 0x00000000 in flash to /home/root/test
    

    在这里插入图片描述

    展开全文
  • mtd-tools源码

    2021-03-02 20:22:14
    包含e2fsprogs-libs-1.41.14.tar.gz,lzo-2.03.tar.gz,mtd-utils-1.0.0.tar.gz,zlib-1.2.11.tar.gz 制作flash_eraseall工具时需要用到的源代码
  • MTD子系统-mtdcore.c分析

    2012-11-25 11:41:03
    MTD子系统-mtdcore.c分析
  • MTD分析

    2021-01-16 16:31:49
    概述:本文对mtd的整个结构进行了分析,分析得并非很深入,但可以了解大体框架和目录结构,另外本文会对源码文件进行分析,大致描述其作用,文中关于oob相关部分并未涉及到,针对本文的内容中,如有不恰当的地方,请...
  • 1. 介绍MTD,即Memory Technology Device,值得是内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同字符设备: 以字节为基本单位,在Linux中,字符...
  • mtd-utils-2.1.2

    2021-01-09 14:29:25
    mtd-utils 2020年6月份更新的版本
  • mtd工具源代码

    2017-03-30 10:22:05
    mtd工具源代码
  • mtd工具

    2018-04-04 17:35:00
    http://daemons.net/linux/storage/mtd.html ...The Memory Technology Devices (MTD) subsystem provides a common interface to many types ofraw flashstorage devices. It includes facilities for pa...
  • mtd分区

    千次阅读 2014-02-15 14:33:43
    mtd_part结构: /* Our partition node structure */ struct mtd_part { struct mtd_info mtd; //分区的信息 struct mtd_info *master; //主分区 uint64_t offset; //该分区的偏移地址 int index; //分区...
  • MTD驱动分析

    2012-08-06 00:00:47
    MTD驱动分析
  • mtd_utils

    2012-05-30 00:02:19
    mtd_utils
  • 原标题:嵌入式Linux驱动设备之MTD技术详解MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层...
  • 一、MTD框架 MTD设备通常可分为四层 上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。 设备框架 二、MTD分区表的实现 在开机过程从console经常可以看到类似以下信息, 0x000000000000-...
  • 参考代码 -linux linux_4.0/drivers/mtd mtd 设备类型 include/mtd/mtd-abi.h #define MTD_ABSENT 0 #define MTD_RAM 1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,819
精华内容 12,727
关键字:

MTD