日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MTD应用学习札记

發(fā)布時間:2023/11/30 编程问答 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MTD应用学习札记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天做升級方案用到了mtd-utils中的flash_eraseallflash_cp兩個工具,在進行方案驗證的時候,遭遇到各種不解和疑惑,因?qū)?span style="line-height:normal; font-family:Helvetica">MTD的原理不熟悉,所以只能多次嘗試,雖然最后把方案搞定了,不過覺得MTD中的mtdmtdblock區(qū)別這塊還是值得總結(jié)學習一下。這里先說明一下問題現(xiàn)象,然后在進行具體的區(qū)別原理解釋。?

MTD設(shè)備(Nor Flash)使用中的問題現(xiàn)象表現(xiàn)?

  • mtd-utils工具對mtdmtdblock分區(qū)設(shè)備的區(qū)別處理?
  • / $ flash_eraseall /dev/mtdblock/2
    flash_eraseall: /dev/mtdblock/2: unable to get MTD device info
    / $ flash_eraseall /dev/mtdblock/2
    flash_eraseall: /dev/mtdblock/2: unable to get MTD device info
    / $ flash_eraseall /dev/mtd/2
    Erasing 128 Kibyte @ 8e0000 -- 98 % complete.
    / $ ls
  • / $ flashcp rootfs_version /dev/mtdblock2
    This doesn't seem to be a valid MTD flash device!
    / $ flashcp rootfs_version /dev/mtdblock/2
    This doesn't seem to be a valid MTD flash device!
    / $ flashcp rootfs_version /dev/mtd2
    / $ ls


  • mtdmtdblock分區(qū)設(shè)備mount時的區(qū)別?
  • / $ mount -t jffs2 /dev/mtd/2 qqzm/
    mount: Mounting /dev/mtd/2 on qqzm/ failed: Invalid argument
    / $ mount -t jffs2 /dev/mtd2 qqzm/
    mount: Mounting /dev/mtd2 on qqzm/ failed: Invalid argument
    / $ mount -t jffs2 /dev/mtdblock/2 qqzm/
    / $ ls

  • mtdblock掛載成功,單擦除后卸載失敗?
  • / $ flash_eraseall /dev/mtd/2 <span></span> Erasing 128 Kibyte @ 8e0000 -- 98 % complete.
    /qqzm $ mount
    /dev/root on / type jffs2 (rw,noatime)
    proc on /proc type proc (rw,nodiratime)
    sysfs on /sys type sysfs (rw)
    devfs on /dev type devfs (rw)
    devpts on /dev/pts type devpts (rw)
    /dev/mmcblk0p1 on /mnt/sd type vfat (rw,nodiratime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
    /dev/mtdblock/2 on /qqzm type jffs2 (rw,noatime)
    none on /qqzm/www/cgi-bin/tmp type ramfs (rw)
    /qqzm $ cd ..
    / $ umount /qqzm
    umount: Couldn't umount /qqzm: Inappropriate ioctl for device
    / $ umount /dev/mtdblock/2
    umount: Couldn't umount /dev/mtdblock/2: Inappropriate ioctl for device
    / $



  • 通過上面的不斷嘗試和錯誤反饋,我把方案基本驗證通過了,只是對其中的原理不清楚:?

    • 為什么mtdmtdblock明明是同一個設(shè)備分區(qū)卻有不同的操作??
    • mount命令只能掛載塊設(shè)備嗎??
    • 卸載mtdblock設(shè)備時,Inappropriate ioctl for device是什么意思??
    • unable to get MTD device info,又是什么意思??

    MTD技術(shù)的基本原理?

    MTD(memory technology device內(nèi)存技術(shù)設(shè)備)是用于訪問memory設(shè)備(ROMflash)的Linux的子系統(tǒng)。MTD的主要目的是為了使新的memory設(shè)備的驅(qū)動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口,并進行了一個層次劃分,層次從上到下大致為:設(shè)備文件、MTD設(shè)備層、MTD原始設(shè)備層、硬件驅(qū)動層。MTD的所有源代碼在/drivers/mtd子目錄下。?

    系統(tǒng)中的MTD設(shè)備文件?

    ~ $ ls /dev/mtd* -l

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 0 Jan? 1 00:00 /dev/mtd0

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 1 Jan? 1 00:00 /dev/mtd0ro

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 2 Jan? 1 00:00 /dev/mtd1

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 3 Jan? 1 00:00 /dev/mtd1ro

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 4 Jan? 1 00:00 /dev/mtd2

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 5 Jan? 1 00:00 /dev/mtd2ro

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 6 Jan? 1 00:00 /dev/mtd3

    crw-rw----? ? 1 root ? ? root? ? ? 90, ? 7 Jan? 1 00:00 /dev/mtd3ro

    brw-rw----? ? 1 root ? ? root? ? ? 31, ? 0 Jan? 1 00:00 /dev/mtdblock0

    brw-rw----? ? 1 root ? ? root? ? ? 31, ? 1 Jan? 1 00:00 /dev/mtdblock1

    brw-rw----? ? 1 root ? ? root? ? ? 31, ? 2 Jan? 1 00:00 /dev/mtdblock2

    brw-rw----? ? 1 root ? ? root? ? ? 31, ? 3 Jan? 1 00:00 /dev/mtdblock3

    ?

    /dev/mtd:

    crw-rw-rw-? ? 1 root ? ? root? ? ? 90, ? 0 Jan? 1 00:00 0

    cr--r--r--? ? 1 root ? ? root? ? ? 90, ? 1 Jan? 1 00:00 0ro

    crw-rw-rw-? ? 1 root ? ? root? ? ? 90, ? 2 Jan? 1 00:00 1

    cr--r--r--? ? 1 root ? ? root? ? ? 90, ? 3 Jan? 1 00:00 1ro

    crw-rw-rw-? ? 1 root ? ? root? ? ? 90, ? 4 Jan? 1 00:00 2

    cr--r--r--? ? 1 root ? ? root? ? ? 90, ? 5 Jan? 1 00:00 2ro

    crw-rw-rw-? ? 1 root ? ? root? ? ? 90, ? 6 Jan? 1 00:00 3

    cr--r--r--? ? 1 root ? ? root? ? ? 90, ? 7 Jan? 1 00:00 3ro

    ?

    /dev/mtdblock:

    brw-------? ? 1 root ? ? root? ? ? 31, ? 0 Jan? 1 00:00 0

    brw-------? ? 1 root ? ? root? ? ? 31, ? 1 Jan? 1 00:00 1

    brw-------? ? 1 root ? ? root? ? ? 31, ? 2 Jan? 1 00:00 2

    brw-------? ? 1 root ? ? root? ? ? 31, ? 3 Jan? 1 00:00 3

    ~ $

    可以看到有mtdN和對應(yīng)的/dev/mtd/NmtdblockN和對應(yīng)的/dev/mtdblock/N兩類MTD設(shè)備,分別是字符設(shè)備,主設(shè)備號90和塊設(shè)備,主設(shè)備號31。其中/dev/mtd0/dev/mtd/0是完全等價的,/dev/mtdblock0/dev/mtdblock/0是完全等價的,而/dev/mtd0/dev/mtdblock0則是同一個MTD分區(qū)的兩種不同應(yīng)用描述,操作上是有區(qū)別的。?

    /dev/mtdN設(shè)備?

    /dev/mtdN MTD架構(gòu)中實現(xiàn)的mtd分區(qū)所對應(yīng)的字符設(shè)備(mtd設(shè)備分成多個區(qū),每個區(qū)就為一個字符設(shè)備),其里面添加了一些ioctl,支持很多命令,如MEMGETINFOMEMERASE等。?

    mtd-utils中的flash_eraseall等工具,就是以這些ioctl為基礎(chǔ)而實現(xiàn)的工具,實現(xiàn)一些關(guān)于Flash的操作。比如,mtd 工具中 flash_eraseall中:?

    if (ioctl(fd, MEMGETINFO, &meminfo) != 0)?

    {

    ?? fprintf(stderr, "%s: %s: unable to get MTD device info\n",exe_name, mtd_device);

    ?? return 1;

    }

    MEMGETINFOLinux MTD中的drivers/mtd/mtdchar.c中的ioctl命令,使用mtd字符設(shè)備需要加載mtdchar內(nèi)核模塊。該代碼解釋了上面的第一個現(xiàn)象。?

    /dev/mtdblockN設(shè)備?

    /dev/mtdblockN,是Flash驅(qū)動中用add_mtd_partitions()添加MTD設(shè)備分區(qū),而生成的對應(yīng)的塊設(shè)備。MTD塊設(shè)備驅(qū)動程序可以讓flash器件偽裝成塊設(shè)備,實際上它通過把整塊的erase block放到ram里面進行訪問,然后再更新到flash,用戶可以在這個塊設(shè)備上創(chuàng)建通常的文件系統(tǒng)。?

    而對于MTD塊設(shè)備,MTD設(shè)備層是不提供ioctl的實現(xiàn)方法的,也就不會有對應(yīng)的MEMGETINFO命令之類,因此不能使用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockN去進行操作,否則就會出現(xiàn)上面的現(xiàn)象一,同時也解釋了現(xiàn)象3——mtd2擦除分區(qū)后,在用mtdblock2進行umount就會造成混亂。?

    mtd塊設(shè)備的大小可以通過proc文件系統(tǒng)進行查看:?

    ~ $ cat /proc/partitions

    major minor? #blocks? name

    ?

    ? 31 ? ? 0? ? ? ? 512 mtdblock0

    ? 31 ? ? 1 ? ? ? 1024 mtdblock1

    ? 31 ? ? 2 ? ? ? 5632 mtdblock2

    ? 31 ? ? 3 ? ? ? 9216 mtdblock3

    ?254 ? ? 0 ? 30760960 mmcblk0 ? ?

    ?254 ? ? 1 ? 30756864 mmcblk0p1

    ~ $

    后面的兩個是SD塊設(shè)備的分區(qū)大小。每個block的大小是1KB?

    MTD設(shè)備分區(qū)和總結(jié)

    通過proc文件系統(tǒng)查看mtd設(shè)備的分區(qū)情況:?


    ~ $ cat /proc/mtd

    dev:? ? size ? erasesize? name

    mtd0: 00080000 00020000 "boot"

    mtd1: 00100000 00020000 "kernel"

    mtd2: 00580000 00020000 "roofs70"

    mtd3: 00900000 00020000 "app"

    ~ $

    可以發(fā)現(xiàn),實際上mtdNmtdblockN描述的是同一個MTD分區(qū),對應(yīng)同一個硬件分區(qū),兩者的大小是一樣的,只不過是MTD設(shè)備層提供給上層的視圖不一樣,給上層提供了字符和塊設(shè)備兩種操作視圖——為了上層使用的便利和需要,比如mount命令的需求,你只能掛載塊設(shè)備(有文件系統(tǒng)),而不能對字符設(shè)備進行掛載,否則會出現(xiàn)上面的現(xiàn)象2:無效參數(shù)。?

    這里對于mtdmtdblock設(shè)備的使用場景進行簡單總結(jié):?

  • mtd-utils工具只能應(yīng)用與/dev/mtdNMTD字符設(shè)備?
  • mountumount命令只對/dev/mtdblockNMTD塊設(shè)備有效?
  • /dev/mtdN/dev/mtdblockN是同一個MTD設(shè)備的同一個分區(qū)(N一樣)







  • Linux系統(tǒng)中/dev/mtd/dev/mtdblock的區(qū)別



    MTD(memory technology device內(nèi)存技術(shù)設(shè)備)是用于訪問memory設(shè)備(ROMflash)的Linux的子系統(tǒng)。MTD的主要目的是為了使新的memory設(shè)備的驅(qū) 動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。我將CFI接口的MTD設(shè)備分為四層 (從設(shè)備節(jié)點直到底層硬件驅(qū)動),這四層從上到下依次是:設(shè)備節(jié)點、MTD設(shè)備層、MTD原始設(shè)備層和硬件驅(qū)動層。
    MTD
    字符驅(qū)動程序允許直接訪問flash器件通常用來在flash上創(chuàng)建文件系統(tǒng),也可以用來直接訪問不頻繁修改的數(shù)據(jù)。
    MTD
    塊設(shè)備驅(qū)動程序可以讓flash器件偽裝成塊設(shè)備,實際上它通過把整塊的erase block放到ram里面進行訪問,然后再更新到flash,用戶可以在這個塊設(shè)備上創(chuàng)建通常的文件系統(tǒng)。

    ?

    1. /dev/mtdN Linux 中的MTD架構(gòu)中,系統(tǒng)自己實現(xiàn)的mtd分區(qū)所對應(yīng)的字符設(shè)備(mtd設(shè)備分成多個區(qū),每個區(qū)就為一個字符設(shè)備),其里面添加了一些ioctl,支持很多命令,如MEMGETINFOMEMERASE等。

    mtd-util中的flash_eraseall等工具,就是以這些ioctl為基礎(chǔ)而實現(xiàn)的工具實現(xiàn)一些關(guān)于Flash的操作。比如,mtd 工具中的 flash_eraseall中的:

    if (ioctl(fd, MEMGETINFO, &meminfo) != 0) {
    ?? fprintf(stderr, "%s: %s: unable to get MTD device info\n", exe_name, mtd_device);
    ?? return 1;
    }

    其中,MEMGETINFO,就是Linux MTD中的drivers/mtd/mtdchar.c中的:

    static int mtd_ioctl(struct inode *inode, struct file *file,
    ?? ? ? u_int cmd, u_long arg)
    {

    。。。。。

    case MEMGETINFO:
    ?? info.type = mtd->type;
    ?? info.flags = mtd->flags;
    ?? info.size = mtd->size;
    ?? info.erasesize = mtd->erasesize;
    ?? info.writesize = mtd->writesize;
    ?? info.oobsize = mtd->oobsize;
    ?? /* The below fields are obsolete */
    ?? info.ecctype = -1;
    ?? info.eccsize = 0;
    ?? if (copy_to_user(argp, &info, sizeof(struct mtd_info_user)))
    ? ? return -EFAULT;
    ?? break;

    。。。

    }

    /dev/mtdblockN,是Nand Flash驅(qū)動中,驅(qū)動用add_mtd_partitions()添加MTD設(shè)備分區(qū)(其實就是將mtd設(shè)備進行不同的分區(qū),當mtd設(shè)備還是一樣的,所以mtdblock分區(qū)與mtd分區(qū)肯定是對應(yīng)的),而生成的對應(yīng)的塊設(shè)備

    根據(jù)以上內(nèi)容,也就更加明白,為什么不能用nandwrite,flash_eraseall,flash_erase等工具去對/dev/mtdblockN去操作了。因為/dev/mtdblock中不包含對應(yīng)的ioctl,也就沒有定義對應(yīng)的命令,不支持你這么操作。

    2. mtd char 設(shè)備的主設(shè)備號是90,而mtd block設(shè)備的主設(shè)備號是31

    # ls /dev/mtd* -l
    crw-r-----? ? 1 root ? ? root? ? ? 90, ? 0 May 30 2007 /dev/mtd0
    crw-r-----? ? 1 root ? ? root? ? ? 90, ? 2 May 30 2007 /dev/mtd1
    crw-r-----? ? 1 root ? ? root? ? ? 90, ? 4 Jul 17 2009 /dev/mtd2
    crw-r-----? ? 1 root ? ? root? ? ? 90, ? 6 May 30 2007 /dev/mtd3
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, ? 8 May 30 2007 /dev/mtd4
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, 10 May 30 2007 /dev/mtd5
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, 12 May 30 2007 /dev/mtd6
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, 14 May 30 2007 /dev/mtd7
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, 16 May 30 2007 /dev/mtd8
    crwxrwxrwx? ? 1 root ? ? root? ? ? 90, 18 May 30 2007 /dev/mtd9
    # ls /dev/mtdblock* -l
    brw-r-----? ? 1 root ? ? root? ? ? 31, ? 0 May 30 2007 /dev/mtdblock0
    brw-r-----? ? 1 root ? ? root? ? ? 31, ? 1 May 30 2007 /dev/mtdblock1
    brw-r-----? ? 1 root ? ? root? ? ? 31, ? 2 May 30 2007 /dev/mtdblock2
    brw-r-----? ? 1 root ? ? root? ? ? 31, ? 3 May 30 2007 /dev/mtdblock3
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 4 May 30 2007 /dev/mtdblock4
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 5 May 30 2007 /dev/mtdblock5
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 6 May 30 2007 /dev/mtdblock6
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 7 May 30 2007 /dev/mtdblock7
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 8 May 30 2007 /dev/mtdblock8
    brwxrwxrwx? ? 1 root ? ? root? ? ? 31, ? 9 May 30 2007 /dev/mtdblock9

    此設(shè)備號,定義在/include/linux/mtd/mtd.h

    #define MTD_CHAR_MAJOR ? 90
    #define MTD_BLOCK_MAJOR 31

    3. 其中,mtd的塊設(shè)備的大小,可以通過查看分區(qū)信息獲得:

    # cat /proc/partitions
    major minor #blocks name

    31 ? ? 0 ? ? ? 1024 mtdblock0
    31 ? ? 1 ? ? ? 8192 mtdblock1
    31 ? ? 2 ? ? 204800 mtdblock2
    31 ? ? 3? ? ? 65536 mtdblock3
    31 ? ? 4 ? ? 225280 mtdblock4

    上面中顯示的塊設(shè)備大小,是block的數(shù)目,每個block1KB

    而每個字符設(shè)備,其實就是對應(yīng)著上面的每個塊設(shè)備。即/dev/mtd0對應(yīng)/dev/mtdblock0,其他以此類推。換句話說,mtdblockN的一些屬性,也就是mtdN的屬性,比如大小。

    4。對每個mtd字符設(shè)備的操作,比如利用nandwrite去對/dev/mtd0寫數(shù)據(jù),實際就是操作/dev/mtdblock0

    而這些操作里面涉及到的偏移量offset,都指的是此mtd 分區(qū)內(nèi)的偏移。比如向/dev/mtd1offset0的位置寫入數(shù)據(jù),實際操作的是物理偏移offset=/dev/mtd0的大小=1MB=0x100000

    5.mtd的字符設(shè)備和塊設(shè)備的命名規(guī)則,可以參考下表:

    Table 7-1. MTD /dev entries, corresponding MTD user modules, and relevant device major numbers

    /dev entry Accessible MTD user module Device type Major number

    mtdN char device char 90

    mtdrN char device char 90

    mtdblockN block device, read-only block device, JFFS, and JFFS2 block 31

    nftlLN NFTL block 93

    ftlLN FTL block 44

    Table 7-2. MTD /dev entries, minor numbers, and naming schemes

    /dev entry Minor number range Naming scheme

    mtdN 0 to 32 per increments of 2 N = minor / 2

    mtdrN 1 to 33 per increments of 2 N = (minor - 1) / 2

    mtdblockN 0 to 16 per increments of 1 N = minor

    nftlLN 0 to 255 per sets of 16 L = set;[2] N = minor - (set - 1) x 16; N is not appended to entry name if its value is zero.

    ftlLN 0 to 255 per sets of 16 Same as NFTL.

    The Linux MTD,YAFFS Howto上面這樣寫道:
    Erase the mtdblock0
    />eraseall /dev/mtd0
    Create the mount directory and mount
    />mkdir -p /mnt/flash0
    />mount -t yaffs /dev/mtdblock0 /mnt/flash0
    為什么eraseallmtd0操作?而不對mtdblock0操作?nand不是塊設(shè)備嘛,mtdblock就是塊設(shè)備呀。mtd0,mtd1mtdblock0,mtdblock1是不是一一對應(yīng)的?







    mtd-utils 工具的使用?

    .下載源碼包。

    .編譯

    1.修改Makefile ?

    CROSS=mipsel-linux-

    2.make

    3.將編譯生成的可執(zhí)行文件COPY到開發(fā)板上


    .命令的使用

    使用命令前用cat /proc/mtd 查看一下mtdchar字符設(shè)備;或者用ls -l /dev/mtd*

    #cat /proc/mtd

    dev:? ? size ? erasesize? name

    mtd0: 00c00000 00020000 &quot;ROOTFS&quot;

    mtd1: 00200000 00020000 &quot;BOOTLOADER&quot;

    mtd2: 00200000 00020000 &quot;KERNEL&quot;

    mtd3: 03200000 00020000 &quot;NAND ROOTFS partition&quot;

    mtd4: 04b00000 00020000 &quot;NAND DATAFS partition&quot;

    為了更詳細了解分區(qū)信息用mtd_debug命令

    #mtd_debug info /dev/mtdX (不能使用mtdblockX, mtdblockX 只是提供用來 mount 而已)

    mtd.type = MTD_NORFLASH

    mtd.flags =?

    mtd.size = 12582912 (12M)

    mtd.erasesize = 131072 (128K)

    mtd.oobblock = 1?

    mtd.oobsize = 0?

    mtd.ecctype = (unknown ECC type - new MTD API maybe?)

    regions = 0



    命令:flash_erase

    作用:擦出指定范圍內(nèi)flash的內(nèi)容,如果不指定,默認擦出起始位置的第一塊,使相應(yīng)flash變?yōu)槿?span style="line-height:normal; font-family:Helvetica">1

    用法:

    flash_erase MTD-device [start] [cnt (# erase blocks)] [lock]

    MTDdevice:待擦出的分區(qū),如/dev/mtd0

    start:起始位置設(shè)置,這里必須設(shè)置為0x20000(128K)的整數(shù)倍

    cnt: start開始計算,要擦出的塊數(shù)

    lock: 寫保護? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    eg:? ./flash_erase /dev/mtd0 0x40000 5 ? //擦出mtd0分區(qū)上從0x40000開始的5塊數(shù)據(jù) 128K/


    命令:flash_eraseall

    作用:擦出整個分區(qū)的數(shù)據(jù),同時也會作壞塊檢測

    用法:

    flash_eraseall [OPTION] MTD_DEVICE

    -q, --quiet? ? 不顯示打印信息

    -j, --jffs2? ? jffs2 格式化分區(qū)

    eg: ./flash_eraseall -j /dev/mtd0?


    命令:flashcp

    作用:copy 數(shù)據(jù)到 flash

    用法:

    usage: flashcp [ -v | --verbose ] &lt;filename&gt; &lt;device&gt;

    ?? ? ? flashcp -h | --help

    filename:待寫入的數(shù)據(jù)

    device: 寫入的分區(qū),如/dev/mtd0

    eg: ?

    filename制作:mkfs.jffs2 -e 0x20000 -d cq8401 -o cq8401.img? -n? //這里的-e 0x20000 必須更你芯片的erasesize 相等


    ./flashcp cq8401.img /dev/mtd0? // copy cq8401.img文件系統(tǒng)到? /dev/mtd0分區(qū)中

    當然這個命令的功能跟 dd if=/tmp/fs.img of=/dev/mtd0差不多


    命令:nandwrite

    作用:向nand flash中寫數(shù)據(jù)

    用法:

    nandwrite [OPTION] MTD_DEVICE INPUTFILE

    ? -a, --autoplace ? ? ? Use auto oob layout

    ? -j, --jffs2 ? ? ? ? ? force jffs2 oob layout (legacy support)

    ? -y, --yaffs ? ? ? ? ? force yaffs oob layout (legacy support)

    ? -f, --forcelegacy ? ? force legacy support on autoplacement enabled mtd device

    ? -n, --noecc ? ? ? ? ? write without ecc

    ? -o, --oob ? ? ? ? ? ? image contains oob data

    ? -s addr, --start=addr set start address (default is 0)

    ? -p, --pad ? ? ? ? ? ? pad to page size

    ? -b, --blockalign=1|2|4 set multiple of eraseblocks to align to

    ? -q, --quiet ? ? ? ? ? don't display progress messages

    ? ? ? --help? ? ? ? ? ? display this help and exit

    ? ? ? --version ? ? ? ? output version information and exit

    ?? ?

    eg: ./nandwrite -p /dev/mtd0? /tmp/rootfs.jffs2


    命令:nanddump

    作用:dumpnand flash一些信息,如:block size,erasesize,oobblock 大小,oob data ,page data等;同時也會作壞塊檢測

    用法:

    nanddump [OPTIONS] MTD-device

    ?? ? ? ? ? --help ? ? ? ? ? ? ? display this help and exit

    ?? ? ? ? ? --version? ? ? ? ? ? output version information and exit

    -f file? ? --file=file? ? ? ? ? dump to file

    -i ? ? ? ? --ignoreerrors ? ? ? ignore errors

    -l length? --length=length? ? ? length

    -o ? ? ? ? --omitoob? ? ? ? ? ? omit oob data

    -b ? ? ? ? --omitbad? ? ? ? ? ? omit bad blocks from the dump

    -p ? ? ? ? --prettyprint? ? ? ? print nice (hexdump)

    -s addr? ? --startaddress=addr? start address

    eg:./nanddump -p -f nandinfo.txt /dev/mtd0? //dumpnand flash /dev/mtd0數(shù)據(jù)并保存到 nandinfo.txt?


    命令:mtd_debug

    作用: mtd 調(diào)試作用

    用法:

    usage: mtd_debug info &lt;device&gt;

    ?? ? ? mtd_debug read &lt;device&gt; &lt;offset&gt; &lt;len&gt; &lt;dest-filename&gt;

    ?? ? ? mtd_debug write &lt;device&gt; &lt;offset&gt; &lt;len&gt; &lt;source-filename&gt;

    ?? ? ? mtd_debug erase &lt;device&gt; &lt;offset&gt; &lt;len&gt;

    eg:

    #./mtd_debug info /dev/mtd0? // 輸出/dev/mtd0上的一些信息,這里必須用mtdx

    #./mtd_debug erase /dev/mtd0 0x0 0x40000? // 擦出/dev/mtd0 分區(qū)上 0x0開始的? 128K2 大小的數(shù)據(jù)

    #./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //mtdblock0分區(qū),寫入 3.6M 大小的文件系統(tǒng)cq8401.img,這里最好用mtdblockx

    #./mtd_debug read? /dev/mtdblock0 ox0 0x360810 read.img? //mtdblock0中讀出 3.6M 數(shù)據(jù)保存到read.img

    # cmp -l cq8401.img read.img? // 驗證write to flash read from flash 中的數(shù)據(jù)是否一致;也可以使用diff命令來比較

    另外針對nand flash,mtd_debug這個工具來測試mtd驅(qū)動也不是很好,用nandwritenanddump這兩個工具或許更好點。然后可以用cmp這個命令來比較一下nanddump出來的數(shù)據(jù)和nandwrite寫入的數(shù)據(jù)是否一致。


    命令:ftl_format

    解釋:In order to use one of conventional file systems Ext2, ext3, XFS, JFS, FAT over an MTD device, you need a software layer which emulates a block device over the MTD device. These layers are often called Flash Translation Layers (FTLs).


    例一:如何測試nor flash 驅(qū)動

    step1:

    #./mtd_debug info /dev/mtd0? // 輸出/dev/mtd0上的一些信息,這里必須用mtdx

    step2:

    #./mtd_debug erase /dev/mtd0 0x0 0x40000? // 擦出/dev/mtd0 分區(qū)上 0x0開始的? 128K2 大小的數(shù)據(jù)

    step3:

    #./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //mtdblock0分區(qū),寫入 3.6M 大小的文件系統(tǒng)cq8401.img,這里最好用mtdblockx

    step4:

    #./mtd_debug read? /dev/mtdblock0 ox0 0x360810 read.img? //mtdblock0中讀出 3.6M 數(shù)據(jù)保存到read.img,當然這里的長度應(yīng)該相等

    step5:

    # cmp -l cq8401.img read.img? // 驗證write to flash read from flash 中的數(shù)據(jù)是否一致;也可以使用diff命令來比較



    例二:如何測試nand flash 驅(qū)動

    其實nand flash 驅(qū)動同樣可以用例一的方法測試,但既然有nandwrite,nanddump命令,為何不用呢!


    step1:

    #./flash_eraseall -j /dev/mtd1? ? ? ? //jffs2格式化該分區(qū)

    step2:

    #./nanddump -p? /dev/mtd1? //dumpnand flash /dev/mtd1數(shù)據(jù),可以看到現(xiàn)在的數(shù)據(jù)全是ff

    step3:

    #./nandwrite -p ? /dev/mtd1 cq8401.img? // cq8401.img文件系統(tǒng)寫入mtd0分區(qū)

    step4:

    #./nanddump -p? /dev/mtd1? //dumpnand flash /dev/mtd1數(shù)據(jù),可以看到現(xiàn)在的數(shù)據(jù)不再是全ff


    例三:如何用mtd-util 工具向nand flash寫入文件系統(tǒng)jffs2.img,并修改啟動參數(shù),使文件系統(tǒng)從nand flash 啟動;假設(shè)已分好區(qū),mtd0為文件系統(tǒng)分區(qū)

    方式一:

    step1:

    NFS起文件系統(tǒng)

    #./flash_eraseall -j /dev/mtd0? ? ? ? //jffs2格式化該分區(qū)

    #./nandwrite -j -f -p -q /dev/mtd0 jffs2.img? // jffs2.img文件系統(tǒng)寫入mtd0分區(qū)

    step2:

    然后再看看我們新寫入的JFFS2文件系統(tǒng)能不能mount.

    #mount -t jffs2 /dev/mtdblock0 /mnt

    #ls /mnt

    setp3:

    重啟開發(fā)板,在UBOOT 設(shè)置啟動參數(shù)

    #setenv bootargs 'mem=64M console=ttyS0,115200n8 ip=192.168.4.201:::::eth0:off? root=/dev/mtdblock0 rootfstype=jffs2 rw'

    #reset


    方式二:


    NAND 起內(nèi)核,NAND起文件系統(tǒng)

    1. 網(wǎng)起文件系統(tǒng)

    nerase 0 55 &amp;&amp; nprog 0 192.168.4.200 n-boot.bin.hg &amp;&amp; nprog 128 192.168.4.200 zImage-6pci &amp;&amp; reset

    2.進入網(wǎng)起的文件系統(tǒng)

    cat /proc/mtd

    3. 制作JIFFS的文件系統(tǒng)

    mkfs.jffs2 -e 0x20000 -d root-vw -o dvr20000.img? -n

    4.

    cp dvr20000.img /dev/mtdblock1

    5.修改NAND BOOT啟動參數(shù) include/cq8401_board.h

    修改NAND BOOT

    setenv bootargs 'mem=64M console=ttyS0,115200n8 ip=192.168.4.201:::::eth0:off? root=/dev/mtdblock1 rootfstype=jffs2 rw'

    6.? 從新燒寫

    nerase 0 55 &amp;&amp; nprog 0 192.168.4.200 n-boot.bin.local &amp;&amp; nprog 128 192.168.4.200 zImage-6pci &amp;&amp; reset

    例四:

    如何將一個 .tar.gz文件系統(tǒng)? 寫到 nor 或者 nand flash

    ?? target$ mkdir /mnt/flash? ? ?

    ?? target$ mount -t jffs2 /dev/mtdblock0 /mnt/flash? (mtdblockx只是用來掛載的)

    ?? target$ cd /mnt/flash

    ?? target$ tar zxvf rootfs.tar.gz






    mtd命令及制作ubi鏡像做根文件系統(tǒng)?

    2013-09-25 17:22 2315人閱讀 評論(0) 收藏 舉報

    linux2.6.28后才加入對ubifs的支持


    1 查看nand分區(qū)


    root@ubuntu:~# cat /proc/mtd

    dev:? ? size ? erasesize? name

    mtd0: 00020000 00020000 "U-Boot-min"

    mtd1: 00240000 00020000 "U-Boot"

    mtd2: 00020000 00020000 "U-Boot Env"

    mtd3: 00440000 00020000 "Kernel"

    mtd4: 1f400000 00020000 "File System"

    mtd5: 00540000 00020000 "Reserved"


    root@ubuntu:~# cat /proc/partitions?

    major minor? #blocks? name


    ? 31? ? ? ? 0? ? ? ? 128 mtdblock0

    ? 31? ? ? ? 1 ? ? ? 2304 mtdblock1

    ? 31? ? ? ? 2? ? ? ? 128 mtdblock2

    ? 31? ? ? ? 3 ? ? ? 4352 mtdblock3

    ? 31? ? ? ? 4 ? ? 512000 mtdblock4

    ? 31? ? ? ? 5 ? ? ? 5376 mtdblock5

    root@ubuntu:~#?


    2、查看mtd4的信息?

    root@ubuntu:~# mtdinfo -m 4 -u

    mtd4

    Name: ? ? ? ? ? ? ? ? ? ? ? ? ? File System

    Type: ? ? ? ? ? ? ? ? ? ? ? ? ? nand

    Eraseblock size:? ? ? ? ? ? ? ? 131072 bytes, 128.0 KiB

    Amount of eraseblocks:? ? ? ? ? 4000 (524288000 bytes, 500.0 MiB)

    Minimum input/output unit size: 2048 bytes

    Sub-page size:? ? ? ? ? ? ? ? ? 512 bytes

    OOB size: ? ? ? ? ? ? ? ? ? ? ? 64 bytes

    Character device major/minor: ? 90:8

    Bad blocks are allowed: ? ? ? ? true

    Device is writable: ? ? ? ? ? ? true

    Default UBI VID header offset:? 512

    Default UBI data offset:? ? ? ? 2048

    Default UBI LEB size: ? ? ? ? ? 129024 bytes, 126.0 KiB

    Maximum UBI volumes count:? ? ? 128


    root@ubuntu:~# mtdinfo -m 2 -u?

    root@ubuntu:~# mtdinfo /dev/mtd4

    mtd2

    Name: ? ? ? ? ? ? ? ? ? ? ? ? ? U-Boot Env

    Type: ? ? ? ? ? ? ? ? ? ? ? ? ? nand

    Eraseblock size:? ? ? ? ? ? ? ? 131072 bytes, 128.0 KiB? ? // FLASH物理擦除塊大小

    Amount of eraseblocks:? ? ? ? ? 1 (131072 bytes, 128.0 KiB)

    Minimum input/output unit size: 2048 bytes? ? 1nor flash:通常是1個字節(jié)? 2nand falsh:一個頁面?

    Sub-page size:? ? ? ? ? ? ? ? ? 512 bytes? //對于nand flash來說,子頁大小?

    OOB size: ? ? ? ? ? ? ? ? ? ? ? 64 bytes

    Character device major/minor: ? 90:4

    Bad blocks are allowed: ? ? ? ? true

    Device is writable: ? ? ? ? ? ? true

    Default UBI VID header offset:? 512

    Default UBI data offset:? ? ? ? 2048

    Default UBI LEB size: ? ? ? ? ? 129024 bytes, 126.0 KiB? //邏輯擦除塊大小

    Maximum UBI volumes count:? ? ? 128


    mtd4大小為500MiB,擦除單元大小(一般即為塊大小)128KiB,名字是"NAND simulator partition 0" NandFlash


    擦除是以塊(block)為單位,讀寫是以頁(page)為單位。


    3 root@ubuntu:~# ls -lah /dev/mtd*

    crw------- 1 root root 90,? 0 Jan? 1 00:00 /dev/mtd0 //字符設(shè)備

    crw------- 1 root root 90,? 1 Jan? 1 00:00 /dev/mtd0ro

    crw------- 1 root root 90,? 2 Jan? 1 00:00 /dev/mtd1

    crw------- 1 root root 90,? 3 Jan? 1 00:00 /dev/mtd1ro

    crw------- 1 root root 90,? 4 Jan? 1 00:00 /dev/mtd2

    crw------- 1 root root 90,? 5 Jan? 1 00:00 /dev/mtd2ro

    crw------- 1 root root 90,? 6 Jan? 1 00:00 /dev/mtd3

    crw------- 1 root root 90,? 7 Jan? 1 00:00 /dev/mtd3ro

    crw------- 1 root root 90,? 8 Jan? 1 00:00 /dev/mtd4

    crw------- 1 root root 90,? 9 Jan? 1 00:00 /dev/mtd4ro

    crw------- 1 root root 90, 10 Jan? 1 00:00 /dev/mtd5

    crw------- 1 root root 90, 11 Jan? 1 00:00 /dev/mtd5ro

    brw-rw---- 1 root disk 31,? 0 Jan? 1 00:00 /dev/mtdblock0? //塊設(shè)備,與mtd0對應(yīng)

    brw-rw---- 1 root disk 31,? 1 Jan? 1 00:00 /dev/mtdblock1

    brw-rw---- 1 root disk 31,? 2 Jan? 1 00:00 /dev/mtdblock2

    brw-rw---- 1 root disk 31,? 3 Jan? 1 00:00 /dev/mtdblock3

    brw-rw---- 1 root disk 31,? 4 Jan? 1 00:00 /dev/mtdblock4

    brw-rw---- 1 root disk 31,? 5 Jan? 1 00:00 /dev/mtdblock5

    root@ubuntu:~#?



    4.?

    關(guān)于mtd工具集的安裝

    ? ? sudo apt-get install mtd-utils

    UBI文件系統(tǒng)鏡像文件的制作

    @ubuntu:~$ sudo mkfs.ubifs -r targetfs -m 2048 -e 129024 -c 3900 -o ubifs.img

    @ubuntu:~$ sudo ubinize -o ubi.img -m 2048 -p 128KiB -s 512 ubinize.cfg


    關(guān)于mkfs.ubifs參數(shù)的算法

    ? -m minimum I/O unit size

    ? -e, --leb-size=SIZE? ? ? logical erase block size

    ? -c maximum logical erase block count

    ? -x compression type - "lzo", "favor_lzo", "zlib" or "none" (default: "lzo")

    ? -p size of the physical eraseblock of the flash this UBI image is created for in bytes


    wear_level_reserved_blocks is 1% of total blcoks per device

    *logical_erase_block_size* is physical erase block size minus 2 pages for UBI

    Block size = page_size * pages_per_block

    physical blocks on a partition = partition size / block size

    Logical blocks on a partition = physical blocks on a partitiion - reserved for wear level

    File-system volume = Logical blocks in a partition * Logical erase block size


    關(guān)于參數(shù)可以參考attach的命令輸出:


    root@ubuntu:~# ubiattach? /dev/ubi_ctrl -m 4 -d 0

    UBI device number 0, total 4000 LEBs (516096000 bytes, 492.2 MiB), available 0 LEBs (0 bytes), LEB


    size 129024 bytes (126.0 KiB)

    root@ubuntu:~#?


    ubinize.cfg文件


    [ubifs]

    mode=ubi

    image=ubifs.img

    vol_id=0

    vol_size=450MiB

    vol_type=dynamic

    vol_alignment=1

    vol_name=rootfs

    vol_flags=autoresize



    5. UBI文件系統(tǒng)鏡像在Linux下的燒寫

    flash_eraseall /dev/mtd4

    ubiformat /dev/mtd4 -s 512 -f /xxx/ubi.img


    6 UBI文件系統(tǒng)鏡像在U-BOOT下的燒寫

    //load ubi image to RAM

    tftp ubi.img

    //erase MTD4 nand space

    nand erase 0x6c0000 0xc820000

    //write image to nand

    nand write.i 0x81000000 0x6c0000 0xxxxx(image size)


    7. UBI文件系統(tǒng)鏡像在Linux下的掛載和卸載


    掛載

    ubiattach /dev/ubi_ctrl -m 4 -d 0

    mount -t ubifs ubi0_0 /mnt/ubi



    卸載

    umount /mnt/ubi

    ubidetach -d 0


    8、使用ubi做根文件系統(tǒng)

    需要在bootargs中設(shè)置如下信息:

    ? root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs


    ?配置linux內(nèi)核
    ?? ? ? ? ? 配置的時候選上
    ? ? ? ? ? 1)Device Drivers? --->Memory Technology Device (MTD) support? --->UBI - Unsorted block images? --->Enable UBI
    ? ? ? ? ? 2)File systems? --->Miscellaneous filesystems? --->UBIFS file system support
    ? ? ? ? ? 這樣我們的內(nèi)核就支持UBIFS文件系統(tǒng)了



    總結(jié)

    以上是生活随笔為你收集整理的MTD应用学习札记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    www.日本色 | 国产不卡片 | 少妇视频一区 | 亚洲一级黄色 | 91香蕉视频在线下载 | 日韩色区 | 欧美日韩免费在线观看视频 | 久久免费在线观看视频 | 成人黄色片在线播放 | 国产高清视频免费观看 | 最新国产精品久久精品 | 国产二区视频在线观看 | 国产精品久久久久久久久软件 | 狠狠狠色丁香婷婷综合久久五月 | 国产玖玖视频 | 欧美激情精品久久久久久免费 | 婷婷丁香激情网 | av片在线观看免费 | 国产精品入口传媒 | 国产精品综合久久久久 | 丰满少妇在线观看网站 | 免费观看的黄色片 | 久久免费视频在线观看6 | 五月婷婷毛片 | 久久深夜 | 99r在线| 一区二区三区在线观看 | 国产一区二区三精品久久久无广告 | 一区二区不卡 | 波多野结衣在线观看一区二区三区 | 色婷婷亚洲精品 | 成人小视频在线免费观看 | 成人三级黄色 | 伊人春色电影网 | 在线观看精品一区 | 久草在线手机视频 | 成年人视频在线 | 97超碰人人澡人人爱 | 成人毛片一区 | 亚洲视频高清 | 久久精品中文 | 91麻豆产精品久久久久久 | 国产无区一区二区三麻豆 | 日韩精品视频在线观看免费 | 国产精品普通话 | 成年人免费在线观看网站 | 久久综合爱| 激情欧美日韩一区二区 | 久久天天躁 | 狠狠躁日日躁狂躁夜夜躁 | 高清有码中文字幕 | 日韩a级黄色 | 日韩欧美观看 | 免费的黄色av | 91精品国产99久久久久久红楼 | 中文字幕在线看视频国产中文版 | 91在线免费看片 | 日韩欧美不卡 | 久草在线最新 | 成人h电影 | 欧美精品免费视频 | 国产视频一区二区在线 | 国产亚洲资源 | 一区二区不卡高清 | 在线观看激情av | 日韩大片在线观看 | 又色又爽又黄高潮的免费视频 | 99 久久久久 | 欧美精品久久久久性色 | 国产色综合天天综合网 | 成人午夜剧场在线观看 | 国产精品一级视频 | 91九色国产 | 四虎影视成人精品国库在线观看 | 在线 国产 亚洲 欧美 | 国产成人av一区二区三区在线观看 | 一本一道久久a久久综合蜜桃 | 国产免费影院 | 日韩精品无码一区二区三区 | 综合激情久久 | 久久久久综合网 | 日本久久中文字幕 | 精品国产伦一区二区三区 | 久久激情视频 久久 | 国产精品久久嫩一区二区免费 | 日韩免费福利 | 久久国产一区二区 | 亚洲专区视频在线观看 | 伊人婷婷在线 | av高清在线观看 | www.婷婷色| 日韩在线视频播放 | 福利一区视频 | 四虎影视8848dvd | 国产日韩在线视频 | 蜜臀久久99精品久久久酒店新书 | 日韩精品中文字幕有码 | 久久99久久99久久 | 欧美日韩伦理在线 | 久久人人爽人人爽人人片av免费 | 亚州人成在线播放 | 香蕉影院在线观看 | 色婷丁香 | 国产97视频 | 天堂av网站| av在线等 | 啪啪激情网 | 一级黄色片在线免费观看 | 国产精品久久久av久久久 | 国产精品久久久久久久久久不蜜月 | 久久成人免费 | 午夜精品一区二区三区在线播放 | 精品国产片| 国产永久网站 | 午夜视频在线观看一区二区三区 | 亚洲精品视频在 | 九九在线高清精品视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 99在线观看精品 | 成人av电影免费在线观看 | 国产xxxx| 九九九九热精品免费视频点播观看 | 婷婷丁香视频 | 人人爽久久久噜噜噜电影 | 精品久久久久久一区二区里番 | 色综合久久精品 | 午夜免费福利视频 | 日韩久久视频 | 一级片在线 | 国产二区精品 | 麻花豆传媒一二三产区 | 三上悠亚一区二区在线观看 | 亚洲国产精品久久久久 | 久久综合射 | 超碰在线中文字幕 | 欧美日韩高清在线 | 久草免费在线视频 | 成人av电影免费观看 | 欧美极品xxxxx | 伊人五月 | 97碰碰碰| 在线天堂v| 88av色| 国产黄色精品网站 | 亚洲国产中文字幕在线 | 国产日韩欧美在线观看视频 | 婷婷天天色 | 久久天天躁夜夜躁狠狠躁2022 | 国内揄拍国产精品 | 精品在线一区二区三区 | 国产午夜精品理论片在线 | 久久成人综合视频 | 色久综合 | 国产精品久久久久一区二区国产 | 亚洲动漫在线观看 | 亚洲精品午夜久久久久久久 | 中文一区二区三区在线观看 | 亚洲高清在线观看视频 | 色播五月婷婷 | 国产v欧美 | 黄色免费av | 毛片永久免费 | 蜜臀av一区 | 色婷婷视频在线 | 婷婷激情5月天 | 在线成人小视频 | 日韩国产精品久久久久久亚洲 | 欧美a级免费视频 | 99久久久国产精品免费99 | 天天操天天操 | 99视频国产在线 | 国产原创在线视频 | 天天操夜夜叫 | 国产精品a成v人在线播放 | 国产精品二区在线 | 国产成人一区三区 | 亚洲亚洲精品在线观看 | 日韩超碰在线 | 精品视频999 | 91大神视频网站 | 国产三级精品三级在线观看 | 亚洲在线视频观看 | 久久国产露脸精品国产 | 欧美日韩国产网站 | 午夜视频99| 夜夜躁日日躁狠狠久久88av | 黄色成人小视频 | 婷婷网在线 | 黄色亚洲免费 | 国产不卡在线观看 | 中文字幕在线观看免费高清电影 | 亚洲精品在线二区 | 丁香婷婷综合五月 | 国产视频一区二区在线观看 | 日日操天天操狠狠操 | 久久久久久美女 | 亚洲毛片一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 久一在线 | 免费看黄色91 | 玖玖视频免费在线 | 国产不卡毛片 | 狠狠色丁香久久婷婷综合_中 | 亚洲国产精品视频在线观看 | 制服丝袜亚洲 | 免费看的国产视频网站 | 黄色影院在线免费观看 | 97伊人网| 久草视频网 | 亚洲黄色免费 | 精品1区2区3区 | 中文字幕在线观看免费 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久精品91视频 | 精品婷婷 | 国产欧美精品一区二区三区四区 | 国产一级精品在线观看 | 久草资源免费 | av中文在线影视 | 国产视频999 | 91麻豆精品国产91久久久无需广告 | 国产日韩精品在线 | 成人黄色在线电影 | 久久精品电影 | 亚洲一二三区精品 | 在线免费观看国产 | 免费a视频在线 | 中文字幕精品久久 | 国产一区私人高清影院 | 欧美日韩中文字幕综合视频 | 精品久久久久久亚洲 | 一区二区三区在线免费观看 | 丁香色婷 | 国产成人精品三级 | 69国产盗摄一区二区三区五区 | 91资源在线免费观看 | 亚洲欧美日韩国产精品一区午夜 | 午夜精品视频免费在线观看 | 91精彩视频 | 欧美一级特黄高清视频 | 色吊丝在线永久观看最新版本 | 天天操夜夜摸 | 国产手机av | 欧美成年黄网站色视频 | 久草免费福利在线观看 | 91综合久久一区二区 | www.久久99| 日韩系列在线 | 国产精品久久片 | 日韩一区二区在线免费观看 | 深爱激情五月网 | 国产一区二区成人 | 国产精品videossex国产高清 | 久久av伊人| 伊人婷婷网 | 五月婷婷开心中文字幕 | 黄色一级大片在线观看 | 亚洲免费视频在线观看 | 久久精品国产亚洲精品2020 | 日韩在线精品视频 | 久久av免费 | 色多多污污 | 超碰在线资源 | 国产精品九九热 | 91视频传媒| 国产69熟 | 91看片淫黄大片一级在线观看 | 日韩精品中文字幕在线观看 | 亚洲一二区精品 | 精品国产成人 | 中文字幕av最新更新 | 国产亚洲综合精品 | 偷拍精品一区二区三区 | 欧美精品999 | 日韩一区二区三区免费电影 | 国产日产精品一区二区三区四区 | 国产乱视频 | 日韩一区精品 | 久久午夜电影院 | 最近中文字幕大全中文字幕免费 | 成人宗合网 | 成人欧美在线 | 成人av一区二区三区 | 国产91免费看 | 婷婷成人亚洲综合国产xv88 | 久久精品久久99 | 国产h在线播放 | 欧美精品一区二区三区一线天视频 | 久久久一本精品99久久精品66 | 久久超碰在线 | 日本久久久久久久久久久 | 久久久精品国产免费观看同学 | 91国内在线 | 91av手机在线| 最新日韩精品 | 国产黄色片久久 | 国产精品久久久久久久久免费看 | 欧美片一区二区三区 | 91久色蝌蚪 | 超碰成人免费电影 | 午夜精品久久久久久久爽 | 国产 精品 资源 | 91黄色成人| 91污污 | 久久综合久久综合久久综合 | 在线观看日本高清mv视频 | 国产区欧美 | 日韩精品久久久久久中文字幕8 | 四虎影视成人永久免费观看视频 | 日韩欧美一区二区三区视频 | 天天射天天干 | 伊人国产视频 | 国产精品成人一区 | av福利在线免费观看 | 在线日韩中文 | 在线va视频 | 国产91成人 | 最近中文字幕视频网 | 另类五月激情 | 日韩在线三区 | 91精品国自产拍天天拍 | 国产午夜一级毛片 | 欧美日韩二区在线 | av电影在线免费观看 | www好男人| 日韩精品视频在线免费观看 | 黄色在线看网站 | 91av超碰| 久久久久伦理电影 | 九九视频一区 | 久热电影| 欧美精品久久久久久久免费 | 超碰资源在线 | 欧美另类成人 | 亚州成人av在线 | 日韩精品不卡在线观看 | 91精品在线免费观看视频 | 99在线视频观看 | 久久99久久99免费视频 | 免费三级影片 | 国产精品一区二区久久精品爱涩 | 91视频啊啊啊 | 日韩av在线资源 | 久久国产精品精品国产色婷婷 | 久久精品视频免费播放 | 色大片免费看 | 成年人黄色在线观看 | 国产经典三级 | 国产精品久久久久一区 | 国产视频 亚洲视频 | 综合天堂av久久久久久久 | 欧美精品一区二区免费 | 午夜 久久 tv| 国产视频一区二区在线观看 | 午夜精品福利影院 | wwxxxx日本| 99色免费视频 | 色先锋资源网 | 日韩美女久久 | 岛国av在线| 国产精品 久久 | 国产黄色片在线免费观看 | 日韩在线第一 | 国产精品嫩草影院123 | 午夜av大片 | 日韩精品免费在线播放 | 日韩免费福利 | 在线亚洲小视频 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲综合色婷婷 | 深夜免费福利在线 | av大全免费在线观看 | 国产精品日韩久久久久 | 亚洲作爱视频 | 欧美日韩视频在线 | 精油按摩av| 日本久久综合网 | 99r在线视频| a久久免费视频 | 久久午夜电影 | 国产伦精品一区二区三区… | 在线观看日本高清mv视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 色就是色综合 | 日韩在线观看一区二区 | 欧美一区免费在线观看 | 综合网成人 | www.久久色.com | 国产精品黄色影片导航在线观看 | 久久99热久久99精品 | 天天爱天天操 | 日本一区二区高清不卡 | 91九色成人蝌蚪首页 | 久久婷婷久久 | 成年免费在线视频 | 黄色毛片观看 | 亚洲精品毛片一级91精品 | 成人视屏免费看 | 国产精品18久久久 | 日韩高清 一区 | 激情久久网 | 欧美日韩综合在线观看 | 欧美日韩高清一区二区 | 99这里只有精品99 | 国内久久精品 | 夜夜高潮夜夜爽国产伦精品 | 99精品视频免费观看视频 | 狠狠干成人综合网 | 国产午夜精品一区二区三区在线观看 | 国产亚洲精品美女 | 国产精品久久久久久久午夜片 | 国产精品欧美久久久久三级 | 99视频网站 | 欧美一级看片 | 久久久av免费 | 久草久草久草久草 | 国产一区二区三区视频在线 | av大片网址 | 成人a免费 | 亚洲天堂视频在线 | 色网站黄| 久久麻豆视频 | 一区二区三区动漫 | 超碰资源在线 | 超碰com | 日韩网 | 精品在线观看一区二区三区 | 天天射天天干天天插 | 亚洲天堂网在线播放 | 久久久久久久看片 | 福利视频一二区 | 免费看网站在线 | 久久久久久国产一区二区三区 | 大胆欧美gogo免费视频一二区 | 日韩字幕 | 天天插天天干 | 国产黄免费| 久久久久久久久网站 | 色天天中文| 国产麻豆剧传媒免费观看 | 国产91精品看黄网站在线观看动漫 | 女人高潮一级片 | 四虎在线观看视频 | 色亚洲激情 | 天天射天 | 91精品入口 | 天天玩天天干天天操 | 成人午夜在线电影 | 天天插视频 | 天天色综合久久 | 天天操天天干天天操天天干 | 99精品视频免费观看 | 99视频久久 | 欧美性猛片, | 日韩精品亚洲专区在线观看 | 国产精品福利在线观看 | 在线观看91久久久久久 | 五月综合色婷婷 | 夜夜躁日日躁狠狠躁 | 九九九九色 | 久久色在线观看 | 成年人免费电影在线观看 | 青青草国产成人99久久 | 天天操天天操天天操 | 天天操操操操操操 | 国产区av在线 | 丁香九月激情 | 国产高清不卡一区二区三区 | 久久精品中文字幕免费mv | 欧美精品v国产精品v日韩精品 | 国产精品正在播放 | 成人免费毛片aaaaaa片 | 久久国产视屏 | 午夜婷婷在线播放 | 国产精品视频地址 | 久久国产精品免费一区二区三区 | 日批视频在线播放 | 日韩欧美区 | 伊人久久精品久久亚洲一区 | 999久久久免费视频 午夜国产在线观看 | 亚洲美女在线国产 | 麻豆视频一区二区 | 五月天最新网址 | 国产精品国产三级国产aⅴ入口 | 久久6精品 | 亚洲精品www久久久久久 | 久久久久久久久久久免费 | 又黄又爽的视频在线观看网站 | 亚洲精品在线一区二区三区 | 在线免费视频a | 综合久久网 | 国内偷拍精品视频 | 日韩电影一区二区三区 | va视频在线观看 | av大全在线观看 | 国产经典av | 亚洲精品中文在线 | 天天爽人人爽夜夜爽 | 91在线视频免费91 | 在线激情小视频 | 久久欧美精品 | 77国产精品 | 日韩mv欧美mv国产精品 | 97精品视频在线 | 在线观看国产福利片 | 国内精品小视频 | 最近免费中文字幕大全高清10 | 国产青春久久久国产毛片 | 91色影院| 国产精品久久久久久久午夜 | 欧美性久久久久久 | 日韩美视频 | 国产精品视频观看 | 国内精品99| 91成年人在线观看 | 999热视频| 黄色片免费在线 | 日韩免费电影一区二区 | 免费黄色一区 | 天天干com| 天天干国产 | 国产糖心vlog在线观看 | 免费看国产视频 | 国产午夜三级一区二区三 | 亚洲成人午夜av | 久久黄色精品视频 | 国产热re99久久6国产精品 | 一区二区三区四区五区六区 | 在线色亚洲 | 日本在线观看一区二区三区 | 久久精品久久99 | 国产黄色片免费在线观看 | 精品国产综合区久久久久久 | 免费电影播放 | 看av在线 | 久久99精品久久久久久久久久久久 | 亚洲精品久久久久中文字幕二区 | www.国产在线 | 亚洲精品视频大全 | 欧美日韩一区二区三区在线观看视频 | 欧美va天堂在线电影 | 在线看的毛片 | 日韩精品免费一区二区在线观看 | 夜夜躁天天躁很躁波 | 久久久久久激情 | bbb搡bbb爽爽爽 | 久久伊人五月天 | 精品在线视频一区 | 久草在线免费在线观看 | 国产欧美中文字幕 | 国产在线观看国语版免费 | 91精品在线播放 | 怡春院av| 欧美一级片免费 | 日韩欧美69| 日韩资源在线 | 天天天综合 | 在线中文字幕av观看 | 国产黄色片一级三级 | 亚洲精品国 | 成人免费av电影 | 97精品在线观看 | 亚洲国产精品va在线 | 久草在线视频首页 | 婷婷亚洲综合五月天小说 | 免费在线观看的av网站 | 色偷偷88欧美精品久久久 | 天天干天天想 | 丁香亚洲 | 国产私拍在线 | 一区在线观看 | 亚洲一区免费在线 | 亚州av一区 | 国产高清福利在线 | 2019精品手机国产品在线 | av看片在线观看 | 免费日韩三级 | 99久久精品国产一区二区成人 | 麻豆视频免费看 | 色午夜影院 | av片中文| 伊人午夜视频 | 久久精品福利视频 | 欧美大香线蕉线伊人久久 | 国产 在线 日韩 | 亚洲一二三在线 | 亚洲伊人色 | 黄色电影小说 | 五月婷婷丁香六月 | 日韩免费视频线观看 | 久草在线资源观看 | 99精品视频中文字幕 | 五月婷婷中文网 | 91久草视频 | 精品美女在线观看 | 精品主播网红福利资源观看 | 久久免费视频一区 | 草久久精品 | 久久久免费观看 | 国产精品美女久久久久久久网站 | 欧美日韩在线视频免费 | 国产精品video| 欧美一区二区三区在线播放 | 国产最新精品视频 | 中文字幕日韩电影 | 久久久久女教师免费一区 | 成人一区二区三区在线 | 久久99久久久久 | 免费毛片aaaaaa| 欧美性色综合网站 | 九九涩涩av台湾日本热热 | 国产精品va在线观看入 | 婷婷在线播放 | 国产精品 中文字幕 亚洲 欧美 | 91精品视频导航 | 黄av资源 | 国产美女免费观看 | 91人人视频在线观看 | 亚洲精品男人天堂 | 免费a v在线 | 亚洲精品va| 亚洲国产中文字幕在线观看 | 日日夜夜中文字幕 | 国产精品久久久久久久午夜 | 欧美激情在线看 | 亚洲精品一区二区三区四区高清 | av在线网站观看 | 西西4444www大胆艺术 | 日韩国产欧美视频 | 啪啪av在线 | 超碰大片| 国产区第一页 | 国偷自产视频一区二区久 | 欧美九九九 | 在线观看视频一区二区三区 | 亚洲精品一区二区精华 | 色搞搞 | 日韩1页 | 亚洲精品视频在线免费播放 | 色在线观看网站 | 久久国产亚洲 | 久久久久草 | 亚洲jizzjizz日本少妇 | 韩日精品在线 | 在线色视频小说 | 五月天丁香综合 | 久久艹影院 | 国产一区二区三区在线免费观看 | 天堂va在线高清一区 | 91av原创 | 五月天色综合 | 国产高清免费av | 97精品国产97久久久久久久久久久久 | 亚洲第五色综合网 | 97激情影院 | 国产欧美精品xxxx另类 | 久久8精品 | 玖玖在线免费视频 | 国产精品 国内视频 | 三级av免费观看 | 久久一区二区三区国产精品 | 国产美女网站视频 | 六月丁香社区 | 日本在线中文 | 波多野结衣电影一区二区三区 | 五月婷婷丁香激情 | 国产成人久久77777精品 | 久久激情视频 久久 | 日韩欧美视频免费观看 | 黄色天堂在线观看 | 99精品免费 | 亚洲最大av网站 | 久草免费在线视频观看 | 久插视频 | www.神马久久 | 天天操天天操天天操天天 | 成人三级网址 | 日韩免费| 麻豆国产在线播放 | 日韩一级成人av | 午夜视频在线观看一区 | 亚洲天堂自拍视频 | 国产日韩视频在线播放 | 九九久久久久久久久激情 | 超碰97中文 | 国产美女网 | 日韩成人精品一区二区三区 | 狠狠色噜噜狠狠 | 在线视频免费观看 | 欧美乱码精品一区二区 | 91人人澡人人爽人人精品 | 国产在线观看免费 | 欧美精品久久久久久久久免 | 免费情趣视频 | 综合网五月天 | 婷婷久久一区二区三区 | 欧美精品亚洲二区 | www.色的| 麻豆免费在线视频 | www欧美xxxx| 久久久黄色av | 中文字幕在线色 | av网站在线观看免费 | 九九九九九九精品任你躁 | 波多野结衣最新 | 在线观看成人毛片 | av免费观看网站 | 在线日韩精品视频 | 一区二区三区福利 | 97色婷婷人人爽人人 | 国产精品日韩欧美一区二区 | 国产精品女同一区二区三区久久夜 | 日韩欧美网址 | 91精品国产入口 | 国产精品久久久久久久久免费看 | 在线亚洲精品 | 国产视频资源 | 99久久精品免费看国产四区 | 五月婷婷激情综合 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 天堂视频一区 | 草久视频在线观看 | 国产高清精品在线观看 | 成人av在线网 | 久久视频在线看 | 九九热在线免费观看 | 天天曰天天 | 国产午夜精品一区二区三区欧美 | 国产精品久久久久久久午夜 | 人人澡人人添人人爽一区二区 | 99国产视频| 狠狠色狠狠综合久久 | 91女神的呻吟细腰翘臀美女 | 99久久精品国产免费看不卡 | 精品国产免费观看 | 9草在线| 国产色a在线观看 | 91精品一区二区三区蜜桃 | 一级一片免费视频 | 亚洲精品视频在线播放 | 91精品视频导航 | 又黄又爽又色无遮挡免费 | 韩国一区二区三区在线观看 | 超碰97在线资源 | 在线播放日韩av | 在线亚洲成人 | 国产高清在线 | 国产精品久久久久久久久大全 | 欧美一级艳片视频免费观看 | 色吊丝在线永久观看最新版本 | 人人精久 | 欧美精品一区二区在线观看 | 免费成人短视频 | 国产精品二区在线 | 久久久久久久久久毛片 | 国产黄色精品 | 日韩亚洲精品电影 | 最新国产精品视频 | 国产精品视频全国免费观看 | 在线观看aaa| 国产精品一区二区三区在线看 | 狠狠色丁香婷综合久久 | 久久久久久久久久久久久久av | 日韩有色| 久久9视频 | 欧美日韩在线观看一区 | 在线观看免费色 | 午夜精品久久久久99热app | www.黄色在线| 色偷偷中文字幕 | 亚洲一区美女视频在线观看免费 | 久久久久久国产精品免费 | 久久午夜电影院 | 日韩天堂网 | 青青色影院 | 国产一区二区免费在线观看 | 丁香五月亚洲综合在线 | 99久久精品日本一区二区免费 | 久草视频在线观 | 国产黄色a | 国产精品久久久久久久久久久久午夜片 | 精品国内自产拍在线观看视频 | 中文字幕在线观看亚洲 | 天天天天色射综合 | 激情欧美一区二区免费视频 | 99re国产 | 日韩av在线免费播放 | 美女又爽又黄 | 激情五月婷婷丁香 | 日韩精品久久一区二区 | 亚洲欧美国产精品18p | 一级大片在线观看 | 国产成年免费视频 | 91精品视频免费看 | 欧美国产日韩一区二区三区 | 亚洲精品国产精品国自产 | 91视频在线自拍 | 欧美日韩亚洲第一 | 久久精品这里热有精品 | 五月开心六月婷婷 | 在线免费观看视频a | 97人人精品 | 精品国产区 | 久久电影色 | 久久国产精品视频 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 国语对白少妇爽91 | 欧美日韩中文在线观看 | 国产视频精品视频 | 国产一区视频免费在线观看 | 狠狠色丁香婷婷综合久小说久 | 在线播放亚洲 | 麻豆视频免费观看 | 69av免费视频| 四虎影视8848dvd| 九九九免费视频 | 午夜视频在线观看网站 | 国产这里只有精品 | 欧美久久久久久久久 | 国产福利91精品一区二区三区 | 五月天婷亚洲天综合网鲁鲁鲁 | 免费韩国av | 天天干 天天摸 天天操 | 美女网站在线 | 国产高清综合 | 97在线视频免费观看 | 亚洲电影一级黄 | 草久久久 | 麻豆 videos | 国产免费xvideos视频入口 | 欧美亚洲一区二区在线 | 国内精品视频一区二区三区八戒 | 国产又粗又猛又爽又黄的视频先 | 夜添久久精品亚洲国产精品 | 久久久久久久99 | 午夜久久福利视频 | 这里有精品在线视频 | 欧美一级免费高清 | 亚洲精品乱码久久久久v最新版 | 中文字幕电影在线 | 成人试看120秒 | 最近最新中文字幕 | 日韩xxx视频 | 亚洲涩涩涩 | 亚洲视频一级 | 天天干天天综合 | 国产福利精品视频 | 激情婷婷av| 婷婷五月情 | 国产小视频福利在线 | 91丨九色丨国产女 | 黄色视屏免费在线观看 | 久久精品国产一区二区电影 | 亚洲国产片| 黄色免费网站下载 | 91探花系列在线播放 | 一级性av | 激情小说 五月 | 日本免费久久高清视频 | 国产视频2区 | 18久久久| 欧美色操 | 9在线观看免费高清完整版在线观看明 | 精品国产一区二区三区av性色 | 97视频中文字幕 | 草草草影院 | 精品国产一区二区三区久久久 | 狠狠色丁香婷婷综合久小说久 | 天天综合视频在线观看 | 91亚·色| 日韩av专区 | 亚洲一区二区91 | 精品久久久久久电影 | 久久久婷 | 免费在线观看黄色网 | 久久久久久免费网 | 在线看一级片 | 亚洲成人一区 | 女女av在线| 国产精品video爽爽爽爽 | 九九免费在线观看视频 | 一区二区三区日韩精品 | 亚洲在线视频网站 | 99国产一区二区三精品乱码 | 99热日本| 欧美国产不卡 | 国产涩涩在线观看 | 波多野结衣精品在线 | 日韩精品久久久久久中文字幕8 | 久久综合影音 | 日产av在线播放 | 国产在线国偷精品产拍 | 9色在线视频 | 精品少妇一区二区三区在线 | 国产成人亚洲在线观看 | 久久超级碰| 狠狠色综合网站久久久久久久 | 欧美日韩国产精品一区二区 | 99色在线视频 | 国产一级在线看 | av国产网站 | 成人av在线看 | 麻豆国产网站入口 | 婷婷网五月天 | 97色狠狠 | 97在线精品国自产拍中文 | 国产精品9999久久久久仙踪林 | 国产精品成人久久久久久久 | www黄色软件 | 最近更新好看的中文字幕 | 久久久亚洲国产精品麻豆综合天堂 | av三级在线免费观看 | 久久久国际精品 | 国产精品欧美精品 | 国产色在线观看 | 人成午夜视频 | www.看片网站 | 国产一级片不卡 | 狠狠色丁香婷婷综合久小说久 | 亚洲伦理一区二区 | 日韩毛片在线免费观看 | 五月婷婷综合激情网 | 婷婷av网站| 夜夜操综合网 | 成年人视频免费在线 | 国产精品久久久久四虎 | 国产精品一区二区在线播放 | 97精品国产97久久久久久免费 | 日本公妇色中文字幕 | 午夜av电影院 | 欧美日韩在线视频免费 | 国产久草在线 | 91久久一区二区 | 久久久美女 | 亚洲国产中文字幕在线 | 成人黄色在线看 | 免费黄色在线网站 | 中文字幕在线观看完整版电影 | 免费热情视频 | 欧美成人区 | 欧美大片在线观看一区 | 日韩精品一区二区三区丰满 | 欧美精品中文在线免费观看 | 黄色一级在线观看 | 久久成人精品视频 | 99色在线观看视频 | 91福利小视频 | 九九免费在线视频 | 国产精品对白一区二区三区 | 在线看国产一区 | 久久久综合九色合综国产精品 | 国产99久久精品 | 成人高清av在线 | 国产精品一区二区三区在线看 | 久久在现 | 丁香婷婷激情五月 | 亚洲精品中文字幕在线 | 色网站在线免费观看 | 成人黄色免费在线观看 | 麻豆精品视频在线 | 久久永久免费 | 久久国产精品成人免费浪潮 | 免费视频一二三区 | 黄色av电影在线观看 | 91视视频在线直接观看在线看网页在线看 | 人人看黄色 | 91av资源在线 | 国产一级片免费播放 | 麻豆综合网 | 国产乱对白刺激视频在线观看女王 | 一区二区中文字幕在线观看 | 五月花丁香婷婷 | 1区2区3区在线观看 三级动图 | 丁香激情综合国产 | 成 人 黄 色 免费播放 | 手机在线小视频 | 欧美日韩一区二区在线 | 国产成人在线免费观看 | 久久久久电影网站 | 日韩手机视频 | 日本在线观看一区二区 | 又污又黄的网站 | 久久国产精品99久久久久 | 美女视频又黄又免费 | 国产黄色片一级三级 | 香蕉视频在线免费 | 五月天亚洲综合 | 丁香六月欧美 | 亚洲午夜精品在线观看 | 国产精品嫩草影院123 | 不卡视频一区二区三区 | 婷婷久操| 日韩精品免费一区 | 91国内在线视频 | 99 色| 亚洲视频分类 | 有没有在线观看av | 亚洲国产成人久久 |