《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM和Linux的嵌入式平臺的構建
基于ARM和Linux的嵌入式平臺的構建
來源:微型機與應用2011年第12期
曾福振,閔聯營
(武漢理工大學 計算機科學與技術學院,湖北 武漢430063)
摘要: 首先介紹了嵌入式系統的概念,及相關硬件平臺和軟件版本。然后,主要介紹了嵌入式Linux的引導程序U-Boot的移植,以及開源、免費操作系統Linux2.6.32.2的移植。最后,構建了基于Nand Flash存儲器的Yaffs2文件系統,利用BusyBox創建根文件系統?;贏RM和嵌入式Linux的嵌入式系統平臺搭建基本完成,可以在此平臺上添加更多驅動,以便更好地開發應用程序。
Abstract:
Key words :

摘  要: 首先介紹了嵌入式系統的概念,及相關硬件平臺和軟件版本。然后,主要介紹了嵌入式Linux的引導程序U-Boot移植,以及開源、免費操作系統Linux2.6.32.2的移植。最后,構建了基于Nand Flash存儲器的Yaffs2文件系統,利用BusyBox創建根文件系統。基于ARM和嵌入式Linux的嵌入式系統平臺搭建基本完成,可以在此平臺上添加更多驅動,以便更好地開發應用程序。
關鍵詞: 嵌入式;Linux;U-Boot;移植

 進入后PC時代以來,伴隨著設計和制造技術的發展,集成電路從當初的晶體管集成發展到現在的IP集成,即SoC(System on Chip)設計技術。促使嵌入式系統滲透到了當今社會中的各個行業,并且發揮越來越重要的作用。嵌入式系統一般可定義為以應用為中心、以計算機技術為基礎、軟硬件可裁剪、適用于應用系統且對功能、成本、體積、功耗有嚴格要求的專用計算機系統,它的主要特點是嵌入、應用[1]。
    隨著各種嵌入式設備功能越來越強大,在設備中使用嵌入式操作系統也成為必然。Linux操作系統具有開放源代碼、易于移植、資源豐富、免費等特點,在嵌入式領域的地位越來越重要。嵌入式Linux和PC上的Linux是同一套內核代碼,只是裁剪的程度不一樣,所以,很多在PC上開發的軟件,經過交叉編譯后可以直接在嵌入式設備上運行。本文主要涉及到Bootloader移植和Linux-2.6.32.2內核的移植、根文件系統移植、在S3C2440平臺上構建完整的嵌入式開發平臺三個方面。
1 交叉開發環境的建立
    在進行嵌入式軟件開發之前,必須要在PC上建立ARM的交叉編譯環境。交叉編譯就是在PC平臺上生成可以在ARM平臺上運行的代碼。其中主要包括ARM的交叉編譯器arm-elf-gcc和交叉連接器arm-elf-ld。本文采用的交叉編譯器的版本是gcc-3.4.5-glibc-2.3.6[2]。交叉編譯流程如圖1所示。


2 BootLoader引導加載程序
 BootLoader是一段在系統上電時開始執行的程序,用以初始化硬件設備,準備好軟件環境,設置好啟動參數,最后引導操作系統,與PC上的BIOS程序相似。當前開放源碼的Linux引導程序主要有x86架構的LILO、GRUB,對于ARM架構的主要有Vivi和U-Boot。本文使用U-Boot作為引導程序。U-Boot(Universal Boot Loader),即通用的BootLoader,遵循GPL條款開放源代碼。U-Boot相對于Vivi功能更加強大,也更方便后續程序的調試。
    BootLoader的啟動一般分為兩個階段,第一階段的代碼主要是用匯編語言編寫,主要的功能是完成硬件設備的初始化,為加載第二階段的代碼準備RAM空間,設置好堆棧;第二階段主要用C語言編寫,檢測內存映射,將內核映像和根文件系統從Nand Flash讀到RAM中,為內核啟動設置參數,引導內核。
    U-Boot的源代碼可以從ftp://ftp.denx.de/pub/u-boot/進行下載,本文使用的U-Boot版本是U-Boot2009.08。
    移植U-Boot的關鍵步驟如下:
    (1)首先,將include/configs目錄下的smdk2410.h復制并改名為mini2440.h,根據U-Boot的說明可以知道,如果要使用開發板board/<board_name>,則先執行“make<board_name>”_config命令進行配置,然后執行“make all”,生成可執行文件。所以,修改U-Boot頂層的Makefile文件,添加下面一行mini2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 frank s3c24x0。這里有幾個重要的參數,arm指CPU的架構,arm920t指CPU的類型,s3c24x0指CPU的型號。這樣就可以使用make mini2440_config 這條命令進行配置。
    (2)本文使用的U-Boot是從Nand Flash啟動的, CPU可以直接訪問Nand Flash中前4 KB代碼,利用這4 KB代碼把U-Boot中絕大部分代碼拷貝到內存中[3]。其中下面的代碼就是調用C語言中的Nand Flash的讀寫函數,該函數主要把Nand Flash中4 KB以后的代碼復制到RAM中。在編寫nand_read_ll的函數時,注意參考Nand Flash的數據手冊,對大頁和小頁的Nand Flash,其讀寫的命令和時序是不同的。
    @copy U-Boot to RAM
    ldr r0,=TEXT_BASE
    mov r1,#0x0
    mov r2,#0x60000
    bl nand_read_ll
    tst r0,#0x0
    beq ok_nand_read
    由于在后面加載Linux內核和根文件系統時,使用的是tftp方式,所以必須添加DM9000EP網卡的驅動。在mini2440.h文件中,其主要的配置如下:
    #define CONFIG_DRIVER_DM9000 1
    #define CONFIG_NET_MULTI 1
    #define CONFIG_DM9000_NO_SROM 1
    #define CONFIG_DM9000_BASE 0x20000300
    #define DM9000_DATA (CONFIG_DM9000_BASE +4)
其中,CONFIG_DM9000_BASE宏是最重要的,因為它定義的是網卡的地址,不同的網卡有不同的地址,DM9000EP訪問的基址為0x20000000,之所以再偏移0x300是由它的特性決定的。
    (3)要正確引導Linux內核,還需要配置下面幾個重要的宏定義,這幾個宏定義不同,意味著引導Linux內核的方式也不同。
    #define CONFIG_BOOTARGS"noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 mem=64M"
其中,root=/dev/mtdblock3是由Linux中的Nand Flash分區所決定的,意味著Nand Flash的第4個分區為根文件系統。
    #define CONFIG_BOOTCOMMAND"nand read 0x32000000 0x60000 0x560000;bootm 0x32000000"
    這個宏定義是將Nand Flash中0x60000-0x560000(和kernel分區一致)的內容讀到內存0x32000000中,然后用bootm命令來執行。
    要正常地引導Linux內核,必須要具備如下幾個條件[4]:
    (1)CPU寄存器
    R0=0;
    R1=機器類型ID;對于ARM結構的CPU,其機器類型ID在linux/arch/arm/tools/mach-types;
    R2=啟動參數標記列表在RAM中起始基地址。
    (2)CPU工作模式
    必須禁止中斷(IRQs和FIQs);
    CPU必須為SVC模式。
    (3)Cach和MMU的設置
    MMU必須關閉;
    指令Cach可以打開也可以關閉;
    數據Cach必須關閉。
3 Linux2.6.32.2內核的移植
3.1 內核的獲取

    Linux內核的更新很快,可以從http://www.kernel.org/pub/linux/kernel/得到最新的Linux內核版本,本文使用的Linux內核版本是Linux-2.6.32.2, 交叉編譯工具使用符合EABI標準的arm-linux-gcc-4.3.2。
3.2 內核的移植
    可以在內核的根目錄下,運行make menuconfig命令,對內核進行適當的裁剪,以適應硬件平臺。
    (1)修改Makefile文件
    欲設置Linux的默認平臺為ARM平臺,需進入Linux-2.6.32文件夾中,修改此目錄下的Makefile文件。
    export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?=arm//使用的目標平臺
CROSS_COMPILE ?=arm-linux-//使用的交叉編譯器,
這里使用系統默認的編譯器
    (2)關于機器碼
    在啟動內核時,根據BootLoader傳入的機器碼(MACH_TYPE)來決定應啟動哪種目標平臺[6],本開發平臺的機器碼為1999。機器碼存放在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types中。
    mini2440   MACH_MINI2440   MINI2440   1999//機器碼
    如果機器碼不匹配,引導內核不成功,則會出現如下的錯誤提示:
    Uncompressing
Linux…………………………………………………………………
…………done, booting the kernel.
    (3)修改時鐘源
    將/kernel/linux-2.6.32.2/arch/arm/mach-s3c2440/目錄下的mach-smdk2440.c文件改名為mach-mini2440.c。因為mini2440和mach-smdk2440.c極其相似,以該文件為基礎進行修改,在mach-mini2440.c文件中將static void__init smdk2440_map_io(void)函數中的晶振頻率修改為mini2440 開發板上實際使用的12000000。
?。?)為內核打上yaffs2補丁
    ①Yaffs2文件系統是專門針對嵌入式設備,特別是使用Nand Flash作為存儲器的嵌入式設備而創建的一種文件系統,使用yaffs2就可以支持大頁的Nand Flash。進入 yaffs2 源代碼目錄執行如下命令:
    #./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32.2
    ②配置內核以支持Yaffs2文件系統
    在Linux內核源代碼根目錄運行make xconfig,在“File Systems”選項中,找到“Miscellaneous filesystems”菜單項,找到“YAFFS2 file system support”并選中它,這樣就在內核中添加了yaffs2 文件系統的支持,保存并退出。然后在命令行中,執行make zImage。
    (5)修改Nand Flash分區信息
    ①在mach-mini2440.c文件中添加Nand Flash的分區信息,下面的代碼將Nand Flash分成了4個分區,第1分區也是BootLoader所在的分區,對應dev/mtdblock0;第2個分區是U-Boot的參數分區,對應dev/mtdblock1;第3個分區是內核分區,對應dev/mtdblock2;第4個分區為根文件系統分區對應dev/mtdblock3。分區結構圖如表1所示。

    其部分實現代碼如下:
    static struct mtd_partition mini2440_default_nand_part[] ={
    [0] = {
        .name="U-boot",
    .offset= 0,
        .size= 0x00040000,
    }
其中 name是分區的名字,offset是偏移的開始地址,size是分區的大小,其余部分的分區與此類似。
    ②下面代碼是添加Nand Flash的設置表,因為板子上只有一片Nand Flash,因此也就只有一個設置表。
    static struct s3c2410_nand_set mini2440_nand_sets[] = {
    [0] = {
        .name= "NAND",
        .nr_chips= 1,
        .nr_partitions=
ARRAY_SIZE(mini2440_default_nand_part),
        .partitions= mini2440_default_nand_part,
    }
    }
    ③上面的設置完成后,還需要將Nand Flash 設備注冊到系統中。下面這段代碼就是將Nand Flash設備添加到開發板的設備列表結構。
    static struct platform_device *mini2440_devices[] __initdata = {
    &s3c_device_nand,
    }
    ④在mini2440_machine_init函數中添加平臺的數據信息。
    static void __init mini2440_machine_init(void){
    s3c_device_nand.dev.platform_data=&mini2440_nand_info;
    }
    現在可以進入kernel/linux-2.6.32.2/arch/arm/boot目錄,然后執行下面的命令,就會在該目錄下生成uImage.img格式的、U-Boot可以引導的內核鏡象。
    Mkimage –n ‘linux-2.6.32.2’ –A arm –O linux –T kernel –C none –a 0x30008000 –e 0x30008000 –d zImage uImage.img
    至此,可以把生成的uImage.img格式的鏡像文件復制到tftp目錄下,使用tftp進行下載。
3.3 文件系統
    所謂根文件系統,就是創建各個目錄,例如在/bin、/sbin/目錄下存放各種可執行的程序,在/etc目錄下存放配置文件,在/lib目錄下存放庫文件。
    可以利用Busybox工具創建根文件系統,Bosybox 是一個遵循 GPL v2協議的開源項目,它在編寫過程中對文件大小進行優化,并考慮了系統資源有限(例如內存)的情況,使用 Busybox可以自動生成根文件系統所需的bin、sbin、usr 目錄和 linuxrc 文件,可以使用make menuconfig對Busybox的選項進行配置。
    (1)進入opt/kernel,創建一個shell腳本用于構建根文件系統的各個目錄,并且為其增加執行權限;
    (2)Linux中的init進程會根據etc/inittab文件創建其他子進程,下面代碼是inittab文件中的內容,說明了系統啟動后首先執行的腳本文件是rcS,虛擬的終端是串口0,當按下ctr+alt+del時重啟系統,inittab文件的作用就是控制系統啟動時和啟動后一些程序的運行。
    #etc/inittab
    ::sysinit:/etc/init.d/rcS
    s3c2410_serial0::askfirst:-/bin/sh
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a-r
    (3)創建etc/init.d/rcS文件,這是一個腳本文件,可以在里面添加要自動執行的一些命令。
    #!/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    runlevel=S//運行的級別
    prevlevel=N
    umask 022//文件夾的掩碼
    mount -a//掛載/etc/fstab/文件指定的所有的文件系統
    mdev-s
    /bin/hostname -F /etc/sysconfig/HOSTNAME//主機的名字
    使用yaffs源碼提供的工具制作文件系統的映像文件。由于128 MB的Nand Flash是大頁結構,所以需要使用相應的大頁制作工具;使用命令mkyaffs2image rootfs rootfs.img生成根文件系統映像文件。
    本文通過對U-Boot移植和Linux內核移植的討論,給出了移植U-Boot和Linux到大多數開發板的關鍵部分。由于移植的復雜性,不可能包括全部步驟,但通過本文的闡述可以了解移植的基本流程和關鍵點,為移植不同版本到其他硬件平臺提供了參考,也為應用程序的開發搭建了一個比較完整的嵌入式平臺。
參考文獻
[1] 韋東山.嵌入式Linux應用開發完成手冊[M].北京:人民郵電出版社,2008.
[2] 孫瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2006.
[3] Samsung Electronics.S3C2440A 32-bit RISC microprocessor user′s manual[S].2004.
[4] RUSSELL K.ARM Linux kernel Boot requirements[EB/OL].  [2002-03-18].http://www.arm.linux.org.uk/developer/booting.php.
[5] 陳莉君.深入理解Linux內核[M].北京:中國電力出版社,2007.
[6] JONATHAN C,ALESSANDRO R,GREG KROAH H.Linux 設備驅動程序[M].北京:中國電力出版社,2006.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美影院成人| 国产精品第十页| 亚洲午夜在线观看视频在线| 9l国产精品久久久久麻豆| 亚洲婷婷国产精品电影人久久| 国产精品久久久久毛片软件| 亚洲香蕉成视频在线观看| 欧美成人自拍视频| 伊人久久大香线蕉av超碰演员| 国产精品尤物| 久久成人资源| 欧美一区三区二区在线观看| 久久综合久久久| 国产毛片精品视频| 欧美1区2区| 欧美诱惑福利视频| 久久狠狠亚洲综合| 欧美久久综合| 亚洲高清色综合| 亚洲毛片在线看| 99热这里只有成人精品国产| 一区免费观看| 玉米视频成人免费看| 亚洲免费高清视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 一区二区日韩| 久久综合色影院| 欧美激情在线有限公司| 亚洲精品在线电影| 国产精品高潮久久| 黄色精品一区二区| 亚洲欧美日韩天堂一区二区| 亚洲欧洲av一区二区| 久久成人18免费观看| 欧美日韩亚洲综合一区| 国产偷久久久精品专区| 久久久久网站| 国产精品亚洲а∨天堂免在线| 久久久亚洲国产美女国产盗摄| 欧美大片免费观看| 在线视频一区观看| 亚洲一区二区三区三| 中国成人亚色综合网站| 欧美午夜理伦三级在线观看| 国产一区二区三区视频在线观看| 久久琪琪电影院| 欧美波霸影院| 亚洲毛片在线观看| 欧美—级在线免费片| 欧美精品日韩三级| 国产精品va| 欧美大色视频| 久久人体大胆视频| 欧美激情精品久久久久久黑人| 国产精品国产三级国产普通话99| 亚洲成人资源| 国产区欧美区日韩区| 久久久xxx| 国产精品美女久久久浪潮软件| 亚洲男人av电影| 久久影院午夜论| 久久成人18免费网站| 麻豆国产va免费精品高清在线| 久久久久九九视频| 在线日韩日本国产亚洲| 欧美夫妇交换俱乐部在线观看| 亚洲一区二区成人| 一本色道88久久加勒比精品| 欧美大片在线看免费观看| 欧美亚州韩日在线看免费版国语版| 国产欧美日韩伦理| 国产精品视频| 一色屋精品亚洲香蕉网站| 久久精品国产96久久久香蕉| 99国产精品久久久久久久久久| 国产精品美女主播在线观看纯欲| 欧美日韩一区免费| 日韩小视频在线观看| 欧美日韩1234| 欧美精品成人一区二区在线观看| 国产日韩精品久久久| 欧美午夜视频在线观看| 免费91麻豆精品国产自产在线观看| 久久久久久久久一区二区| 亚洲电影免费| 国产精品素人视频| 亚洲精品欧美日韩| 亚洲免费大片| 国产综合自拍| 国产日韩精品视频一区| 欧美va亚洲va香蕉在线| 美女网站久久| 亚洲免费人成在线视频观看| 亚洲免费在线精品一区| 亚洲日本成人女熟在线观看| 国产精品毛片在线看| 欧美精品久久天天躁| 久久久久五月天| 性刺激综合网| 国产精品porn| 亚洲精选大片| 日韩视频在线免费观看| 久久久亚洲影院你懂的| 久久久亚洲欧洲日产国码αv| 欧美日韩国产色综合一二三四| 亚洲一区精品视频| 久久久久成人精品| 国产精品va| 一本色道久久综合亚洲精品婷婷| 欧美日韩国产成人精品| 午夜精品一区二区在线观看| 午夜久久资源| 亚洲一区二区三区成人在线视频精品| 久久精品麻豆| 欧美视频中文字幕| 国产综合久久久久影院| 午夜国产不卡在线观看视频| 欧美日韩亚洲综合在线| 欧美激情自拍| 欧美午夜精品久久久久久孕妇| 另类国产ts人妖高潮视频| 国产欧美日韩精品丝袜高跟鞋| 欧美激情一区二区三区| 亚洲视频一区二区在线观看| 国产精品成人一区二区网站软件| 亚洲欧美制服中文字幕| 久久久久久午夜| 亚洲激情国产| 99re亚洲国产精品| 欧美一区二区高清在线观看| 国产综合在线看| 国语对白精品一区二区| 麻豆精品传媒视频| 欧美在线观看一区二区| 亚洲女女女同性video| 西瓜成人精品人成网站| 亚洲激情成人网| 亚洲欧洲在线视频| 国产精品一区二区你懂得| 久久精品99久久香蕉国产色戒| 欧美视频不卡中文| 尤物yw午夜国产精品视频明星| 亚洲人成网站999久久久综合| 国产无遮挡一区二区三区毛片日本| 老司机成人在线视频| 国产一区久久久| 精品成人在线观看| 亚洲人永久免费| 激情成人在线视频| 国产精品久久久久久久久久直播| 国产亚洲精久久久久久| 欧美激情综合色综合啪啪| 亚洲国产国产亚洲一二三| 欧美午夜视频在线观看| 亚洲激精日韩激精欧美精品| 日韩午夜一区| 亚洲激情av在线| 娇妻被交换粗又大又硬视频欧美| 欧美中文日韩| 欧美日韩成人一区二区| 欧美日韩免费高清| 亚洲第一页在线| 亚洲精品黄网在线观看| 亚洲线精品一区二区三区八戒| 欧美国产亚洲视频| 一本大道av伊人久久综合| 亚洲承认在线| 亚洲欧美在线视频观看| 欧美不卡视频一区| 亚洲激情偷拍| 在线亚洲一区| 亚洲欧洲一区二区三区在线观看| 国产一区二区三区日韩欧美| 国产亚洲综合性久久久影院| 国产精品亚洲成人| 黄色在线成人| 国产精品xxxxx| 欧美激情一区二区三区高清视频| 亚洲欧美综合一区| 欧美在线视频全部完| 久久精品国产综合精品| 亚洲精品久久久久久下一站| 在线看片欧美| 你懂的一区二区| 亚洲国产乱码最新视频| 一区二区三区精品| 欧美日韩色婷婷| 国产精品一区二区久久久久| 一色屋精品亚洲香蕉网站| 国产精品丝袜久久久久久app| 亚洲丁香婷深爱综合| 欧美三级在线| 国产精品成人一区二区| 欧美日韩视频一区二区| 亚洲精品日韩激情在线电影| 国产精品久久久久久妇女6080| 欧美国产欧美亚洲国产日韩mv天天看完整| 伊人成人开心激情综合网| 国产日韩亚洲| 久久综合九色综合欧美就去吻| 99国产精品视频免费观看一公开| 99精品视频一区二区三区| 久久精品视频播放| 亚洲免费视频一区二区| 欧美va天堂在线| 久久久精品国产免大香伊| 欧美高清不卡在线| 欧美日韩的一区二区| 亚洲欧洲另类| 久久久久久久久久码影片| 国产情人节一区| 欧美精品一区二区高清在线观看| 亚洲欧洲另类国产综合| 国产欧美日韩另类视频免费观看| 国产精品美女| 久久夜色撩人精品| 先锋影音一区二区三区| 国产精品yjizz| 国产亚洲视频在线| 亚洲精品老司机| 一区二区高清| 欧美视频一区二| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲国产精品久久久久婷婷老年| 欧美国产日韩一区二区在线观看| 西瓜成人精品人成网站| 国精产品99永久一区一区| 免费在线一区二区| 久久一区二区三区四区| 亚洲影院高清在线| 伊甸园精品99久久久久久| 日韩视频一区二区在线观看| 亚洲欧洲日夜超级视频| 亚洲欧洲一区二区三区在线观看| 亚洲欧美成人| 亚洲宅男天堂在线观看无病毒| 国产曰批免费观看久久久| 亚洲黄色av| 另类av一区二区| 麻豆乱码国产一区二区三区| 欧美日韩三级电影在线| 亚洲在线一区二区三区| 亚洲第一区在线| 亚洲福利在线观看| 久久一区二区三区超碰国产精品| 久久九九免费| 亚洲精品欧美精品| 国产精品午夜久久| 午夜欧美精品| 午夜精品久久久久久久久久久久| 国产人成一区二区三区影院| 亚洲视频一二三| 国产精品扒开腿做爽爽爽视频| 亚洲二区在线| 欧美激情影院| 在线观看亚洲| 国内精品伊人久久久久av影院| 久久精品99久久香蕉国产色戒| 一本色道精品久久一区二区三区| 国产精品成av人在线视午夜片| 国产精品magnet| 中文欧美在线视频| 一本色道精品久久一区二区三区| 亚洲精品国产精品久久清纯直播| 国产精品成人一区二区艾草| 国产又爽又黄的激情精品视频| 久热爱精品视频线路一| 噜噜噜躁狠狠躁狠狠精品视频| 欧美性猛交一区二区三区精品| 日韩亚洲欧美在线观看| 正在播放亚洲| 午夜在线一区二区| 亚洲一区www| 国产精品一区二区三区久久久| 亚洲国产精品久久久久久女王| 亚洲免费激情| 久久久久亚洲综合| 久久精品道一区二区三区| 亚洲在线视频网站| 国产精品日韩一区| 亚洲性人人天天夜夜摸| 国产精品久久9| 欧美另类videos死尸| 国产精品美女视频网站| 久久国产精品电影| 国产裸体写真av一区二区| 久久一区二区三区四区| 黄色亚洲大片免费在线观看| 国产精品电影网站| 欧美在线1区| 亚洲国产精品久久久久久女王| 一区二区国产日产| 亚洲一区图片| 久久久久久国产精品一区| 欧美在线视频一区二区| 国产精品美女久久久浪潮软件| 狠狠色狠狠色综合| 国产精品久久午夜| 亚洲色在线视频| 一区二区三区成人| 欧美视频在线不卡| 久久久国产一区二区| 亚洲一二区在线| 欧美成人资源网| 亚洲自拍电影| 国产精品久久久久久久久久久久久久| 在线日韩成人| 国产精品亚洲一区二区三区在线| 欧美91精品| 亚洲国产精品精华液2区45| 在线免费观看日韩欧美| 亚洲欧美日本另类| 欧美精品一区二区高清在线观看| 亚洲福利在线视频| 在线看国产一区| 在线视频你懂得一区| 一区二区在线不卡| 亚洲一区二区三区视频| 亚洲精品国产精品国自产观看| 国产精品美女视频网站| 欧美极品色图| 欧美激情一级片一区二区| 在线观看国产一区二区| 在线视频国内自拍亚洲视频| 国产字幕视频一区二区| 久久在线免费观看视频| 欧美一区亚洲一区| 国产精品sm|