《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > YAFFS在嵌入式Linux系統(tǒng)中的構(gòu)建與改進
YAFFS在嵌入式Linux系統(tǒng)中的構(gòu)建與改進
來源:電子技術(shù)應(yīng)用2012年第3期
熊胤琪,嚴 華
四川大學(xué) 電子信息學(xué)院,四川 成都610065
摘要: 針對目前YAFFS文件系統(tǒng)啟動時間過長、磨損平衡性差的缺陷,在借助嵌入式平臺Linux-2.6.28+ARMS3C2440構(gòu)建YAFFS的基礎(chǔ)上改進文件系統(tǒng),即在啟動時采用空間換取時間策略,為文件屬性節(jié)點分配專門的存儲區(qū),減少掃描區(qū)域,達到縮短加載時間的目的;在垃圾回收時采用擦除計數(shù)機制,根據(jù)計數(shù)器選擇擦除塊,從而改善擦除塊間的磨損平衡。通過實驗證明了改進策略的有效性。
中圖分類號: TP317
文獻標(biāo)識碼: A
文章編號: 0258-7998(2012)03-0033-04
Construction and improvement of YAFFS file system based on the embedded Linux system
Xiong Yinqi,Yan Hua
College of Electronics and Information Engineering, Sichuan University, Chengdu 610065,China
Abstract: To solve the problems of the YAFFS file system in start-up times and wear leveling, two improvement strategies are used to implement YAFFS file system based on the embedded Linux-2.6.28 and ARM S3C2440 microprocessor. One is the strategy of trading space for time,namely,a specific storage is distributed for attribute node in order to decrease scan range and reduce mounting time; and the other is the method of choosing erasing blocks according to the mechanism of erasing count, which is good for improving wear leveling. Finally, the effectiveness is proved by the experimental results.
Key words : YAFFS;embedded Linux;mounting time;wear leveling

    在嵌入式Linux的開發(fā)工作中,常用的存儲設(shè)備有NorFlash和NandFlash,其中價格低廉并適用于高密度和大容量存儲的NandFlash運用更為廣泛[1]。YAFFS(Yet Another Flash File System)文件系統(tǒng)是專門針對NandFlash的特殊構(gòu)造設(shè)計的,是一種日志結(jié)構(gòu)的文件系統(tǒng),性能超越了原有的JFFS系列文件系統(tǒng)。但隨著嵌入式技術(shù)的發(fā)展,在NandFlash介質(zhì)上的嵌入式Linux中構(gòu)造YAFFS時,YAFFS存在掛載時間過長和損耗均衡性不足兩方面的缺點,需要進一步改進和優(yōu)化。

1 YAFFS文件系統(tǒng)
    在嵌入式所用的NandFlash中,基本的讀寫單位是頁(page),YAFFS的存儲位也是頁(一般稱為Chunk),分為附加區(qū)(OOB)和數(shù)據(jù)區(qū)。32頁組成塊(block)是基本的擦除單位[2]。由于YAFFS的文件偏移地址和閃存的物理地址不一致而建立了一張文件與物理頁的映射表。閃存的頁序號作為表內(nèi)容,以每頁描述的文件偏移量作為表索引,再把這張大的映射表分為若干小表,組織成樹結(jié)構(gòu),以提高文件數(shù)據(jù)塊的查找速度。這種在內(nèi)存中建立的層次索引目錄稱之為節(jié)點樹(TnodeTree),是YAFFS的核心模型,如圖1所示。在節(jié)點樹中按照邏輯索引(Logical chunk index)找到物理地址索引(Physical chunk index)。當(dāng)文件變大時,所需的葉子節(jié)點也會增加,此時節(jié)點樹就會“拔高”和“增肥”。當(dāng)文件進行刪除操作時,用遞歸的方法從葉節(jié)點向上收縮,釋放已被刪除節(jié)點對應(yīng)的物理頁。

2 構(gòu)建YAFFS文件系統(tǒng)
2.1 實驗平臺

    開發(fā)過程中運用的是目標(biāo)板與宿主機的交叉編譯模式。宿主機即PC機,采用的是虛擬機+Linux RedHat9.0系統(tǒng);目標(biāo)板的硬件是ARM板,采用的是一塊S3C2440的ARM9微處理器,帶有一塊256 MB的NandFlash、64 MB的SDRAM內(nèi)存。目標(biāo)板采用的開發(fā)軟件是嵌入式Linux2.6.28+交叉編譯工具arm-Linux-gcc4.3.1。YAFFS文件系統(tǒng)的開發(fā)流程如圖2所示,引導(dǎo)程序Boot-Loader一般是固定在開板的Flash中(這里不做詳解)。

2.2 內(nèi)核移植
    (1)修改交叉編譯環(huán)境,使其適用于本實驗平臺。修改頂級Makefile中定義的ARM編譯器,使之與所采用的平臺處理器相對應(yīng)。修改如下:
    ARCH = arm
    CROSS_COMPILE = /usr/local/3.4.1/arm-linux-
    同時,為了支持實驗平臺處理器12 MHz的晶振頻率,修改Linux提供的輸入時鐘,在文件arch/arm/mach-s3c2440/mach-smdk2440.c中定義s3c24xx_init_clocks
(12 000 000);并且在該文件中將Linux支持的machine名稱改為MACHINE_START(S3C2440,“Study-S3C2440”);最后,修改Linux中默認的機器號,使之與BootLoarder傳遞的機器參數(shù)782一致。在arch/arm/tools/math-types中,機器型號語句修改為:
    S3C2440 ARCH_S3C2440     S3C2440     782
    (2)內(nèi)核支持MTD。MTD是閃存與文件系統(tǒng)的接口,NandFlash、YAFFS文件系統(tǒng)與MTD的聯(lián)系如圖3所示。

 

 

    老版本的MTD與NandFlash的兼容不是很好,需要安裝最新的MTD。實現(xiàn)Linux對MTD的支持,首先要在MTD子系統(tǒng)內(nèi)添加NandFlash的硬件設(shè)備驅(qū)動。在arch/arm/plat-s3c2440目錄下的文件common-smdk.c中定義了Flash硬件平臺的驅(qū)動信息,在文件中定義了結(jié)構(gòu)體static struct mtd-partition partition-info[],表示閃存的MTD分區(qū)信息,這里將NandFlash分為5個MTD分區(qū),分區(qū)內(nèi)容如下:
[0] = {    .name    = "Boot",
        .size        = 0x00100000,
        .offset    = 0
      },    //mtd0分區(qū),大小為1 MB,相對偏移地址為0x0
[1] = {    .name    = "MyApp",
        .size        = 0x003c0000,
        .offset    = 0x00140000,
      },    //mtd1分區(qū),存儲應(yīng)用程序
[2] = {    .name    = "Kernel",
        .size        = 0x00300000,
        .offset    = 0x00500000,
      },    //mtd1分區(qū),用于存放內(nèi)核
[3] = {    .name    = "filesystem",
        .size        = 0x03c00000,    
        .offset    = 0x00800000,
      },    //mtd3分區(qū),大小為30 MB, 用于存放文件系統(tǒng)
[4]……
    }
    在該文件中,還定義了Flash的總線寬度、基本讀寫操作以及硬件相關(guān)的控制引腳,可根據(jù)相應(yīng)的需求進行修改。
    (3)增加內(nèi)核對YAFFS的支持。首先將最新的YAFFS源碼包放入Linux內(nèi)核的/fs目錄中,執(zhí)行解壓操作,/fs目錄中添加了YAFFS文件系統(tǒng)的源碼;然后在內(nèi)核中對YAFFS進行配置,相應(yīng)地修改為:在/fs/Makefile中增加obj-$(CONFIG_YAFFS_FS)+=yaffs/;在/fs/Kconfig中增加source“fs/yaffs/Kconfig”。
    (4)編譯內(nèi)核。在Linux2.6.28內(nèi)核目錄下執(zhí)行make menuconfig操作,在內(nèi)核配置菜單中選中支持MTD、NandFlash和YAFFS文件系統(tǒng)的選項。注意一定要選擇選項Let yaffs do its own ECC,因為制作出來的YAFFS文件系統(tǒng)映像中附加區(qū)的數(shù)據(jù)包含了ECC校驗算法。此算法與NandFlash的MTD中的校驗算法不相同,會造成MTD認為頁校驗錯誤;之后運行make zImage,在/linux2.6.28/arch/arm/boot中形成壓縮的內(nèi)核鏡像zImage,通過S3C2440的專用串口工具DWN,將鏡像燒寫到kernel分區(qū)。
2.3 YAFFS根文件系統(tǒng)制作
    (1)制作文件系統(tǒng)。首先,創(chuàng)建文件系統(tǒng)根目錄rootfs,并且在根目錄下創(chuàng)建子目錄bin和sbin(存放自帶命令)、etc(系統(tǒng)配置文件)、proc、lib(程序運行的動態(tài)鏈接庫)、user、dev(系統(tǒng)支持的設(shè)備文件);然后,安裝Linux的常用命令集Busybox,安裝其源碼到Linux根目錄下,修改其中的makefile,實現(xiàn)交叉編譯:
    ARCH = arm
    CROSS_COMPILE = /usr/arm-linux-
    在Busybox的目錄下執(zhí)行make menuconfig,進入配置菜單,根據(jù)需求添加選項。編譯后將install目錄下的文件拷貝到/rootfs中;其次,安裝交互程序Bash,使系統(tǒng)可進入交互界面,源碼包解壓后,同樣修改鏈接路徑為:export PATH =/usr/local/arm/3.4.1/bin;編譯后將得到的bash靜態(tài)鏈接程序拷貝到/rootfs/bin目錄中;最后,建立系統(tǒng)的配置文件及編寫啟動腳本,系統(tǒng)啟動訪問的第一個腳本etc/inittab,編輯etc/init.d/rcS腳本,執(zhí)行掛載文件系統(tǒng)Ramfs和sysfs的命令,還可以在etc/rc.local中配置系統(tǒng)IP地址。
    (2)制作YAFFS文件系統(tǒng)鏡像。在YAFFS源碼文件包中有util工具包,對工具包中makefile的交叉編譯路徑進行修改,編譯后得到mkyaffsimage工具。根目錄下執(zhí)行:. /mkyaffsimage /rootfs rootfs.yaffs。
    (3)YAFFS根文件系統(tǒng)燒寫。修改內(nèi)核的配置參數(shù)rootsystem=YAFFS,通過DWN把rootfs.yaffs鏡像文件燒到filesystem分區(qū)。啟動系統(tǒng)就會顯示啟動信息:VFS: Mounted root (yaffs filesystem)。
3 YAFFS改進策略
    (1)針對掛載YAFFS時需要掃描Flash上所有被使用的塊從而減慢了啟動速度的問題,在文件系統(tǒng)的加載過程中采用空間換取時間的策略,加入索引區(qū),用于存儲文件屬性信息節(jié)點[3],但對于閃存較小的嵌入式系統(tǒng)則沒有太大意義。YAFFS在NandFlash的頁中定義和記錄數(shù)據(jù)Objectpoint_data和file_data,還增加了index_data數(shù)據(jù)類型,其中記錄了掛載系統(tǒng)時所需要的數(shù)據(jù)和節(jié)點信息,并分配專門記錄這些數(shù)據(jù)的塊(即索引塊)。在YAFFS中創(chuàng)建index_data類型的數(shù)據(jù)結(jié)構(gòu)yaffs_monut_index,組織文件屬性的初始化數(shù)據(jù)的結(jié)構(gòu),如yaffs_object及部分相關(guān)的yaffs_Device、yafffs_BlockInfo和yaffs_Tnode等,索引塊中每頁的存儲結(jié)構(gòu)如圖4所示。

    inode_num和check及其他有用的數(shù)據(jù)都是存儲在索引塊每頁的附加空間中的標(biāo)記位。inode_num用于記錄存儲啟動控制信息所用的頁數(shù),掛載時系統(tǒng)只需要掃描索引塊已使用的頁;check記錄了系統(tǒng)卸載時,控制信息是否正常地寫入閃存中,啟動時如能檢查通過后,則采用改進策略掛載系統(tǒng),否則運行原有機制,掃描所有塊[4]。YAFFS掛載時,系統(tǒng)掃描每一塊第一頁的附加區(qū),若不是索引塊就跳過檢查下一塊;如果是,則讀取該塊,獲取記錄了節(jié)點樹中的葉節(jié)點數(shù)據(jù)的信息,重建節(jié)點樹[5]。YAFFS文件系統(tǒng)成功掛載,即以一定的存儲空間換取了大量的掛載時間。采用了該策略后,第一次掛載時系統(tǒng)將運行原有啟動機制,卸載時將文件屬性數(shù)據(jù)寫入索引塊,第二次掛載時則根據(jù)默認設(shè)置直接讀取啟動數(shù)據(jù)[6],而且還避免了隨著文件系統(tǒng)增大而啟動變慢的問題。采用空間換取時間的策略后與原YAFFS加載過程的區(qū)別如流程圖5所示。

    (2)當(dāng)YAFFS系統(tǒng)進行寫操作且NandFlash中未分配空間小于預(yù)設(shè)的閾值時,啟動垃圾回收機制,選取最臟塊擦除。YAFFS文件系統(tǒng)的垃圾回收策略結(jié)合了隨機策略的平衡性和貪心策略的高效性,回收機制包括:回收不再使用的臟塊以及對存有有效數(shù)據(jù)的壞塊進行處理。但回收算法具有隨機性,系統(tǒng)有可能總是選中同一個塊,認定它是最臟的塊,并連續(xù)地擦除回收,造成惡性的使用,而NandFlash的擦除次數(shù)是有限的(大約在10次左右)。出現(xiàn)惡性的使用會造成閃存中的部分塊損壞,而其他塊使用次數(shù)卻極少,縮短了閃存的壽命。
    (3)針對YAFFS的磨損平衡性差的情況,采用了擦除計數(shù)機制[7]:在yaffs.guts.h中定義了存儲在NandFlash的附加區(qū)中的數(shù)據(jù)結(jié)構(gòu)yaffs_tags,用來標(biāo)志每頁的狀態(tài);定義了chunkID、objectID和有效字數(shù)等。其中有2 bit的空間是沒有使用的,并從chunkID和objectID分配7 bit,將這9 bit的空間定義為erase_count,用于記錄該頁被擦除的次數(shù)。初始值為零,當(dāng)被擦除時標(biāo)記為“1”,表示擦除過一次可達到的最大計數(shù)值為511。系統(tǒng)垃圾回收的流程圖如圖6所示。當(dāng)某一塊的擦除次數(shù)達到511時,該塊與被擦除數(shù)最小的塊交換各自存儲的數(shù)據(jù),使頻繁擦寫的塊存儲很少使用的數(shù)據(jù),而被擦除次數(shù)少的塊存儲頻繁地更新數(shù)據(jù)[8](如文件屬性信息數(shù)據(jù))。當(dāng)擦除計數(shù)達到最大的塊超過70%以上時,將所有的擦除計數(shù)值歸零,循環(huán)以上的操作,從而實現(xiàn)NandFlash的損耗基本平衡、延長使用壽命、提高文件系統(tǒng)可靠性。
4 性能測試
    按照以上介紹的策略修改YAFFS文件系統(tǒng)相關(guān)部分的源代碼,并且根據(jù)YAFFS根文件系統(tǒng)構(gòu)建的基本步驟,將改進后的文件系統(tǒng)作為根文件系統(tǒng)燒寫入目標(biāo)板。在實驗平臺上,分別對YAFFS和改進后的文件系統(tǒng)進行性能測試和研究。性能測試的主要內(nèi)容有:各塊的擦除次數(shù)和文件系統(tǒng)掛載的時間。在實驗平臺上大量地進行讀寫和刪除操作,在源代碼中也添加擦除計數(shù)(只用于計數(shù)),兩個文件系統(tǒng)經(jīng)過相同數(shù)量的讀寫和刪除操作后,讀取每塊的擦除次數(shù),分析數(shù)據(jù)得出:原YAFFS中存在擦除次數(shù)為零的塊,而改進后則沒有;原YAFFS的最大擦除次數(shù)與最小擦除次數(shù)的比值是無窮大,而改進后都在平均值附近波動,起伏不大。文件系統(tǒng)加載測試的主要方法是在內(nèi)核源碼和文件系統(tǒng)源碼中添加中斷機制和時鐘,安裝評估系統(tǒng)時間的工具PrintkTimes補丁,運用printk輸出所需數(shù)據(jù)。測試結(jié)果如表1所示。由表1可看出,由于第一次啟動時文件屬性信息還未寫入索引區(qū),系統(tǒng)啟動時間與改進前大致相同,但第二次啟動時索引區(qū)機制開始工作,直接從索引塊中讀取文件信息,修改后的YAFFS啟動時間已有明顯的改善,表明改進策略達到縮短加載時間的目的。

    在以NandFlash為介質(zhì)的嵌入式Linux平臺上構(gòu)建了YAFFS文件系統(tǒng),并在原有YAFFS文件系統(tǒng)的基礎(chǔ)上,對YAFFS的啟動時間和損耗平衡進行優(yōu)化。通過測試證明,啟動時間相比原文件系統(tǒng)縮短了一半以上,且實現(xiàn)了NandFlash的摩擦損耗基本保持平衡,優(yōu)于改進前的文件系統(tǒng)。
參考文獻
[1] 胡德鵬,李仁發(fā).一種微嵌入式Flash文件系統(tǒng)—uEFFS.電子技術(shù)應(yīng)用,2007,33(7):27-29.
[2] 應(yīng)駿,江峰,李莉.嵌入式系統(tǒng)上的文件系統(tǒng)優(yōu)化設(shè)計[J]. 電子技術(shù)應(yīng)用,2007,33(12):141-144.
[3] Cao Lu,Shao Shi.A fast mounting method for NAND Flash file system.computer research and development(ICCRD)[C]. 2011 3rd International Conference,2011:416-420.
[4] 楊春林,雷航.NandFlash的嵌入式文件系統(tǒng)的改進與優(yōu)化[J].計算機應(yīng)用,2007,27(12):3102-3104.
[5] RYU J,PARK C.Fast initialization and memory management Techniques for log-based flash memory file systems, Proceeding[C]. of the International Conference on Embedded and Systems,Daegu,Korea,May,2007.
[6] CHAN S P,TAE H H.Fast mounting method for NAND Flash memory, advanced communication technology(ICACT)    [C]. The 12th International Conference.2011:416-420.
[7] KEE H J,TAE H H.Efficient garbage collection policy and  block management method for NAND Flash memory[C].2010  2nd International Conference on Mechanical and Electronics   Engineering(ICMEE 2010):327-331.
[8] Yuan-Hao Chang,Jen-Wei Hsieh,Tei-WeiKuo.Improving  Flash wear-leveling by proactively moving static data[C]. IEEE Transactions on Computers,January,2010:53-65.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品老牛| 亚洲美女福利视频网站| 欧美精品91| 蜜桃av一区| 另类激情亚洲| 久久久亚洲一区| 久久精品视频在线播放| 欧美在线视屏| 久久国产精品网站| 久久xxxx| 久久久国产午夜精品| 久久疯狂做爰流白浆xx| 欧美亚洲一级| 欧美在线不卡| 久久久国产精彩视频美女艺术照福利| 欧美亚洲专区| 久久久蜜桃精品| 裸体女人亚洲精品一区| 久久亚洲国产精品日日av夜夜| 欧美在线观看视频在线| 欧美一区二区日韩| 久久久久一区二区| 久久综合免费视频影院| 久久亚洲综合网| 欧美成人中文| 欧美日韩精品免费观看视频| 欧美视频国产精品| 国产精品美女久久久久aⅴ国产馆| 国产精品二区在线| 国产麻豆精品视频| 激情久久婷婷| 亚洲精品一区中文| 中文欧美字幕免费| 欧美一区二粉嫩精品国产一线天| 欧美在线观看一二区| 亚洲风情在线资源站| 日韩一二三区视频| 亚洲免费中文字幕| 久久国产视频网| 另类av导航| 欧美日韩色综合| 国产精品自拍视频| 在线观看欧美视频| a4yy欧美一区二区三区| 亚洲综合欧美| 亚洲国产高清在线观看视频| 亚洲免费观看视频| 亚洲欧美一区二区三区极速播放| 久久久777| 欧美日韩国产美女| 国产毛片精品国产一区二区三区| 激情偷拍久久| 一区二区三欧美| 久久国内精品视频| 宅男66日本亚洲欧美视频| 欧美在线看片| 欧美激情视频给我| 国产伦精品免费视频| 亚洲国产综合在线看不卡| 亚洲图片欧美午夜| 亚洲国产中文字幕在线观看| 中文亚洲字幕| 久久久综合网| 欧美午夜精品久久久久久超碰| 国产欧美在线看| 亚洲欧洲精品一区二区三区| 亚洲永久免费观看| 亚洲人成网站777色婷婷| 亚洲一区二区三区中文字幕| 久久九九精品99国产精品| 欧美精品www在线观看| 国产视频欧美视频| 亚洲精品网站在线播放gif| 亚欧成人精品| 在线视频精品一区| 久久亚洲精品欧美| 国产精品久久久久影院色老大| 一区二区三区在线视频播放| 中文av一区特黄| 亚洲区在线播放| 欧美在线日韩| 欧美日韩亚洲激情| 亚洲国产成人午夜在线一区 | 国产一区二区三区在线播放免费观看| 亚洲欧洲另类国产综合| 性视频1819p久久| 亚洲尤物在线| 欧美精品一区视频| 国产一区91| 亚洲在线不卡| 制服丝袜激情欧洲亚洲| 欧美成人一区在线| 狠狠色狠狠色综合日日tαg| 亚洲一区二区免费视频| 野花国产精品入口| 欧美成人激情在线| 国内偷自视频区视频综合| 亚洲一区二区影院| 亚洲天堂av在线免费| 欧美激情精品久久久久久| 激情欧美一区二区| 久久国产精品免费一区| 久久狠狠一本精品综合网| 国产精品久久久对白| 亚洲免费激情| 一本一本a久久| 欧美美女操人视频| 最新成人在线| 亚洲日本中文| 欧美成人自拍视频| 亚洲第一福利视频| 亚洲国产精品v| 另类图片综合电影| 黄色亚洲大片免费在线观看| 欧美一区二区三区另类| 欧美影院视频| 国产亚洲午夜高清国产拍精品| 亚洲欧美成aⅴ人在线观看| 亚洲免费中文| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲免费观看高清在线观看| 亚洲免费av片| 欧美伦理91i| 亚洲精品国偷自产在线99热| 亚洲免费观看高清完整版在线观看| 欧美aⅴ一区二区三区视频| 1769国产精品| 亚洲精品美女在线观看播放| 欧美激情视频一区二区三区在线播放 | 欧美精品电影| 亚洲免费av片| 亚洲免费网址| 国产伦精品一区二区三区照片91| 亚洲欧美制服另类日韩| 久久精品视频在线观看| 影音先锋国产精品| 亚洲精品四区| 欧美性大战久久久久久久| 亚洲女性喷水在线观看一区| 久久国产精品久久国产精品| 国内视频精品| 亚洲毛片在线免费观看| 欧美午夜精品久久久久久浪潮| 亚洲一区免费| 久久乐国产精品| 亚洲欧洲三级| 亚洲欧美日韩中文视频| 国产一区二区电影在线观看| 亚洲狠狠丁香婷婷综合久久久| 欧美精品一区二区三区久久久竹菊 | 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲欧美国产三级| 久久婷婷国产综合尤物精品 | 亚洲人成网站色ww在线| 亚洲一区久久久| 国产一区二区三区久久| 亚洲伦理久久| 国产精品视频第一区| 亚洲欧美中文日韩在线| 欧美成人精品影院| 一区二区三区三区在线| 久久久久久久成人| 亚洲精品中文字幕有码专区| 亚洲欧美精品| 亚洲高清三级视频| 亚洲欧美网站| 亚洲成人在线视频网站| 亚洲专区国产精品| 激情视频亚洲| 亚洲自拍偷拍色片视频| 在线国产精品一区| 亚洲在线国产日韩欧美| 一区精品在线播放| 亚洲欧美www| 亚洲狠狠丁香婷婷综合久久久| 亚洲欧美日韩爽爽影院| 在线成人小视频| 亚洲欧美成人一区二区三区| 永久免费视频成人| 亚洲欧美日韩中文在线制服| 在线观看三级视频欧美| 亚洲欧美国产精品桃花 | 亚洲激情电影在线| 久久国产精品99国产| 亚洲日本va午夜在线影院| 欧美在线视频免费观看| 日韩视频免费观看高清完整版| 久久久久久久性| 一区二区三区免费看| 免费在线看成人av| 欧美亚洲一区| 国产精品xvideos88| 亚洲精品乱码| 国产午夜精品麻豆| 亚洲主播在线观看| 亚洲精品之草原avav久久| 免费永久网站黄欧美| 亚洲欧美色一区| 国产精品久久久久一区| 一区二区三区四区精品|