linux 之 mtd and mtdblock

    MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单。

    /dev/mtdN 是MTD架构中实现的mtd分区所对应的字符设备(将mtd设备分成多个区,每个区就为一个字符设备),其里面添加了一些ioctl,支持很多命令,如MEMGETINFO,MEMERASE等。

    /dev/mtdblockN,是Flash驱动中用add_mtd_partitions()添加MTD设备分区,而生成的对应的块设备。MTD块设备驱动程序可以让flash器件伪装成块设备,实际上它通过把整块的erase block放到ram里面进行访问,然后再更新到flash,用户可以在这个块设备上创建通常的文件系统。

    实际上mtdN和mtdblockN描述的是同一个MTD分区,对应同一个硬件分区,两者的大小是一样的,只不过是MTD设备层提供给上层的视图不一样,给上层提供了字符和块设备两种操作视图——为了上层使用的便利和需要。

    mount、umount命令只对/dev/mtdblockN的MTD块设备有效
    /dev/mtdN和/dev/mtdblockN是同一个MTD设备的同一个分区(N一样)

    ls -l mtd*
        crw-rw----    1 root     root       90,   0 Jan  1 00:00 mtd0
        crw-rw----    1 root     root       90,   1 Jan  1 00:00 mtd0ro
        crw-rw----    1 root     root       90,   2 Jan  1 00:00 mtd1
        crw-rw----    1 root     root       90,   3 Jan  1 00:00 mtd1ro
        crw-rw----    1 root     root       90,   4 Jan  1 00:00 mtd2
        crw-rw----    1 root     root       90,   5 Jan  1 00:00 mtd2ro
        crw-rw----    1 root     root       90,   6 Jan  1 00:00 mtd3
        crw-rw----    1 root     root       90,   7 Jan  1 00:00 mtd3ro
        brw-rw----    1 root     root       31,   0 Jan  1 00:00 mtdblock0
        brw-rw----    1 root     root       31,   1 Jan  1 00:00 mtdblock1
        brw-rw----    1 root     root       31,   2 Jan  1 00:00 mtdblock2
        brw-rw----    1 root     root       31,   3 Jan  1 00:00 mtdblock3

    通过proc文件系统查看mtd设备的分区情况
    # cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 00200000 00020000 "boot"
    mtd1: 00200000 00020000 "upgrade"
    mtd2: 00800000 00020000 "kernel"
    mtd3: 04000000 00020000 "recovery"
    mtd4: 03400000 00020000 "rootfs"
    mtd5: 08000000 00020000 "hdsys"


    cat /proc/partitions
    major minor  #blocks  name

      31        0       2048 mtdblock0
      31        1       8192 mtdblock1
      31        2      16384 mtdblock2
      31        3     235520 mtdblock3

/*
 * mtdblock3
 */
mkdir /recovery
mount -t yaffs2 /dev/mtdblock3 /recovery

/*
 * mtd-utils
 */

        mtdinfo /dev/mtd3
            mtd3
            Name:                           recovery
            Type:                           nand
            Eraseblock size:                131072 bytes, 128.0 KiB
            Amount of eraseblocks:          512 (67108864 bytes, 64.0 MiB)
            Minimum input/output unit size: 2048 bytes
            Sub-page size:                  2048 bytes
            OOB size:                       64 bytes
            Character device major/minor:   90:6
            Bad blocks are allowed:         true
            Device is writable:             true

        ftl_check /dev/mtd3
            Memory region info:
                Region size = 64 mb  Erase block size = 128 kb


        mtd_debug info /dev/mtd2
            mtd.type = MTD_NANDFLASH
            mtd.flags = MTD_CAP_NANDFLASH
            mtd.size = 8388608 (8M)
            mtd.erasesize = 131072 (128K)
            mtd.writesize = 2048 (2K)
            mtd.oobsize = 64
            regions = 0

        mtdinfo /dev/mtd2
            mtd2
            Name:                           kernel
            Type:                           nand
            Eraseblock size:                131072 bytes, 128.0 KiB
            Amount of eraseblocks:          64 (8388608 bytes, 8.0 MiB)
            Minimum input/output unit size: 2048 bytes
            Sub-page size:                  2048 bytes
            OOB size:                       64 bytes
            Character device major/minor:   90:4
            Bad blocks are allowed:         true
            Device is writable:             true

        mtdinfo /dev/mtd4
            mtd4
            Name:                           rootfs
            Type:                           nand
            Eraseblock size:                131072 bytes, 128.0 KiB
            Amount of eraseblocks:          416 (54525952 bytes, 52.0 MiB)
            Minimum input/output unit size: 2048 bytes
            Sub-page size:                  2048 bytes
            OOB size:                       64 bytes
            Character device major/minor:   90:8
            Bad blocks are allowed:         true
            Device is writable:             true

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值