久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

發布時間:2023/12/31 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1)實驗平臺:正點原子阿爾法Linux開發板
2)平臺購買地址:https://item.taobao.com/item.htm?id=603672744434
2)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/thread-300792-1-1.html
3)對正點原子Linux感興趣的同學可以加群討論:935446741
4)關注正點原子公眾號,獲取最新資料更新

第三十三章 U-Boot移植

上一章節我們詳細的分析了uboot的啟動流程,對uboot有了一個初步的了解。前兩章我們都是使用的正點原子提供的uboot,本章我們就來學習如何將NXP官方的uboot移植到正點原子的I.MX6ULL開發板上,學習如何在uboot中添加我們自己的板子。

33.1 NXP官方開發板uboot編譯測試
33.1.1 查找NXP官方的開發板默認配置文件
uboot的移植并不是說我們完完全全的從零開始將uboot移植到我們現在所使用的開發板或者開發平臺上。這個對于我們來說基本是不可能的,這個工作一般是半導體廠商做的,半導體廠商負責將uboot移植到他們的芯片上,因此半導體廠商都會自己做一個開發板,這個開發板就叫做原廠開發板,比如大家學習STM32的時候聽說過的discover開發板就是ST自己做的。半導體廠商會將uboot移植到他們自己的原廠開發板上,測試好以后就會將這個uboot發布出去,這就是大家常說的原廠BSP包。我們一般做產品的時候就會參考原廠的開發板做硬件,然后在原廠提供的BSP包上做修改,將uboot或者linux kernel移植到我們的硬件上。這個就是uboot移植的一般流程:
①、在uboot中找到參考的開發平臺,一般是原廠的開發板。
②、參考原廠開發板移植uboot到我們所使用的開發板上。
正點原子的I.MX6ULL開發板參考的是NXP官方的I.MX6ULL EVK開發板做的硬件,因此我們在移植uboot的時候就可以以NXP官方的I.MX6ULL EVK開發板為藍本。
本章我們是將NXP官方的uboot移植到正點原子的I.MX6ULL開發板上,NXP官方的uboot放到了開發板光盤中,路徑為:1、例程源碼->4、NXP官方原版Uboot和Linux->uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。將uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2發送到Ubuntu中并解壓,然后創建VSCode工程。
在移植之前,我們先編譯一下NXP官方I.MX6ULL EVK開發板對應的uboot,首先是配置uboot,configs目錄下有很多跟I.MX6UL/6ULL有關的配置如圖33.1.1.1所示,

圖33.1.1.1 NXP官方I.MX6UL/6ULL默認配置文件
從圖33.1.1.1可以看出有很多的默認配置文件,其中以mx6ul開頭的是I.MX6UL芯片的,mx6ull開頭的是I.MX6ULL開發板的。I.MX6UL/6ULL有9x9mm和14x14mm兩種尺寸的,所以我們可以看到會有mx6ull_9x9和mx6ull_14x14開頭的默認配置文件。我們使用的是14x14mm的芯片,所以關注mx6ull_14x14開頭的默認配置文件。正點原子的I.MX6ULL有EMMC和NAND兩個版本的,因此我們最終只需要關注mx6ull_14x14_evk_emmc_defconfig和mx6ull_14x14_evk_nand_defconfig這兩個配置文件就行了。本章我們講解EMMC版本的移植(NAND版本移植很多類似),所以使用mx6ull_14x14_evk_emmc_defconfig作為默認配置文件。
33.1.2 編譯NXP官方開發板對應的uboot
找到NXP官方I.MX6ULL EVK開發板對應的默認配置文件以后就可以編譯一下,使用如下命令編譯uboot:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
編譯完成以后結果如圖33.1.2.1所示:

圖33.1.2.1 編譯結果
從圖33.1.2.1可以看出,編譯成功。我們在編譯的時候需要輸入ARCH和CORSS_COMPILE這兩個變量的值,這樣太麻煩了。我們可以直接在頂層Makefile中直接給ARCH和CORSS_COMPILE賦值,修改如圖33.1.2.2所示:

圖33.1.2.2 添加ARCH和CROSS_COMPILE值
圖33.1.2.2中的250、251行就是直接給ARCH和CROSS_COMPILE賦值,這樣我們就可以使用如下簡短的命令來編譯uboot了:
make mx6ull_14x14_evk_emmc_defconfig
make V=1 -j16
如果既不想修改uboot的頂層Makefile,又想編譯的時候不用輸入那么多,那么就直接創建個shell腳本就行了,shell腳本名為mx6ull_14x14_emmc.sh,然后在shell腳本里面輸入如下內容:
示例代碼33.1.2.1 mx6ull_14x14_emmc.sh文件

1 #!/bin/bash 2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig 4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 記得給mx6ull_14x14_emmc.sh這個文件可執行權限,使用mx6ull_14x14_emmc.sh腳本編譯uboot的時候每次都會清理一下工程,然后全部重新編譯,編譯的時候直接執行這個腳本就行了,命令如下:

./mx6ull_14x14_evk_emmc.sh
編譯完成以后會生成u-boot.bin、u-boot.imx等文件,但是這些文件是NXP官方I.MX6ULL EVK開發板。能不能用到正點原子的I.MX6ULL開發板上呢?試一下不就知道了!
33.1.3 燒寫驗證與驅動測試
將imxdownload軟件拷貝到uboot源碼根目錄下,然后使用imxdownload軟件將u-boot.bin燒寫到SD卡中,燒寫命令如下:
chmod 777 imxdownload //給予imxdownload可執行權限
./imxdownload u-boot.bin /dev/sdd //燒寫到SD卡中,不能燒寫到/dev/sda或sda1里面
燒寫完成以后將SD卡插入I.MX6U-ALPHA開發板的TF卡槽中,最后設置開發板從SD卡啟動。打開SecureCRT,設置好開發板所使用的串口并打開,復位開發板,SecureCRT接收到如下圖33.1.3.1所示信息:

圖33.1.3.1 uboot啟動信息
從圖33.1.3.1可以看出,uboot啟動正常,雖然我們用的是NXP官方I.MX6ULL開發板的uboot,但是在正點原子的I.MX6ULL開發板上是可以正常啟動的。而且DRAM識別正確,為512MB,如果用的NAND版本的核心版的話uboot啟動會失敗!因為NAND核心版用的256MB的DRAM。
1、SD卡和EMMC驅動檢查
檢查一下SD卡和EMMC驅動是否正常,使用命令mmc list列出當前的MMC設備,結果如圖33.1.3.2所示:

圖33.1.3.2 emmc設備檢查
從圖33.1.3.2可以看出當前有兩個MMC設備,檢查每個MMC設備信息,先檢查MMC設備0,輸入如下命令:
mmc dev 0
mmc info
結果如圖33.1.3.3所示:

圖33.1.3.3 mmc設備0信息
從圖33.1.3.3可以看出,mmc設備0是SD卡,SD卡容量為14.8GB,這個和我所使用的SD卡信息相符,說明SD卡驅動正常。再來檢查MMC設備1,輸入如下命令:
mmc dev 1
mmc info
結果如圖33.1.3.4所示:

圖33.1.3.4 mmc設備1信息
從圖33.1.3.4可以看出,mmc設備1為EMMC,容量為7.3GB,說明EMMC驅動也成功,SD卡和EMMC的驅動都沒問題。
2、LCD驅動檢查
如果uboot中的LCD驅動正確的話,啟動uboot以后LCD上應該會顯示出NXP的logo,如下圖33.1.3.5所示:

圖33.1.3.5 uboot LCD界面
如果你用的不是正點原子的4.3寸480x272分辨率的屏幕的話,那么LCD就不會顯示33.1.3.5所示logo界面。因為NXP官方I.MX6ULL開發板的屏幕就是4.3寸480x272分辨率的,所以uboot默認LCD驅動是4.3寸480x272分辨率的。如果使用其他分辨率的LCD就需要修改LCD驅動,這里我們先不修改LCD驅動了,稍后我們在講解如何修改uboot中的LCD驅動,我們只需要記得,uboot的LCD需要修改就行了。
3、網絡驅動
uboot啟動的時候提示“Board Net Initialization Failed”和“No ethernet found.”這兩行,說明網絡驅動也有問題,正常情況下應該是如圖33.1.3.6所示提示:

圖33.1.3.6 網絡信息
現在沒有圖33.1.3.6中的信息,那更別說ping一下ubuntu主機了,說明當前uboot的網絡部驅動也是有問題的,這是因為正點原子開發板的網絡芯片復位引腳和NXP官方開發板不一樣,因此需要修改驅動。
總結一下NXP官方I.MX6ULL EVK開發板的uboot在正點原子EMMC版本I.MX6ULL 開發板上的運行情況:
①、uboot啟動正常,DRAM識別正確,SD卡和EMMC驅動正常。
②、uboot里面的LCD驅動默認是給4.3寸480x272分辨率的,如果使用的其他分辨率的屏幕需要修改驅動。
③、網絡不能工作,識別不出來網絡信息,需要修改驅動。
接下來我們要做的工作如下:
①、前面我們一直使用著NXP官方開發板的uboot配置,接下來需要在uboot中添加我們自己的開發板,也就是正點原子的I.MX6ULL開發板。
②、解決LCD驅動和網絡驅動的問題。
33.2 在U-Boot中添加自己的開發板
NXP官方uboot中默認都是NXP自己的開發板,雖說我們可以直接在官方的開發板上直接修改,使uboot可以完整的運行在我們的板子上。但是從學習的角度來講,這樣我們就不能了解到uboot是如何添加新平臺的。接下來我們就參考NXP官方的I.MX6ULL EVK開發板,學習如何在uboot中添加我們的開發板或者開發平臺。
33.2.1 添加開發板默認配置文件
先在configs目錄下創建默認配置文件,復制mx6ull_14x14_evk_emmc_defconfig,然后重命名為mx6ull_alientek_emmc_defconfig,命令如下:
cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig
然后將文件mx6ull_alientek_emmc_defconfig中的內容改成下面的:
示例代碼33.2.1.1 mx6ull_alientek_emmc_defconfig文件

1 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_ emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 2 CONFIG_ARM=y 3 CONFIG_ARCH_MX6=y 4 CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC=y 5 CONFIG_CMD_GPIO=y 可以看出,mx6ull_alientek_emmc_defconfig基本和mx6ull_14x14_evk_emmc_defconfig中的內容一樣,只是第1行和第4行做了修改。

33.2.2 添加開發板對應的頭文件
在目錄include/configs下添加I.MX6ULL-ALPHA開發板對應的頭文件,復制include/configs/mx6ullevk.h,并重命名為mx6ull_alientek_emmc.h,命令如下:
cp include/configs/mx6ullevk.h mx6ull_alientek_emmc.h
拷貝完成以后將:

#ifndef __MX6ULLEVK_CONFIG_H #define __MX6ULLEVK_CONFIG_H 改為: #ifndef __MX6ULL_ALIENTEK_EMMC_CONFIG_H #define __MX6ULL_ALIENTEK_EMMC_CONFIG_H

mx6ull_alientek_emmc.h里面有很多宏定義,這些宏定義基本用于配置uboot,也有一些I.MX6ULL的配置項目。如果我們自己要想使能或者禁止uboot的某些功能,那就在mx6ull_alientek_emmc.h里面做修改即可。mx6ull_alientek_emmc.h里面的內容比較多,去掉一些用不到的配置,精簡后的內容如下:
示例代碼33.2.2.1 mx6ull_alientek_emmc.h文件

1 /* 2 * Copyright (C) 2016 Freescale Semiconductor, Inc. 3 * 4 * Configuration settings for the Freescale i.MX6UL 14x14 EVK board. 5 * 6 * SPDX-License-Identifier: GPL-2.0+ 7 */ 8 #ifndef __MX6ULL_ALEITENK_EMMC_CONFIG_H 9 #define __MX6ULL_ALEITENK_EMMC_CONFIG_H 10 11 12 #include <asm/arch/imx-regs.h> 13 #include <linux/sizes.h> 14 #include "mx6_common.h" 15 #include <asm/imx-common/gpio.h> 16 ...... 28 29 #define is_mx6ull_9x9_evk() CONFIG_IS_ENABLED(TARGET_MX6ULL_9X9_EVK) 30 31 #ifdef CONFIG_TARGET_MX6ULL_9X9_EVK 32 #define PHYS_SDRAM_SIZE SZ_256M 33 #define CONFIG_BOOTARGS_CMA_SIZE "cma=96M " 34 #else 35 #define PHYS_SDRAM_SIZE SZ_512M 36 #define CONFIG_BOOTARGS_CMA_SIZE "" 37 /* DCDC used on 14x14 EVK, no PMIC */ 38 #undef CONFIG_LDO_BYPASS_CHECK 39 #endif 40 41 /* SPL options */ 42 /* We default not support SPL 43 * #define CONFIG_SPL_LIBCOMMON_SUPPORT 44 * #define CONFIG_SPL_MMC_SUPPORT 45 * #include "imx6_spl.h" 46 */ 47 48 #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 49 50 #define CONFIG_DISPLAY_CPUINFO 51 #define CONFIG_DISPLAY_BOARDINFO 52 53 /* Size of malloc() pool */ 54 #define CONFIG_SYS_MALLOC_LEN (16 * SZ_1M) 55 56 #define CONFIG_BOARD_EARLY_INIT_F 57 #define CONFIG_BOARD_LATE_INIT 58 59 #define CONFIG_MXC_UART 60 #define CONFIG_MXC_UART_BASE UART1_BASE 61 62 /* MMC Configs */ 63 #ifdef CONFIG_FSL_USDHC 64 #define CONFIG_SYS_FSL_ESDHC_ADDR USDHC2_BASE_ADDR 65 66 /* NAND pin conflicts with usdhc2 */ 67 #ifdef CONFIG_SYS_USE_NAND 68 #define CONFIG_SYS_FSL_USDHC_NUM 1 69 #else 70 #define CONFIG_SYS_FSL_USDHC_NUM 2 71 #endif 72 #endif 73 74 /* I2C configs */ 75 #define CONFIG_CMD_I2C 76 #ifdef CONFIG_CMD_I2C 77 #define CONFIG_SYS_I2C 78 #define CONFIG_SYS_I2C_MXC 79 #define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ 80 #define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ 81 #define CONFIG_SYS_I2C_SPEED 100000 82 ...... 89 90 #define CONFIG_SYS_MMC_IMG_LOAD_PART 1 91 92 #ifdef CONFIG_SYS_BOOT_NAND 93 #define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) " 94 #else 95 #define CONFIG_MFG_NAND_PARTITION "" 96 #endif 97 98 #define CONFIG_MFG_ENV_SETTINGS \ 99 "mfgtool_args=setenv bootargs console=${console},${baudrate} " \ ...... 111 "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \ 112 113 #if defined(CONFIG_SYS_BOOT_NAND) 114 #define CONFIG_EXTRA_ENV_SETTINGS \ 115 CONFIG_MFG_ENV_SETTINGS \ 116 "panel=TFT43AB\0" \ ...... 126 "bootz ${loadaddr} - ${fdt_addr}\0" 127 128 #else 129 #define CONFIG_EXTRA_ENV_SETTINGS \ 130 CONFIG_MFG_ENV_SETTINGS \ 131 "script=boot.scr\0" \ ...... 202 "fi;\0" \ 203 204 #define CONFIG_BOOTCOMMAND \ 205 "run findfdt;" \ ...... 216 "else run netboot; fi" 217 #endif 218 219 /* Miscellaneous configurable options */ 220 #define CONFIG_CMD_MEMTEST 221 #define CONFIG_SYS_MEMTEST_START 0x80000000 222 #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x8000000) 223 224 #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR 225 #define CONFIG_SYS_HZ 1000 226 227 #define CONFIG_STACKSIZE SZ_128K 228 229 /* Physical Memory Map */ 230 #define CONFIG_NR_DRAM_BANKS 1 231 #define PHYS_SDRAM MMDC0_ARB_BASE_ADDR 232 233 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM 234 #define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR 235 #define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE 236 237 #define CONFIG_SYS_INIT_SP_OFFSET \ 238 (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) 239 #define CONFIG_SYS_INIT_SP_ADDR \ 240 (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) 241 242 /* FLASH and environment organization */ 243 #define CONFIG_SYS_NO_FLASH 244 ...... 255 256 #define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */ 257 #define CONFIG_SYS_MMC_ENV_PART 0 /* user area */ 258 #define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */ 259 260 #define CONFIG_CMD_BMODE 261 ...... 275 276 /* NAND stuff */ 277 #ifdef CONFIG_SYS_USE_NAND 278 #define CONFIG_CMD_NAND 279 #define CONFIG_CMD_NAND_TRIMFFS 280 281 #define CONFIG_NAND_MXS 282 #define CONFIG_SYS_MAX_NAND_DEVICE 1 283 #define CONFIG_SYS_NAND_BASE 0x40000000 284 #define CONFIG_SYS_NAND_5_ADDR_CYCLE 285 #define CONFIG_SYS_NAND_ONFI_DETECTION 286 287 /* DMA stuff, needed for GPMI/MXS NAND support */ 288 #define CONFIG_APBH_DMA 289 #define CONFIG_APBH_DMA_BURST 290 #define CONFIG_APBH_DMA_BURST8 291 #endif 292 293 #define CONFIG_ENV_SIZE SZ_8K 294 #if defined(CONFIG_ENV_IS_IN_MMC) 295 #define CONFIG_ENV_OFFSET (12 * SZ_64K) 296 #elif defined(CONFIG_ENV_IS_IN_SPI_FLASH) 297 #define CONFIG_ENV_OFFSET (768 * 1024) 298 #define CONFIG_ENV_SECT_SIZE (64 * 1024) 299 #define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS 300 #define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS 301 #define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE 302 #define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED 303 #elif defined(CONFIG_ENV_IS_IN_NAND) 304 #undef CONFIG_ENV_SIZE 305 #define CONFIG_ENV_OFFSET (60 << 20) 306 #define CONFIG_ENV_SECT_SIZE (128 << 10) 307 #define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE 308 #endif 309 310 311 /* USB Configs */ 312 #define CONFIG_CMD_USB 313 #ifdef CONFIG_CMD_USB 314 #define CONFIG_USB_EHCI 315 #define CONFIG_USB_EHCI_MX6 316 #define CONFIG_USB_STORAGE 317 #define CONFIG_EHCI_HCD_INIT_AFTER_RESET 318 #define CONFIG_USB_HOST_ETHER 319 #define CONFIG_USB_ETHER_ASIX 320 #define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) 321 #define CONFIG_MXC_USB_FLAGS 0 322 #define CONFIG_USB_MAX_CONTROLLER_COUNT 2 323 #endif 324 325 #ifdef CONFIG_CMD_NET 326 #define CONFIG_CMD_PING 327 #define CONFIG_CMD_DHCP 328 #define CONFIG_CMD_MII 329 #define CONFIG_FEC_MXC 330 #define CONFIG_MII 331 #define CONFIG_FEC_ENET_DEV 1 332 333 #if (CONFIG_FEC_ENET_DEV == 0) 334 #define IMX_FEC_BASE ENET_BASE_ADDR 335 #define CONFIG_FEC_MXC_PHYADDR 0x2 336 #define CONFIG_FEC_XCV_TYPE RMII 337 #elif (CONFIG_FEC_ENET_DEV == 1) 338 #define IMX_FEC_BASE ENET2_BASE_ADDR 339 #define CONFIG_FEC_MXC_PHYADDR 0x1 340 #define CONFIG_FEC_XCV_TYPE RMII 341 #endif 342 #define CONFIG_ETHPRIME "FEC" 343 344 #define CONFIG_PHYLIB 345 #define CONFIG_PHY_MICREL 346 #endif 347 348 #define CONFIG_IMX_THERMAL 349 350 #ifndef CONFIG_SPL_BUILD 351 #define CONFIG_VIDEO 352 #ifdef CONFIG_VIDEO 353 #define CONFIG_CFB_CONSOLE 354 #define CONFIG_VIDEO_MXS 355 #define CONFIG_VIDEO_LOGO 356 #define CONFIG_VIDEO_SW_CURSOR 357 #define CONFIG_VGA_AS_SINGLE_DEVICE 358 #define CONFIG_SYS_CONSOLE_IS_IN_ENV 359 #define CONFIG_SPLASH_SCREEN 360 #define CONFIG_SPLASH_SCREEN_ALIGN 361 #define CONFIG_CMD_BMP 362 #define CONFIG_BMP_16BPP 363 #define CONFIG_VIDEO_BMP_RLE8 364 #define CONFIG_VIDEO_BMP_LOGO 365 #define CONFIG_IMX_VIDEO_SKIP 366 #endif 367 #endif 368 369 #define CONFIG_IOMUX_LPSR 370 ...... 375 #endif 從示例代碼33.2.2.1可以看出,mx6ull_alientek_emmc.h文件中基本都是“CONFIG_”開頭的宏定義,這也說明mx6ull_alientek_emmc.h文件的主要功能就是配置或者裁剪uboot。如果需要某個功能的話就在里面添加這個功能對應的CONFIG_XXX宏即可,如果不需要某個功能的話就刪除掉對應的宏即可。我們以示例代碼33.2.2.1為例,詳細的看一下mx6ull_alientek_emmc.h中這些宏都是什么功能。 第14行,添加了頭文件mx6_common.h,如果在mx6ull_alientek_emmc.h中沒有發現配置某個功能或命令,但是實際卻存在的話,可以到mx6_common.h文件里面去找一下。 第29~39行,設置DRAM的大小,宏PHYS_SDRAM_SIZE就是板子上DRAM的大小,如果用的NXP官方的9X9 EVK開發板的話DRAM大小就為256MB。否則的話默認為512MB,正點原子的I.MX6U-ALPHA開發板用的是512MB DDR3。 第50行,定義宏CONFIG_DISPLAY_CPUINFO,uboot啟動的時候可以輸出CPU信息。 第51行,定義宏CONFIG_DISPLAY_BOARDINFO,uboot啟動的時候可以輸出板子信息。 第54行,CONFIG_SYS_MALLOC_LEN為malloc內存池大小,這里設置為16MB。 第56行,定義宏CONFIG_BOARD_EARLY_INIT_F,這樣board_init_f函數就會調用board_early_init_f函數。 第57行,定義宏CONFIG_BOARD_LATE_INIT,這樣board_init_r函數就會調用board_late_init函數。 第59、60行,使能I.MX6ULL的串口功能,宏CONFIG_MXC_UART_BASE表示串口寄存器基地址,這里使用的串口1,基地址為UART1_BASE,UART1_BASE定義在文件arch/arm/include/asm/arch-mx6/imx-regs.h中,imx-regs.h是I.MX6ULL寄存器描述文件,根據imx-regs.h可得到UART1_BASE的值如下:

UART1_BASE= (ATZ1_BASE_ADDR + 0x20000)
=AIPS1_ARB_BASE_ADDR + 0x20000
=0x02000000 + 0x20000
=0X02020000
查閱I.MX6ULL參考手冊,UART1的寄存器基地址正是0X02020000,如圖33.2.2.1所示:

圖33.2.2.1 UART1寄存器地址表
第63、64行, EMMC接在I.MX6ULL的USDHC2上,宏CONFIG_SYS_FSL_ESDHC_ADDR為EMMC所使用接口的寄存器基地址,也就是USDHC2的基地址。
第67~72行,跟NAND相關的宏,因為NAND和USDHC2的引腳沖突,因此如果使用NAND的只能使用一個USDHC設備(SD卡)。如果沒有使用NAND,那么就有兩個USDHC設備(EMMC和SD卡),宏CONFIG_SYS_FSL_USDHC_NUM表示USDHC數量。EMMC版本的核心版沒有用到NAND,所以CONFIG_SYS_FSL_USDHC_NUM=2。
第75~81,和I2C有關的宏定義,用于控制使能哪個I2C,I2C的速度為多少。
第92~96行,NAND的分區設置,如果使用NAND的話,默認的NAND分區為:“mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) “,分區結果如表33.2.2.1所示:
范圍 大小 分區
0~63M 64M boot(uboot)
64~79M 16M kernel(linux內核)
80~94M 16M dtb(設備樹)
95M 1M misc(雜項)
96M – end 剩余的所有空間 rootfs(根文件系統)
表33.2.2.1 NAND分區設置
NAND的分區是可以調整的,比如boot分區我們用不了64M這么大,因此可以將其改小,其他的分區一樣的。
第98~111行,宏CONFIG_MFG_ENV_SETTINGS定義了一些環境變量,使用MfgTool燒寫系統時候會用到這里面的環境變量。
第113~202行,通過條件編譯來設置宏CONFIG_EXTRA_ENV_SETTINGS,宏CONFIG_EXTRA_ENV_SETTINGS也是設置一些環境變量,此宏會設置bootargs這個環境變量,后面我們會詳細分析這個宏定義。
第204~217行,設置宏CONFIG_BOOTCOMMAND,此宏就是設置環境變量bootcmd的值。后面會詳細的分析這個宏定義。
第220~222行,設置命令memtest相關宏定義,比如使能命令memtest,設置memtest測試的內存起始地址和內存大小。
第224行,宏CONFIG_SYS_LOAD_ADDR表示linux kernel在DRAM中的加載地址,也就是linux kernel在DRAM中的存儲首地址,CONFIG_LOADADDR=0X80800000。
第225行,宏CONFIG_SYS_HZ為系統時鐘頻率,這里為1000Hz。
第227行,宏CONFIG_STACKSIZE為棧大小,這里為128KB。
第230行,宏CONFIG_NR_DRAM_BANKS為DRAM BANK的數量,I.MX6ULL只有一個DRAM BANK,我們也只用到了一個BANK,所以為1。
第231行,宏PHYS_SDRAM為I.MX6ULL的DRAM控制器MMDC0所管轄的DRAM范圍起始地址,也就是0X80000000。
第233行,宏CONFIG_SYS_SDRAM_BASE為DRAM的起始地址。
第234行,宏CONFIG_SYS_INIT_RAM_ADDR為I.MX6ULL內部IRAM的起始地址(也就是OCRAM的起始地址),為0X00900000。
第235行,宏CONFIG_SYS_INIT_RAM_SIZE為I.MX6ULL內部IRAM的大小(OCRAM的大小),為0X00040000=128KB。
第237~240行,宏CONFIG_SYS_INIT_SP_OFFSET和CONFIG_SYS_INIT_SP_ADDR與初始SP有關,第一個為初始SP偏移,第二個為初始SP地址。
第256行,宏CONFIG_SYS_MMC_ENV_DEV為默認的MMC設備,這里默認為USDHC2,也就是EMMC。
第257行,宏CONFIG_SYS_MMC_ENV_PART為模式分區,默認為第0個分區。
第258行,宏CONFIG_MMCROOT設置進入linux系統的根文件系統所在的分區,這里設置為”/dev/mmcblk1p2”,也就是EMMC設備的第2個分區。第0個分區保存uboot,第1個分區保存linux鏡像和設備樹,第2個分區為Linux系統的根文件系統。
第277~291行,與NAND有關的宏定義,如果使用NAND的話。
第293行,宏CONFIG_ENV_SIZE為環境變量大小,默認為8KB。
第294~308行,宏CONFIG_ENV_OFFSET為環境變量偏移地址,這里的偏移地址是相對于存儲器的首地址。如果環境變量保存在EMMC中的話,環境變量偏移地址為1264KB。如果環境變量保存在SPI FLASH中的話,偏移地址為7681024。如果環境變量保存在NAND中的話,偏移地址為60<<20(60MB),并且重新設置環境變量的大小為128KB。
第312~323行,與USB相關的宏定義。
第325~342行,與網絡相關的宏定義,比如使能dhcp、ping等命令。第331行的宏CONFIG_FEC_ENET_DEV指定uboot所使用的網口,I.MX6ULL有兩個網口,為0的時候使用ENET1,為1的時候使用ENET2。宏IMX_FEC_BASE為ENET接口的寄存器首地址,宏CONFIG_FEC_MXC_PHYADDR為網口PHY芯片的地址。宏CONFIG_FEC_XCV_TYPE為PHY芯片所使用的接口類型,I.MX6U-ALPHA開發板的兩個PHY都使用的RMII接口。
第344~END,剩下的都是一些配置宏,比如CONFIG_VIDEO宏用于開啟LCD,CONFIG_VIDEO_LOGO使能LOGO顯示,CONFIG_CMD_BMP使能BMP圖片顯示指令。這樣就可以在uboot中顯示圖片了,一般用于顯示logo。
關于mx6ull_alientek_emmc.h就講解到這里,其中以CONFIG_CMD開頭的宏都是用于使能相應命令的,其他的以CONFIG開頭的宏都是完成一些配置功能的。以后會頻繁的和mx6ull_alientek_emmc.h這個文件打交道。
33.2.3 添加開發板對應的板級文件夾
uboot中每個板子都有一個對應的文件夾來存放板級文件,比如開發板上外設驅動文件等等。NXP的I.MX系列芯片的所有板級文件夾都存放在board/freescale目錄下,在這個目錄下有個名為mx6ullevk的文件夾,這個文件夾就是NXP官方I.MX6ULL EVK開發板的板級文件夾。復制mx6ullevk,將其重命名為mx6ull_alientek_emmc,命令如下:
cd board/freescale/
cp mx6ullevk/ -r mx6ull_alientek_emmc
進入mx6ull_alientek_emmc目錄中,將其中的mx6ullevk.c文件重命名為mx6ull_alientek_emmc.c,命令如下:
cd mx6ull_alientek_emmc
mv mx6ullevk.c mx6ull_alientek_emmc.c
我們還需要對mx6ull_alientek_emmc目錄下的文件做一些修改:
1、修改mx6ull_alientek_emmc目錄下的Makefile文件
將mx6ull_alientek_emmc下的Makefile文件內容改為如下所示:
示例代碼33.2.3.1 Makefile文件

1 # (C) Copyright 2015 Freescale Semiconductor, Inc. 2 # 3 # SPDX-License-Identifier: GPL-2.0+ 4 # 5 6 obj-y := mx6ull_alientek_emmc.o 7 8 extra-$(CONFIG_USE_PLUGIN) := plugin.bin 9 $(obj)/plugin.bin: $(obj)/plugin.o 10 $(OBJCOPY) -O binary --gap-fill 0xff $< $@ 重點是第6行的obj-y,改為mx6ull_alientek_emmc.o,這樣才會編譯mx6ull_alientek_emmc.c這個文件。 2、修改mx6ull_alientek_emmc目錄下的imximage.cfg文件 將imximage.cfg中的下面一句:

PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
改為:
PLUGIN board/freescale/mx6ull_alientek_emmc /plugin.bin 0x00907000
3、修改mx6ull_alientek_emmc目錄下的Kconfig文件
修改Kconfig文件,修改后的內容如下:
示例代碼33.2.3.2 Kconfig文件

1 if TARGET_MX6ULL_ALIENTEK_EMMC 2 3 config SYS_BOARD 4 default "mx6ull_alientek_emmc" 5 6 config SYS_VENDOR 7 default "freescale" 8 9 config SYS_SOC 10 default "mx6" 11 12 config SYS_CONFIG_NAME 13 default "mx6ull_alientek_emmc" 14 15 endif 4、修改mx6ull_alientek_emmc目錄下的MAINTAINERS文件 修改MAINTAINERS文件,修改后的內容如下:

1 MX6ULL_ALIENTEK_EMMC BOARD
2 M: Peng Fan peng.fan@nxp.com
3 S: Maintained
4 F: board/freescale/mx6ull_alientek_emmc/
5 F: include/configs/mx6ull_alientek_emmc.h
33.2.4 修改U-Boot圖形界面配置文件
uboot是支持圖形界面配置,關于uboot的圖形界面配置下一章會詳細的講解。修改文件arch/arm/cpu/armv7/mx6/Kconfig(如果用的I.MX6UL的話,應該修改arch/arm/Kconfig這個文件),在207行加入如下內容:
示例代碼33.2.4.1 Kconfig文件

1 config TARGET_MX6ULL_ALIENTEK_EMMC 2 bool "Support mx6ull_alientek_emmc" 3 select MX6ULL 4 select DM 5 select DM_THERMAL 在最后一行的endif的前一行添加如下內容:

示例代碼33.2.4.2 Kconfig文件
1 source “board/freescale/mx6ull_alientek_emmc/Kconfig”
添加完成以后的Kconfig文件如圖33.2.4.1所示:

圖33.2.4.1 修改后的Kconfig文件
到此為止,I.MX6U-ALPHA開發板就已經添加到uboot中了,接下來就是編譯這個新添加的開發板。
33.2.5 使用新添加的板子配置編譯uboot
在uboot根目錄下新建一個名為mx6ull_alientek_emmc.sh的shell腳本,在這個shell腳本里面輸入如下內容:
示例代碼33.2.5.1 mx6ull_alientek_emmc.sh腳本文件

1 #!/bin/bash 2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格) mx6ull_alientek_emmc_defconfig 4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16 第3行我們使用的默認配置文件就是33.2.1節中新建的mx6ull_alientek_emmc_defconfig這個配置文件。給予mx6ll_alientek_emmc.sh可執行權限,然后運行腳本來完成編譯,命令如下:

chmod 777 mx6ull_alientek_emmc.sh //給予可執行權限,一次即可
./mx6ull_alientek_emmc.sh //運行腳本編譯uboot
等待編譯完成,編譯完成以后輸入如下命令,查看一下33.2.2小節中添加的mx6ull_alientek_emmc.h這個頭文件有沒有被引用。
grep -nR “mx6ull_alientek_emmc.h”
如果有很多文件都引用了mx6ull_alientek_emmc.h這個頭文件,那就說明新板子添加成功,如圖33.2.5.1所示:

圖33.2.5.1 查找結果
編譯完成以后就使用imxdownload將新編譯出來的u-boot.bin燒寫到SD卡中測試,SecureCRT輸出結果如圖33.2.5.2所示:

圖33.2.5.1 uboot啟動過程
從圖33.2.5.1可以看出,此時的Board還是“MX6ULL 14x14 EVK”,因為我們參考的NXP官方的I.MX6ULL開發板來添加自己的開發板。如果接了LCD屏幕的話會發現LCD屏幕并沒有顯示NXP的logo,而且從圖33.2.5.1可以看出此時的網絡同樣也沒識別出來。前面已經說了,默認uboot中的LCD驅動和網絡驅動在正點原子的I.MX6U-ALPHA開發板上是有問題的,需要修改。
33.2.6 LCD驅動修改
一般uboot中修改驅動基本都是在xxx.h和xxx.c這兩個文件中進行的,xxx為板子名稱,比如mx6ull_alientek_emmc.h和mx6ull_alientek_emmc.c這兩個文件。
一般修改LCD驅動重點注意以下幾點:
①、LCD所使用的GPIO,查看uboot中LCD的IO配置是否正確。
②、LCD背光引腳GPIO的配置。
③、LCD配置參數是否正確。
正點原子的I.MX6U-ALPHA開發板LCD原理圖和NXP官方I.MX6ULL開發板一致,也就是LCD的IO和背光IO都一樣的,所以IO部分就不用修改了。需要修改的之后LCD參數,打開文件mx6ull_alientek_emmc.c,找到如下所示內容:
示例代碼33.2.6.1 LCD驅動參數

1 struct display_info_t const displays[] = {{ 2 .bus = MX6UL_LCDIF1_BASE_ADDR, 3 .addr = 0, 4 .pixfmt = 24, 5 .detect = NULL, 6 .enable = do_enable_parallel_lcd, 7 .mode = { 8 .name = "TFT43AB", 9 .xres = 480, 10 .yres = 272, 11 .pixclock = 108695, 12 .left_margin = 8, 13 .right_margin = 4, 14 .upper_margin = 2, 15 .lower_margin = 4, 16 .hsync_len = 41, 17 .vsync_len = 10, 18 .sync = 0, 19 .vmode = FB_VMODE_NONINTERLACED

20 } } };
示例代碼33.2.6.1中定義了一個變量displays,類型為display_info_t,這個結構體是LCD信息結構體,其中包括了LCD的分辨率,像素格式,LCD的各個參數等。display_info_t定義在文件arch/arm/include/asm/imx-common/video.h中,定義如下:
示例代碼33.2.6.2 display_info結構體

1 struct display_info_t { 2 int bus; 3 int addr; 4 int pixfmt; 5 int (*detect)(struct display_info_t const *dev); 6 void (*enable)(struct display_info_t const *dev); 7 struct fb_videomode mode; 8 }; pixfmt是像素格式,也就是一個像素點是多少位,如果是RGB565的話就是16位,如果是888的話就是24位,一般使用RGB888。結構體display_info_t還有個mode成員變量,此成員變量也是個結構體,為fb_videomode,定義在文件include/linux/fb.h中,定義如下:

示例代碼33.2.6.3 fb_videomode結構體

1 struct fb_videomode { 2 const char *name; /* optional */ 3 u32 refresh; /* optional */ 4 u32 xres; 5 u32 yres; 6 u32 pixclock; 7 u32 left_margin; 8 u32 right_margin; 9 u32 upper_margin; 10 u32 lower_margin; 11 u32 hsync_len; 12 u32 vsync_len; 13 u32 sync; 14 u32 vmode; 15 u32 flag; 16 }; 結構體fb_videomode里面的成員變量為LCD的參數,這些成員變量函數如下: name:LCD名字,要和環境變量中的panel相等。 xres、yres:LCD X軸和Y軸像素數量。 pixclock:像素時鐘,每個像素時鐘周期的長度,單位為皮秒。 left_margin:HBP,水平同步后肩。 right_margin:HFP,水平同步前肩。 upper_margin:VBP,垂直同步后肩。 lower_margin:VFP,垂直同步前肩。 hsync_len:HSPW,行同步脈寬。 vsync_len:VSPW,垂直同步脈寬。 vmode:大多數使用FB_VMODE_NONINTERLACED,也就是不使用隔行掃描。 可以看出,這些參數和我們第二十四章講解RGB LCD的時候參數基本一樣,唯一不同的像素時鐘pixclock的含義不同,以正點原子的7寸1024*600分辨率的屏幕(ATK7016)為例,屏幕要求的像素時鐘為51.2MHz,因此:

pixclock=(1/51200000)*10^12=19531
在根據其他的屏幕參數,可以得出ATK7016屏幕的配置參數如下:
示例代碼33.2.6.4 ATK7016屏幕配置參數

1 struct display_info_t const displays[] = {{ 2 .bus = MX6UL_LCDIF1_BASE_ADDR, 3 .addr = 0, 4 .pixfmt = 24, 5 .detect = NULL, 6 .enable = do_enable_parallel_lcd, 7 .mode = { 8 .name = "TFT7016", 9 .xres = 1024, 10 .yres = 600, 11 .pixclock = 19531, 12 .left_margin = 140, //HBPD 13 .right_margin = 160, //HFPD 14 .upper_margin = 20, //VBPD 15 .lower_margin = 12, //VFBD 16 .hsync_len = 20, //HSPW 17 .vsync_len = 3, //VSPW 18 .sync = 0, 19 .vmode = FB_VMODE_NONINTERLACED 20 } } }; 使用示例代碼33.2.6.4中的屏幕參數替換掉mx6ull_alientek_emmc.c中uboot默認的屏幕參數。 打開mx6ull_alientek_emmc.h,找到所有如下語句:

panel=TFT43AB
將其改為:
panel=TFT7016
也就是設置panel為TFT7016,panel的值要與示例代碼33.2.6.4中的.name成員變量的值一致。修改完成以后重新編譯一遍uboot并燒寫到SD中啟動。
重啟以后LCD驅動一般就會工作正常了,LCD上回顯示NXP的logo。但是有可能會遇到LCD并沒有工作,還是黑屏,這是什么原因呢?在uboot命令模式輸入“print”來查看環境變量panel的值,會發現panel的值要是TFT43AB(或其他的,反正不是TFT7016),如圖33.2.6.1所示:
圖33.2.6.1 panel的值
這是因為之前有將環境變量保存到EMMC中,uboot啟動以后會先從EMMC中讀取環境變量,如果EMMC中沒有環境變量的話才會使用mx6ull_alientek_emmc.h中的默認環境變量。如果EMMC中的環境變量panel不等于TFT7016,那么LCD顯示肯定不正常,我們只需要在uboot中修改panel的值為TFT7016即可,在uboot的命令模式下輸入如下命令:
setenv panel TFT7016
saveenv
上述命令修改環境變量panel為TFT7016,然后保存,重啟uboot,此時LCD驅動就工作正常了。如果LCD還是沒有正常工作的,那就要檢查自己哪里有沒有改錯,或者還有哪里沒有修改。
33.2.7 網絡驅動修改
1、I.MX6U-ALPHA開發板網絡簡介
I.MX6UL/ULL內部有個以太網MAC外設,也就是ENET,需要外接一個PHY芯片來實現網絡通信功能,也就是內部MAC+外部PHY芯片的方案。大家可能聽過DM9000這個網絡芯片,在一些沒有內部MAC的CPU中,比如三星的2440,4412等,就會采用DM9000來實現聯網功能。DM9000提供了一個類似SRAM的訪問接口,主控CPU通過這個接口即可與DM9000進行通信,DM9000就是一個MAC+PHY芯片。這個方案就相當于外部MAC+外部PHY,那么I.MX6U這樣的內部MAC+PHY芯片與DM9000方案比有什么優勢嗎?那優勢大了去了!首先就是通信效率和速度,一般SOC內部的MAC是帶有一個專用DMA的,專門用于處理網絡數據包,采用SRAM來讀寫DM9000的速度是壓根就沒法和內部MAC+外部PHY芯片的速度比。采用外部DM9000完全是無奈之舉,誰讓2440,4412這些芯片內部沒有以太網外設呢,現在又想用有線網絡,沒有辦法只能找個DM9000的方案。從這里也可以看出,三星的2440、4412這些芯片設計之初就不是給工業產品用的,他們是給消費類電子使用的,比如手機、平板等,手機或平板要上網,可以通過WIFI或者4G,我是沒有見過哪個手機或者平板上網是要接根網線的。正點原子的I.MX6U-ALPHA開發板也可以通過WIFI或者4G上網,這個是后話了。
I.MX6UL/ULL有兩個網絡接口ENET1和ENET2,正點原子的I.MX6U-ALPHA開發板提供了這兩個網絡接口,其中ENET1和ENET2都使用LAN8720A作為PHY芯片。NXP官方的I.MX6ULL EVK開發板使用KSZ8081這顆PHY芯片,LAN8720A相比KSZ8081具有體積小、外圍器件少、價格便宜等優點。直接使用KSZ8081固然可以,但是我們在實際的產品中不一定會使用KSZ8081,有時候為了降低成本會選擇其他的PHY芯片,這個時候就有個問題:換了PHY芯片以后網絡驅動怎么辦?為此,正點原子的I.MX6U-ALPHA開發板將ENET1和ENET2的PHY換成了LAN8720A,這樣就可以給大家講解更換PHY芯片以后如何調整網絡驅動,使網絡工作正常。
I.MX6U-ALPHA開發板ENET1的網絡原理圖如圖33.2.7.1所示:

圖33.2.7.1 ENET1原理圖
ENET1的網絡PHY芯片為LAN8720A,通過RMII接口與I.MX6ULL相連,正點原子I.MX6U-ALPHA開發板的ENET1引腳與NXP官方的I.MX6ULL EVK開發板基本一樣,唯獨復位引腳不同。從圖33.2.7.1可以看出,正點原子I.MX6U-ALPHA開發板的ENET1復位引腳ENET1_RST接到了I.M6ULL的SNVS_TAMPER7這個引腳上。
LAN8720A內部是有寄存器的,I.MX6ULL會讀取LAN8720內部寄存器來判斷當前的物理鏈接狀態、連接速度(10M還是100M)和雙工狀態(半雙工還是全雙工)。I.MX6ULL通過MDIO接口來讀取PHY芯片的內部寄存器,MDIO接口有兩個引腳,ENET_MDC和ENET_MDIO, ENET_MDC提供時鐘,ENET_MDIO進行數據傳輸。一個MDIO接口可以管理32個PHY芯片,同一個MDIO接口下的這些PHY使用不同的器件地址來做區分,MIDO接口通過不同的器件地址即可訪問到相應的PHY芯片。I.MX6U-ALPHA開發板ENET1上連接的LAN8720A器件地址為0X0,所示我們要修改ENET1網絡驅動的話重點就三點:
①、ENET1復位引腳初始化。
②、LAN8720A的器件ID。
③、LAN8720驅動
再來看一下ENET2的原理圖,如圖33.2.7.2所示:

圖33.2.7.2 ENET2原理圖
關于ENET2網絡驅動的修改也注意一下三點:
①、ENET2的復位引腳,從圖33.2.7.2可以看出,ENET2的復位引腳ENET2_RST接到了I.MX6ULL的SNVS_TAMPER8上。
②、ENET2所使用的PHY芯片器件地址,從圖33.2.7.2可以看出,PHY器件地址為0X1。
③、LAN8720驅動,ENET1和ENET2都使用的LAN8720,所以驅動肯定是一樣的。
2、網絡PHY地址修改
首先修改uboot中的ENET1和ENET2的PHY地址和驅動,打開mx6ull_alientek_emmc.h這個文件,找到如下代碼:
示例代碼33.2.7.1 網絡默認ID配置參數

325 #ifdef CONFIG_CMD_NET 326 #define CONFIG_CMD_PING 327 #define CONFIG_CMD_DHCP 328 #define CONFIG_CMD_MII 329 #define CONFIG_FEC_MXC 330 #define CONFIG_MII 331 #define CONFIG_FEC_ENET_DEV 1 332 333 #if (CONFIG_FEC_ENET_DEV == 0) 334 #define IMX_FEC_BASE ENET_BASE_ADDR 335 #define CONFIG_FEC_MXC_PHYADDR 0x2 336 #define CONFIG_FEC_XCV_TYPE RMII 337 #elif (CONFIG_FEC_ENET_DEV == 1) 338 #define IMX_FEC_BASE ENET2_BASE_ADDR 339 #define CONFIG_FEC_MXC_PHYADDR 0x1 340 #define CONFIG_FEC_XCV_TYPE RMII 341 #endif 342 #define CONFIG_ETHPRIME "FEC" 343 344 #define CONFIG_PHYLIB 345 #define CONFIG_PHY_MICREL 346 #endif 第331行的宏CONFIG_FEC_ENET_DEV用于選擇使用哪個網口,默認為1,也就是選擇ENET2。第335行為ENET1的PHY地址,默認是0X2,第339行為ENET2的PHY地址,默認為0x1。根據前面的分析可知,正點原子的I.MX6U-ALPHA開發板ENET1的PHY地址為0X0,ENET2的PHY地址為0X1,所以需要將第335行的宏CONFIG_FEC_MXC_PHYADDR改為0x0。 第345行定了一個宏CONFIG_PHY_MICREL,此宏用于使能uboot中Micrel公司的PHY驅動,KSZ8081這顆PHY芯片就是Micrel公司生產的,不過Micrel已經被Microchip收購了。如果要使用LAN8720A,那么就得將CONFIG_PHY_MICREL改為CONFIG_PHY_SMSC,也就是使能uboot中的SMSC公司中的PHY驅動,因為LAN8720A就是SMSC公司生產的。所以示例代碼33.2.7.1有三處要修改:

①、修改ENET1網絡PHY的地址。
②、修改ENET2網絡PHY的地址。
③、使能SMSC公司的PHY驅動。
修改后的網絡PHY地址參數如下所示:
示例代碼33.2.7.2 網絡PHY地址配置參數

325 #ifdef CONFIG_CMD_NET 326 #define CONFIG_CMD_PING 327 #define CONFIG_CMD_DHCP 328 #define CONFIG_CMD_MII 329 #define CONFIG_FEC_MXC 330 #define CONFIG_MII 331 #define CONFIG_FEC_ENET_DEV 1 332 333 #if (CONFIG_FEC_ENET_DEV == 0) 334 #define IMX_FEC_BASE ENET_BASE_ADDR 335 #define CONFIG_FEC_MXC_PHYADDR 0x0 336 #define CONFIG_FEC_XCV_TYPE RMII 337 #elif (CONFIG_FEC_ENET_DEV == 1) 338 #define IMX_FEC_BASE ENET2_BASE_ADDR 339 #define CONFIG_FEC_MXC_PHYADDR 0x1 340 #define CONFIG_FEC_XCV_TYPE RMII 341 #endif 342 #define CONFIG_ETHPRIME "FEC" 343 344 #define CONFIG_PHYLIB 345 #define CONFIG_PHY_SMSC 346 #endif 3、刪除uboot中74LV595的驅動代碼

uboot中網絡PHY芯片地址修改完成以后就是網絡復位引腳的驅動修改了,打開mx6ull_alientek_emmc.c,找到如下代碼:
示例代碼33.2.7.3 74LV595引腳

#define IOX_SDI IMX_GPIO_NR(5, 10) #define IOX_STCP IMX_GPIO_NR(5, 7) #define IOX_SHCP IMX_GPIO_NR(5, 11) #define IOX_OE IMX_GPIO_NR(5, 8) 示例代碼33.2.7.3中以IOX開頭的宏定義是74LV595的相關GPIO,因為NXP官方I.MX6ULL EVK開發板使用74LV595來擴展IO,兩個網絡的復位引腳就是由74LV595來控制的。正點原子的I.MX6U-ALPHA開發板并沒有使用74LV595,因此我們將示例代碼33.2.7.3中的代碼刪除掉,替換為如下所示代碼:

示例代碼33.2.7.4 修改后的網絡引腳

#define ENET1_RESET IMX_GPIO_NR(5, 7) #define ENET2_RESET IMX_GPIO_NR(5, 8) ENET1的復位引腳連接到SNVS_TAMPER7上,對應GPIO5_IO07,ENET2的復位引腳連接到SNVS_TAMPER8上,對應GPIO5_IO08。 繼續在mx6ull_alientek_emmc.c中找到如下代碼:

示例代碼33.2.7.5 74LV595引腳配置

static iomux_v3_cfg_t const iox_pads[] = {/* IOX_SDI */MX6_PAD_BOOT_MODE0__GPIO5_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_SHCP */MX6_PAD_BOOT_MODE1__GPIO5_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_STCP */MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_nOE */MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL), }; 同理,示例代碼33.2.7.5是74LV595的IO配置參數結構體,將其刪除掉。繼續在mx6ull_alientek_emmc.c中找到函數iox74lv_init,如下所示:

示例代碼33.2.7.6 74LV595初始化函數

static void iox74lv_init(void) {int i;gpio_direction_output(IOX_OE, 0);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}....../** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1); };void iox74lv_set(int index) {int i;for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);if (i == index)gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);elsegpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}....../** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1); }; iox74lv_init函數是74LV595的初始化函數,iox74lv_set函數用于控制74LV595的IO輸出電平,將這兩個函數全部刪除掉! 在mx6ull_alientek_emmc.c中找到board_init函數,此函數是板子初始化函數,會被board_init_r調用,board_init函數內容如下:

示例代碼33.2.7.7 board_init函數

int board_init(void) { ...... imx_iomux_v3_setup_multiple_pads(iox_pads, ARRAY_SIZE(iox_pads));iox74lv_init();......return 0; } board_init會調用imx_iomux_v3_setup_multiple_pads 和iox74lv_init這兩個函數來初始化74lv595的GPIO,將這兩行刪除掉。至此,mx6ull_alientek_emmc.c中關于74LV595芯片的驅動代碼都刪除掉了,接下來就是添加I.MX6U-ALPHA開發板兩個網絡復位引腳了。 4、添加I.MX6U-ALPHA開發板網絡復位引腳驅動 在mx6ull_alientek_emmc.c中找到如下所示代碼:

示例代碼33.2.7.8 默認網絡IO結構體數組

640 static iomux_v3_cfg_t const fec1_pads[] = { 641 MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), 642 MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), ...... 649 MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), 650 MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), 651 }; 652 653 static iomux_v3_cfg_t const fec2_pads[] = { 654 MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), 655 MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), ...... 664 MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), 665 MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), 666 }; 結構體數組fec1_pads和fec2_pads是ENET1和ENET2這兩個網口的IO配置參數,在這兩個數組中添加兩個網口的復位IO配置參數,完成以后如下所示:

示例代碼33.2.7.9 添加網絡復位IO后的結構體數組

640 static iomux_v3_cfg_t const fec1_pads[] = { 641 MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), 642 MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), ...... 649 MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), 650 MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), 651 MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL), 652 }; 653 654 static iomux_v3_cfg_t const fec2_pads[] = { 655 MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), 656 MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), ...... 665 MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), 666 MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), 667 MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL), 668 }; 示例代碼33.2.7.9中,第651行和667行分別是ENET1和ENET2的復位IO配置參數。繼續在文件mx6ull_alientek_emmc.c中找到函數setup_iomux_fec,此函數默認代碼如下:

示例代碼33.2.7.10 setup_iomux_fec函數默認代碼

668 static void setup_iomux_fec(int fec_id) 669 { 670 if (fec_id == 0) 671 imx_iomux_v3_setup_multiple_pads(fec1_pads, 672 ARRAY_SIZE(fec1_pads)); 673 else 674 imx_iomux_v3_setup_multiple_pads(fec2_pads, 675 ARRAY_SIZE(fec2_pads)); 676 } 函數setup_iomux_fec就是根據fec1_pads和fec2_pads這兩個網絡IO配置數組來初始化I.MX6ULL的網絡IO。我們需要在其中添加網絡復位IO的初始化代碼,并且復位一下PHY芯片,修改后的setup_iomux_fec函數如下:

示例代碼33.2.7.11 修改后的setup_iomux_fec函數

668 static void setup_iomux_fec(int fec_id) 669 { 670 if (fec_id == 0) 671 { 672 673 imx_iomux_v3_setup_multiple_pads(fec1_pads, 674 ARRAY_SIZE(fec1_pads)); 675 676 gpio_direction_output(ENET1_RESET, 1); 677 gpio_set_value(ENET1_RESET, 0); 678 mdelay(20); 679 gpio_set_value(ENET1_RESET, 1); 680 } 681 else 682 { 683 imx_iomux_v3_setup_multiple_pads(fec2_pads, 684 ARRAY_SIZE(fec2_pads)); 685 gpio_direction_output(ENET2_RESET, 1); 686 gpio_set_value(ENET2_RESET, 0); 687 mdelay(20); 688 gpio_set_value(ENET2_RESET, 1); 689 } 690 } 示例代碼33.2.7.11中第676行~679行和第685行~688行分別對應ENET1和ENET2的復位IO初始化,將這兩個IO設置為輸出并且硬件復位一下LAN8720A,這個硬件復位很重要!否則可能導致uboot無法識別LAN8720A。 5、修改drivers/net/phy/phy.c文件中的函數genphy_update_link 大功基本上告成,還差最后一步,uboot中的LAN8720A驅動有點問題,打開文件drivers/net/phy/phy.c,找到函數genphy_update_link,這是個通用PHY驅動函數,此函數用于更新PHY的連接狀態和速度。使用LAN8720A的時候需要在此函數中添加一些代碼,修改后的函數genphy_update_link如下所示:

示例代碼33.2.7.12 修改后的genphy_update_link函數

221 int genphy_update_link(struct phy_device *phydev) 222 { 223 unsigned int mii_reg; 224 225 #ifdef CONFIG_PHY_SMSC 226 static int lan8720_flag = 0; 227 int bmcr_reg = 0; 228 if (lan8720_flag == 0) { 229 bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); 230 phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET); 231 while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) { 232 udelay(100); 233 } 234 phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg); 235 lan8720_flag = 1; 236 } 237 #endif 238 239 /* 240 * Wait if the link is up, and autonegotiation is in progress 241 * (ie - we're capable and it's not done) 242 */ 243 mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); ...... 291 292 return 0; 293 } 225行~237行就是新添加的代碼,為條件編譯代碼段,只有使用SMSC公司的PHY這段代碼才會執行(目前只測試了LAN8720A,SMSC公司其他的芯片還未測試)。第229行讀取LAN8720A的BMCR寄存器(寄存器地址為0),此寄存器為LAN8720A的配置寄存器,這里先讀取此寄存器的默認值并保存起來。230行向寄存器BMCR寄存器寫入BMCR_RESET(值為0X8000),因為BMCR的bit15是軟件復位控制位,因此230行就是軟件復位LAN8720A,復位完成以后此位會自動清零。第231~233行等待LAN8720A軟件復位完成,也就是判斷BMCR的bit15位是否為1,為1的話表示還沒有復位完成。第234行重新向BMCR寄存器寫入以前的值,也就是229行讀出的那個值。 至此網絡的復位引腳驅動修改完成,重新編譯uboot,然后將u-boot.bin燒寫到SD卡中并啟動,uboot啟動信息如圖33.2.7.3所示:

圖33.2.7.3 uboot啟動信息
從圖33.2.6.4中可以看到“Net: FEC1”這一行,提示當前使用的FEC1這個網口,也就是ENET2。在uboot中使用網絡之前要先設置幾個環境變量,命令如下:
setenv ipaddr 192.168.1.55 //開發板IP地址
setenv ethaddr b8:ae:1d:01:00:00 //開發板網卡MAC地址
setenv gatewayip 192.168.1.1 //開發板默認網關
setenv netmask 255.255.255.0 //開發板子網掩碼
setenv serverip 192.168.1.250 //服務器地址,也就是Ubuntu地址
saveenv //保存環境變量
設置好環境變量以后就可以在uboot中使用網絡了,用網線將I.MX6U-ALPHA上的ENET2與電腦或者路由器連接起來,保證開發板和電腦在同一個網段內,通過ping命令來測試一下網絡連接,命令如下:
ping 192.168.1.250
結果如圖33.2.7.4所示:

圖33.2.7.4 ping命令測試
從圖33.2.7.4可以看出,有“host 192.168.1.250 is alive”這句,說明ping主機成功,說明ENET2網絡工作正常。再來測試一下ENET1的網絡是否正常工作,打開mx6ull_alientek_emmc.h,將CONFIG_FEC_ENET_DEV改為0,然后重新編譯一下uboot并燒寫到SD卡中重啟。重啟開發板,uboot輸出信息如圖33.2.7.5所示:

圖33.2.7.5 uboot啟動信息
從圖33.2.7.5可以出,有“Net:FEC0”這一行,說明當前使用的FEC0這個網卡,也就是ENET1,同樣的ping一下主機,結果如圖33.2.7.5所示:

圖33.2.7.6 ping命令測試
從圖33.2.7.6可以看出,ping主機也成功,說明ENET1網絡也工作正常,至此,I.MX6U-ALPHA開發板的兩個網絡都工作正常了,建議大家將ENET2設置為uboot的默認網卡!也就是將宏CONFIG_FEC_ENET_DEV設置為1。
33.2.8 其他需要修改的地方
在uboot啟動信息中會有“Board: MX6ULL 14x14 EVK”這一句,也就是說板子名字為“MX6ULL 14x14 EVK”,要將其改為我們所使用的板子名字,比如“MX6ULL ALIENTEK EMMC”或者“MX6ULL ALIENTEK NAND”。打開文件mx6ull_alientek_emmc.c,找到函數checkboard,將其改為如下所示內容:
示例代碼33.2.8.1 修改后的checkboard函數

int checkboard(void) {if (is_mx6ull_9x9_evk())puts("Board: MX6ULL 9x9 EVK\n");elseputs("Board: MX6ULL ALIENTEK EMMC\n");return 0; } 修改完成以后重新編譯uboot并燒寫到SD卡中驗證,uboot啟動信息如圖33.2.8.1所示:

圖33.2.8.1 uboot啟動信息
從圖33.2.8.1可以看出,Board變成了“MX6ULL ALIENTEK EMMC”。至此uboot的驅動部分就修改完成了,uboot移植也完成了,uboot的最終目的就是啟動Linux內核,所以需要通過啟動Linux內核來判斷uboot移植是否成功。在啟動Linux內核之前我們先來學習兩個重要的環境變量bootcmd和bootargs。
33.3 bootcmd和bootargs環境變量
uboot中有兩個非常重要的環境變量bootcmd和bootargs,接下來看一下這兩個環境變量。bootcmd和bootagrs是采用類似shell腳本語言編寫的,里面有很多的變量引用,這些變量其實都是環境變量,有很多是NXP自己定義的。文件mx6ull_alientek_emmc.h中的宏CONFIG_EXTRA_ENV_SETTINGS保存著這些環境變量的默認值,內容如下:
示例代碼33.3.1.1 宏CONFIG_EXTRA_ENV_SETTINGS默認值

113 #if defined(CONFIG_SYS_BOOT_NAND) 114 #define CONFIG_EXTRA_ENV_SETTINGS \ 115 CONFIG_MFG_ENV_SETTINGS \ 116 "panel=TFT43AB\0" \ 117 "fdt_addr=0x83000000\0" \ 118 "fdt_high=0xffffffff\0" \ ...... 126 "bootz ${loadaddr} - ${fdt_addr}\0" 127 128 #else 129 #define CONFIG_EXTRA_ENV_SETTINGS \ 130 CONFIG_MFG_ENV_SETTINGS \ 131 "script=boot.scr\0" \ 132 "image=zImage\0" \ 133 "console=ttymxc0\0" \ 134 "fdt_high=0xffffffff\0" \ 135 "initrd_high=0xffffffff\0" \ 136 "fdt_file=undefined\0" \ ...... 194 "findfdt="\ 195 "if test $fdt_file = undefined; then " \ 196 "if test $board_name = EVK && test $board_rev = 9X9; then " \ 197 "setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \ 198 "if test $board_name = EVK && test $board_rev = 14X14; then " \ 199 "setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \ 200 "if test $fdt_file = undefined; then " \ 201 "echo WARNING: Could not determine dtb to use; fi; " \ 202 "fi;\0" \ 宏CONFIG_EXTRA_ENV_SETTINGS是個條件編譯語句,使用NAND和EMMC的時候宏CONFIG_EXTRA_ENV_SETTINGS的值是不同的。

33.3.1 環境變量bootcmd
bootcmd在前面已經說了很多次了,bootcmd保存著uboot默認命令,uboot倒計時結束以后就會執行bootcmd中的命令。這些命令一般都是用來啟動Linux內核的,比如讀取EMMC或者NAND Flash中的Linux內核鏡像文件和設備樹文件到DRAM中,然后啟動Linux內核。可以在uboot啟動以后進入命令行設置bootcmd環境變量的值。如果EMMC或者NAND中沒有保存bootcmd的值,那么uboot就會使用默認的值,板子第一次運行uboot的時候都會使用默認值來設置bootcmd環境變量。打開文件include/env_default.h,在此文件中有如下所示內容:
示例代碼33.3.1.1 默認環境變量

13 #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED 14 env_t environment __PPCENV__ = { 15 ENV_CRC, /* CRC Sum */ 16 #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT 17 1, /* Flags: valid */ 18 #endif 19 { 20 #elif defined(DEFAULT_ENV_INSTANCE_STATIC) 21 static char default_environment[] = { 22 #else 23 const uchar default_environment[] = { 24 #endif 25 #ifdef CONFIG_ENV_CALLBACK_LIST_DEFAULT 26 ENV_CALLBACK_VAR "=" CONFIG_ENV_CALLBACK_LIST_DEFAULT "\0" 27 #endif 28 #ifdef CONFIG_ENV_FLAGS_LIST_DEFAULT 29 ENV_FLAGS_VAR "=" CONFIG_ENV_FLAGS_LIST_DEFAULT "\0" 30 #endif 31 #ifdef CONFIG_BOOTARGS 32 "bootargs=" CONFIG_BOOTARGS "\0" 33 #endif 34 #ifdef CONFIG_BOOTCOMMAND 35 "bootcmd=" CONFIG_BOOTCOMMAND "\0" 36 #endif 37 #ifdef CONFIG_RAMBOOTCOMMAND 38 "ramboot=" CONFIG_RAMBOOTCOMMAND "\0" 39 #endif 40 #ifdef CONFIG_NFSBOOTCOMMAND 41 "nfsboot=" CONFIG_NFSBOOTCOMMAND "\0" 42 #endif 43 #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0) 44 "bootdelay=" __stringify(CONFIG_BOOTDELAY) "\0" 45 #endif 46 #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0) 47 "baudrate=" __stringify(CONFIG_BAUDRATE) "\0" 48 #endif 49 #ifdef CONFIG_LOADS_ECHO 50 "loads_echo=" __stringify(CONFIG_LOADS_ECHO) "\0" 51 #endif 52 #ifdef CONFIG_ETHPRIME 53 "ethprime=" CONFIG_ETHPRIME "\0" 54 #endif 55 #ifdef CONFIG_IPADDR 56 "ipaddr=" __stringify(CONFIG_IPADDR) "\0" 57 #endif 58 #ifdef CONFIG_SERVERIP 59 "serverip=" __stringify(CONFIG_SERVERIP) "\0" 60 #endif 61 #ifdef CONFIG_SYS_AUTOLOAD 62 "autoload=" CONFIG_SYS_AUTOLOAD "\0" 63 #endif 64 #ifdef CONFIG_PREBOOT 65 "preboot=" CONFIG_PREBOOT "\0" 66 #endif 67 #ifdef CONFIG_ROOTPATH 68 "rootpath=" CONFIG_ROOTPATH "\0" 69 #endif 70 #ifdef CONFIG_GATEWAYIP 71 "gatewayip=" __stringify(CONFIG_GATEWAYIP) "\0" 72 #endif 73 #ifdef CONFIG_NETMASK 74 "netmask=" __stringify(CONFIG_NETMASK) "\0" 75 #endif 76 #ifdef CONFIG_HOSTNAME 77 "hostname=" __stringify(CONFIG_HOSTNAME) "\0" 78 #endif 79 #ifdef CONFIG_BOOTFILE 80 "bootfile=" CONFIG_BOOTFILE "\0" 81 #endif 82 #ifdef CONFIG_LOADADDR 83 "loadaddr=" __stringify(CONFIG_LOADADDR) "\0" 84 #endif 85 #ifdef CONFIG_CLOCKS_IN_MHZ 86 "clocks_in_mhz=1\0" 87 #endif 88 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0) 89 "pcidelay=" __stringify(CONFIG_PCI_BOOTDELAY)"\0" 90 #endif 91 #ifdef CONFIG_ENV_VARS_UBOOT_CONFIG 92 "arch=" CONFIG_SYS_ARCH "\0" 93 "cpu=" CONFIG_SYS_CPU "\0" 94 "board=" CONFIG_SYS_BOARD "\0" 95 "board_name=" CONFIG_SYS_BOARD "\0" 96 #ifdef CONFIG_SYS_VENDOR 97 "vendor=" CONFIG_SYS_VENDOR "\0" 98 #endif 99 #ifdef CONFIG_SYS_SOC 100 "soc=" CONFIG_SYS_SOC "\0" 101 #endif 102 #endif 103 #ifdef CONFIG_EXTRA_ENV_SETTINGS 104 CONFIG_EXTRA_ENV_SETTINGS 105 #endif 106 "\0" 107 #ifdef DEFAULT_ENV_INSTANCE_EMBEDDED 108 } 109 #endif 110 }; 第13~23行,這段代碼是個條件編譯,由于沒有定義DEFAULT_ENV_INSTANCE_EMBEDDED和CONFIG_SYS_REDUNDAND_ENVIRONMENT,因此uchar default_environment[]數組保存環境變量。

在示例代碼33.3.1.1中指定了很多環境變量的默認值,比如bootcmd的默認值就是CONFIG_BOOTCOMMAND,bootargs的默認值就是CONFIG_BOOTARGS。我們可以在mx6ull_alientek_emmc.h文件中通過設置宏CONFIG_BOOTCOMMAND來設置bootcmd的默認值,NXP官方設置的CONFIG_BOOTCOMMAND值如下:
示例代碼33.3.1.3 CONFIG_BOOTCOMMAND默認值

204 #define CONFIG_BOOTCOMMAND \ 205 "run findfdt;" \ 206 "mmc dev ${mmcdev};" \ 207 "mmc dev ${mmcdev}; if mmc rescan; then " \ 208 "if run loadbootscript; then " \ 209 "run bootscript; " \ 210 "else " \ 211 "if run loadimage; then " \ 212 "run mmcboot; " \ 213 "else run netboot; " \ 214 "fi; " \ 215 "fi; " \ 216 "else run netboot; fi" 看起來很復雜的樣子!因為uboot使用了類似shell腳本語言的方式來編寫的,我們一行一行來分析。

第205行,run findfdt;使用的是uboot的run命令來運行findfdt,findfdt是NXP自行添加的環境變量。findfdt是用來查找開發板對應的設備樹文件(.dtb)。IMX6ULL EVK的設備樹文件為imx6ull-14x14-evk.dtb,findfdt內容如下:
“findfdt=”
"if test $fdt_file = undefined; then " \
"if test $board_name = EVK && test $board_rev = 9X9; then "
"setenv fdt_file imx6ull-9x9-evk.dtb; fi; "
"if test $board_name = EVK && test $board_rev = 14X14; then "
"setenv fdt_file imx6ull-14x14-evk.dtb; fi; "
"if test $fdt_file = undefined; then "
"echo WARNING: Could not determine dtb to use; fi; "
“fi;\0”
findfdt里面用到的變量有fdt_file,board_name,board_rev,這三個變量內容如下:
fdt_file=undefined,board_name=EVK,board_rev=14X14
findfdt做的事情就是判斷,fdt_file是否為undefined,如果fdt_file為undefined的話那就要根據板子信息得出所需的.dtb文件名。此時fdt_file為undefined,所以根據board_name和board_rev來判斷實際所需的.dtb文件,如果board_name為EVK并且board_rev=9x9的話fdt_file就為imx6ull-9x9-evk.dtb。如果board_name為EVK并且board_rev=14x14的話fdt_file就設置為imx6ull-14x14-evk.dtb。因此IMX6ULL EVK板子的設備樹文件就是imx6ull-14x14-evk.dtb,
因此run findfdt的結果就是設置fdt_file為imx6ull-14x14-evk.dtb。
第206行,mmc dev ${mmcdev}用于切換mmc設備,mmcdev為1,因此這行代碼就是:mmc dev 1,也就是切換到EMMC上。
第207行,先執行mmc dev ${mmcdev}切換到EMMC上,然后使用命令mmc rescan掃描看有沒有SD卡或者EMMC存在,如果沒有的話就直接跳到216行,執行run netboot,netboot也是一個自定義的環境變量,這個變量是從網絡啟動Linux的。如果mmc設備存在的話就從mmc設備啟動。
第208行,運行loadbootscript環境變量,此環境變量內容如下:
loadbootscript=fatload mmc mmcdev:{mmcdev}:mmcdev:{mmcpart} ${loadaddr} ${script};
其中mmcdev=1,mmcpart=1,loadaddr=0x80800000,script= boot.scr,因此展開以后就是:
loadbootscript=fatload mmc 1:1 0x80800000 boot.scr;
loadbootscript就是從mmc1的分區1中讀取文件boot.src到DRAM的0X80800000處。但是mmc1的分區1中沒有boot.src這個文件,可以使用命令“ls mmc 1:1”查看一下mmc1分區1中的所有文件,看看有沒有boot.src這個文件。
第209行,如果加載boot.src文件成功的話就運行bootscript環境變量,bootscript的內容如下:
bootscript=echo Running bootscript from mmc …;
source
因為boot.src文件不存在,所以bootscript也就不會運行。
第211行,如果loadbootscript沒有找到boot.src的話就運行環境變量loadimage,環境變量loadimage內容如下:
loadimage=fatload mmc mmcdev:{mmcdev}:mmcdev:{mmcpart} ${loadaddr} ${image}
其中mmcdev=1,mmcpart=1,loadaddr=0x80800000,image = zImage,展開以后就是:
loadimage=fatload mmc 1:1 0x80800000 zImage
可以看出loadimage就是從mmc1的分區中讀取zImage到內存的0X80800000處,而mmc1的分區1中存在zImage。
第212行,加載linux鏡像文件zImage成功以后就運行環境變量mmcboot,否則的話運行netboot環境變量。mmcboot環境變量如下:
示例代碼33.3.1.4 mmcboot環境變量

154 "mmcboot=echo Booting from mmc ...; " \ 155 "run mmcargs; " \ 156 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ 157 "if run loadfdt; then " \ 158 "bootz ${loadaddr} - ${fdt_addr}; " \ 159 "else " \ 160 "if test ${boot_fdt} = try; then " \ 161 "bootz; " \ 162 "else " \ 163 "echo WARN: Cannot load the DT; " \ 164 "fi; " \ 165 "fi; " \ 166 "else " \ 167 "bootz; " \ 168 "fi;\0" \ 第154行,輸出信息“Booting from mmc ...”。 第155行,運行環境變量mmcargs,mmcargs用來設置bootargs,后面分析bootargs的時候在學習。 第156行,判斷boot_fdt是否為yes或者try,根據uboot輸出的環境變量信息可知boot_fdt=try。因此會執行157行的語句。 第157行,運行環境變量loadfdt,環境變量loadfdt定義如下:

loadfdt=fatload mmc mmcdev:{mmcdev}:mmcdev:{mmcpart} ${fdt_addr} ${fdt_file}
展開以后就是:
loadfdt=fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb
因此loadfdt的作用就是從mmc1的分區1中讀取imx6ull-14x14-evk.dtb文件并放到0x83000000處。
第158行,如果讀取.dtb文件成功的話那就調用命令bootz啟動linux,調用方法如下:
bootz ${loadaddr} - KaTeX parse error: Expected 'EOF', got '#' at position 481: …TCOMMAND就可簡化為: #?define CONFIG_B…{console},baudrateroot={baudrate} root=baudrateroot={mmcroot}
其中console=ttymxc0,baudrate=115200,mmcroot=/dev/mmcblk1p2 rootwait rw,因此將mmcargs展開以后就是:
mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw
可以看出環境變量mmcargs就是設置bootargs的值為“console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw”,bootargs就是設置了很多的參數的值,這些參數Linux內核會使用到,常用的參數有:
1、console
console用來設置linux終端(或者叫控制臺),也就是通過什么設備來和Linux進行交互,是串口還是LCD屏幕?如果是串口的話應該是串口幾等等。一般設置串口作為Linux終端,這樣我們就可以在電腦上通過SecureCRT來和linux交互了。這里設置console為ttymxc0,因為linux啟動以后I.MX6ULL的串口1在linux下的設備文件就是/dev/ttymxc0,在Linux下,一切皆文件。
ttymxc0后面有個“,115200”,這是設置串口的波特率,console=ttymxc0,115200綜合起來就是設置ttymxc0(也就是串口1)作為Linux的終端,并且串口波特率設置為115200。
2、root
root用來設置根文件系統的位置,root=/dev/mmcblk1p2用于指明根文件系統存放在mmcblk1設備的分區2中。EMMC版本的核心板啟動linux以后會存在/dev/mmcblk0、/dev/mmcblk1、/dev/mmcblk0p1、/dev/mmcblk0p2、/dev/mmcblk1p1和/dev/mmcblk1p2這樣的文件,其中/dev/mmcblkx(x=0n)表示mmc設備,而/dev/mmcblkxpy(x=0n,y=1~n)表示mmc設備x的分區y。在I.MX6U-ALPHA開發板中/dev/mmcblk1表示EMMC,而/dev/mmcblk1p2表示EMMC的分區2。
root后面有“rootwait rw”,rootwait表示等待mmc設備初始化完成以后再掛載,否則的話mmc設備還沒初始化完成就掛載根文件系統會出錯的。rw表示根文件系統是可以讀寫的,不加rw的話可能無法在根文件系統中進行寫操作,只能進行讀操作。
3、rootfstype
此選項一般配置root一起使用,rootfstype用于指定根文件系統類型,如果根文件系統為ext格式的話此選項無所謂。如果根文件系統是yaffs、jffs或ubifs的話就需要設置此選項,指定根文件系統的類型。
bootargs常設置的選項就這三個,后面遇到其他選項的話再講解。
33.4 uboot啟動Linux測試
uboot已經移植好了,bootcmd和bootargs這兩個重要的環境變量也講解了,接下來就要測試一下uboot能不能完成它的工作:啟動Linux內核。我們測試兩種啟動Linux內核的方法,一種是直接從EMMC啟動,一種是從網絡啟動。
33.4.1 從EMMC啟動Linux系統
從EMMC啟動也就是將編譯出來的Linux鏡像文件zImage和設備樹文件保存在EMMC中,uboot從EMMC中讀取這兩個文件并啟動,這個是我們產品最終的啟動方式。但是我們目前還沒有講解如何移植linux和設備樹文件,以及如何將zImage和設備樹文件保存到EMMC中。不過大家拿到手的I.MX6U-ALPHA開發板(EMMC版本)已經將zImage文件和設備樹文件燒寫到了EMMC中,所以我們可以直接讀取來測試。先檢查一下EMMC的分區1中有沒有zImage文件和設備樹文件,輸入命令“ls mmc 1:1”,結果如圖33.4.1.1所示:

圖33.4.1.1 EMMC分區1文件
從圖33.4.1.1中可以看出,此時EMMC分區1中存在zimage和imx6ull-alientek-emmc.dtb這兩個文件,所以我們可以測試新移植的uboot能不能啟動linux內核。設置bootargs和bootcmd這兩個環境變量,設置如下:
setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’
setenv bootcmd ‘mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;’
saveenv
設置好以后直接輸入boot,或者run bootcmd即可啟動Linux內核,如果Linux內核啟動成功的話就會輸出如圖33.4.1.2所示的啟動信息:

圖33.4.1.2 linux內核啟動成功
33.4.2 從網絡啟動Linux系統
從網絡啟動linux系統的唯一目的就是為了調試!不管是為了調試linux系統還是linux下的驅動。每次修改linux系統文件或者linux下的某個驅動以后都要將其燒寫到EMMC中去測試,這樣太麻煩了。我們可以設置linux從網絡啟動,也就是將linux鏡像文件和根文件系統都放到Ubuntu下某個指定的文件夾中,這樣每次重新編譯linux內核或者某個linux驅動以后只需要使用cp命令將其拷貝到這個指定的文件夾中即可,這樣就不用需要頻繁的燒寫EMMC,這樣就加快了開發速度。我們可以通過nfs或者tftp從Ubuntu中下載zImage和設備樹文件,根文件系統的話也可以通過nfs掛載,不過本小節我們不講解如何通過nfs掛載根文件系統,這個在講解根文件系統移植的時候再講解。這里我們使用tftp從Ubuntu中下載zImage和設備樹文件,前提是要將zImage和設備樹文件放到Ubuntu下的tftp目錄中,具體方法在30.4.4小節講解tftp命令的時候已經詳細的介紹過了。
設置bootargs和bootcmd這兩個環境變量,設置如下:
setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’
setenv bootcmd ‘tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000’
saveenv
一開始是通過tftp下載zImage和imx6ull-alientek-emmc.dtb這兩個文件,過程如下圖33.4.2.1所示:

圖33.4.2.1 下載過程
下載完成以后就是啟動Linux內核,啟動過程如圖33.4.2.2所示:

圖33.4.2.2 Linux啟動過程
uboot移植到此結束,簡單總結一下uboot移植的過程:
①、不管是購買的開發板還是自己做的開發板,基本都是參考半導體廠商的dmeo板,而半導體廠商會在他們自己的開發板上移植好uboot、linux kernel和rootfs等,最終制作好BSP包提供給用戶。我們可以在官方提供的BSP包的基礎上添加我們的板子,也就是俗稱的移植。
②、我們購買的開發板或者自己做的板子一般都不會原封不動的照抄半導體廠商的demo板,都會根據實際的情況來做修改,既然有修改就必然涉及到uboot下驅動的移植。
③、一般uboot中需要解決串口、NAND、EMMC或SD卡、網絡和LCD驅動,因為uboot的主要目的就是啟動Linux內核,所以不需要考慮太多的外設驅動。
④、在uboot中添加自己的板子信息,根據自己板子的實際情況來修改uboot中的驅動。

總結

以上是生活随笔為你收集整理的【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

а√天堂www在线天堂小说 | 97夜夜澡人人双人人人喊 | 全黄性性激高免费视频 | 国产精品美女久久久 | 成人亚洲精品久久久久软件 | 中文字幕乱码亚洲无线三区 | 未满小14洗澡无码视频网站 | 99久久亚洲精品无码毛片 | 国产特级毛片aaaaaaa高清 | 国产人妻精品午夜福利免费 | 又黄又爽又色的视频 | 亚洲精品国产精品乱码不卡 | 波多野结衣 黑人 | 欧美熟妇另类久久久久久多毛 | 久久99久久99精品中文字幕 | 伊在人天堂亚洲香蕉精品区 | 无码人妻出轨黑人中文字幕 | 欧美高清在线精品一区 | 少妇厨房愉情理9仑片视频 | 老司机亚洲精品影院 | 偷窥村妇洗澡毛毛多 | 日本xxxx色视频在线观看免费 | a在线观看免费网站大全 | 国产成人av免费观看 | 亚洲国产成人av在线观看 | 亚洲国产精品无码久久久久高潮 | 亚洲第一无码av无码专区 | 久久精品国产一区二区三区 | 国产av一区二区三区最新精品 | 真人与拘做受免费视频一 | 学生妹亚洲一区二区 | 一本加勒比波多野结衣 | 久久国产自偷自偷免费一区调 | 亚洲中文字幕无码中字 | 中文字幕乱码亚洲无线三区 | 久久精品国产一区二区三区 | 中文字幕av无码一区二区三区电影 | 国产综合色产在线精品 | 国产超碰人人爽人人做人人添 | 人人妻人人澡人人爽欧美一区 | 日本又色又爽又黄的a片18禁 | 成人免费视频视频在线观看 免费 | 欧美激情综合亚洲一二区 | 国产av一区二区三区最新精品 | 国产精品久久国产精品99 | 日本精品少妇一区二区三区 | 日日摸天天摸爽爽狠狠97 | 久久久精品欧美一区二区免费 | 牲欲强的熟妇农村老妇女视频 | 国产精品99爱免费视频 | 伊人色综合久久天天小片 | 欧美成人午夜精品久久久 | 国产精品igao视频网 | 日本大乳高潮视频在线观看 | 中文精品无码中文字幕无码专区 | 亚洲午夜久久久影院 | 国产疯狂伦交大片 | 性做久久久久久久免费看 | 成人无码精品1区2区3区免费看 | 少妇激情av一区二区 | 亚洲精品一区二区三区婷婷月 | 人人澡人人妻人人爽人人蜜桃 | 亚洲中文字幕成人无码 | 亚洲a无码综合a国产av中文 | 性生交片免费无码看人 | 日韩欧美群交p片內射中文 | 国内老熟妇对白xxxxhd | 日日摸夜夜摸狠狠摸婷婷 | 日韩视频 中文字幕 视频一区 | 夜夜影院未满十八勿进 | 在线欧美精品一区二区三区 | 中文字幕人妻丝袜二区 | 国产精品免费大片 | 欧美freesex黑人又粗又大 | 又大又黄又粗又爽的免费视频 | 色妞www精品免费视频 | 九九综合va免费看 | 蜜桃视频插满18在线观看 | 亚洲阿v天堂在线 | 国产亚洲美女精品久久久2020 | 中国女人内谢69xxxxxa片 | 鲁大师影院在线观看 | 亚洲精品一区二区三区四区五区 | 精品国产一区二区三区四区在线看 | 国产偷抇久久精品a片69 | 久久综合九色综合欧美狠狠 | 中文字幕乱码人妻无码久久 | 无码国模国产在线观看 | 亚洲男人av天堂午夜在 | 亚洲国产精品一区二区第一页 | 亚洲人成无码网www | 强奷人妻日本中文字幕 | 女人被男人躁得好爽免费视频 | 欧美熟妇另类久久久久久不卡 | 国产凸凹视频一区二区 | 狠狠色欧美亚洲狠狠色www | 色婷婷综合中文久久一本 | 黑人大群体交免费视频 | 国产精品久久久久久久影院 | 精品无码av一区二区三区 | 亚洲高清偷拍一区二区三区 | 欧美精品国产综合久久 | 在线天堂新版最新版在线8 | 天堂一区人妻无码 | 麻豆国产丝袜白领秘书在线观看 | 天干天干啦夜天干天2017 | 国产免费久久久久久无码 | 装睡被陌生人摸出水好爽 | 一区二区传媒有限公司 | 久久综合香蕉国产蜜臀av | 久久成人a毛片免费观看网站 | 久久视频在线观看精品 | 亚洲人成影院在线无码按摩店 | 一本久久a久久精品vr综合 | 东北女人啪啪对白 | 国产肉丝袜在线观看 | 99er热精品视频 | 亚洲一区二区三区无码久久 | 色婷婷综合中文久久一本 | 曰韩少妇内射免费播放 | 又大又硬又黄的免费视频 | 亚洲欧美精品伊人久久 | 国精产品一区二区三区 | 丝袜人妻一区二区三区 | 精品国产乱码久久久久乱码 | 日产精品高潮呻吟av久久 | 美女极度色诱视频国产 | 性色欲情网站iwww九文堂 | 亚洲色在线无码国产精品不卡 | 久久无码中文字幕免费影院蜜桃 | 熟女俱乐部五十路六十路av | 丰满人妻翻云覆雨呻吟视频 | 欧美熟妇另类久久久久久多毛 | 中文字幕av伊人av无码av | 天海翼激烈高潮到腰振不止 | 无码免费一区二区三区 | 成熟女人特级毛片www免费 | 国产乱人无码伦av在线a | 色婷婷综合中文久久一本 | 国产精品亚洲а∨无码播放麻豆 | 色综合视频一区二区三区 | 久久成人a毛片免费观看网站 | 无码av免费一区二区三区试看 | 国产偷自视频区视频 | 风流少妇按摩来高潮 | 日韩欧美群交p片內射中文 | 国产高潮视频在线观看 | 人妻少妇精品视频专区 | 无码国产激情在线观看 | 日韩成人一区二区三区在线观看 | 伊人久久大香线蕉亚洲 | 色狠狠av一区二区三区 | av在线亚洲欧洲日产一区二区 | 精品人妻人人做人人爽 | 成人欧美一区二区三区黑人免费 | 国内精品久久毛片一区二区 | 久久久久久av无码免费看大片 | 亚洲中文字幕无码中字 | 中文字幕人妻无码一区二区三区 | 国产激情无码一区二区 | 内射白嫩少妇超碰 | 国产成人精品无码播放 | 亚洲欧美色中文字幕在线 | 欧美日韩在线亚洲综合国产人 | 蜜桃臀无码内射一区二区三区 | 精品国产一区av天美传媒 | 人人爽人人澡人人人妻 | 国产精品理论片在线观看 | 亚洲中文字幕在线无码一区二区 | 亚洲精品一区二区三区在线 | 亚洲熟女一区二区三区 | 亚洲中文字幕在线无码一区二区 | 亚洲爆乳大丰满无码专区 | 扒开双腿吃奶呻吟做受视频 | 久久久亚洲欧洲日产国码αv | 激情人妻另类人妻伦 | 婷婷丁香五月天综合东京热 | 乱码av麻豆丝袜熟女系列 | 欧美xxxx黑人又粗又长 | 亚洲无人区午夜福利码高清完整版 | 国产成人无码一二三区视频 | 国产特级毛片aaaaaa高潮流水 | 国产色视频一区二区三区 | 亚洲国产欧美国产综合一区 | 成人影院yy111111在线观看 | 国产精品内射视频免费 | 中文无码伦av中文字幕 | 亚洲精品www久久久 | 国产精品久免费的黄网站 | 久久精品国产99精品亚洲 | 人妻尝试又大又粗久久 | 亚洲欧美综合区丁香五月小说 | 一本色道久久综合亚洲精品不卡 | 国产精品99久久精品爆乳 | 亲嘴扒胸摸屁股激烈网站 | 双乳奶水饱满少妇呻吟 | 精品人妻人人做人人爽夜夜爽 | 思思久久99热只有频精品66 | 中文字幕乱码亚洲无线三区 | 风流少妇按摩来高潮 | 亚洲国产欧美在线成人 | 亚洲 欧美 激情 小说 另类 | 亚洲精品成人福利网站 | 内射白嫩少妇超碰 | 九九久久精品国产免费看小说 | 国产成人无码午夜视频在线观看 | 久久综合九色综合欧美狠狠 | 久久成人a毛片免费观看网站 | 亚洲国产精品无码一区二区三区 | 午夜精品一区二区三区在线观看 | 强辱丰满人妻hd中文字幕 | 人妻插b视频一区二区三区 | 亚洲国产精品毛片av不卡在线 | 国产成人综合色在线观看网站 | 一区二区三区乱码在线 | 欧洲 | 日本va欧美va欧美va精品 | 精品国产一区二区三区四区 | 精品国产成人一区二区三区 | 久久久久国色av免费观看性色 | 国产三级精品三级男人的天堂 | 亚洲中文无码av永久不收费 | 老子影院午夜伦不卡 | aⅴ亚洲 日韩 色 图网站 播放 | 中文字幕无码免费久久99 | 青春草在线视频免费观看 | 日本护士xxxxhd少妇 | 亚洲成a人一区二区三区 | 亚洲日韩精品欧美一区二区 | 国产97在线 | 亚洲 | 精品无码一区二区三区的天堂 | 亚洲精品无码人妻无码 | 亚洲一区二区三区 | 天天摸天天透天天添 | 国产亚洲精品久久久ai换 | 欧美丰满少妇xxxx性 | 久久五月精品中文字幕 | 国内揄拍国内精品少妇国语 | 1000部啪啪未满十八勿入下载 | 亚洲精品国产精品乱码不卡 | 99国产精品白浆在线观看免费 | 女人被男人爽到呻吟的视频 | 激情综合激情五月俺也去 | 欧美日韩人成综合在线播放 | 在线成人www免费观看视频 | 国产精品无码成人午夜电影 | 亚洲中文字幕在线无码一区二区 | а√天堂www在线天堂小说 | 丝袜美腿亚洲一区二区 | 色一情一乱一伦一视频免费看 | 成人欧美一区二区三区黑人 | 免费无码一区二区三区蜜桃大 | 国产av人人夜夜澡人人爽麻豆 | 亚洲精品无码国产 | 日本免费一区二区三区最新 | 精品乱子伦一区二区三区 | 国产精品无码永久免费888 | 性色欲情网站iwww九文堂 | 亚洲熟熟妇xxxx | 亚洲第一网站男人都懂 | 久久精品国产一区二区三区肥胖 | 精品无码一区二区三区的天堂 | 亚洲中文字幕在线无码一区二区 | 美女张开腿让人桶 | 老熟女重囗味hdxx69 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲精品综合五月久久小说 | 成人欧美一区二区三区 | 蜜臀av在线播放 久久综合激激的五月天 | 亚洲第一网站男人都懂 | 亚洲国产精品美女久久久久 | 日韩无码专区 | 天堂一区人妻无码 | 无码av免费一区二区三区试看 | 天天综合网天天综合色 | 特黄特色大片免费播放器图片 | 亚洲色欲色欲欲www在线 | 无码成人精品区在线观看 | 内射后入在线观看一区 | 黑人巨大精品欧美黑寡妇 | 国产午夜亚洲精品不卡 | 亚洲中文字幕无码一久久区 | 强开小婷嫩苞又嫩又紧视频 | 性欧美videos高清精品 | 欧美高清在线精品一区 | 中文字幕无码日韩欧毛 | 麻豆国产丝袜白领秘书在线观看 | 国产69精品久久久久app下载 | 国产精品久久久一区二区三区 | 牲欲强的熟妇农村老妇女 | 少妇邻居内射在线 | 免费网站看v片在线18禁无码 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 四虎永久在线精品免费网址 | 亚洲爆乳精品无码一区二区三区 | 欧美熟妇另类久久久久久不卡 | av无码不卡在线观看免费 | 久久久国产精品无码免费专区 | 老熟女重囗味hdxx69 | 亚洲成av人影院在线观看 | 久久精品一区二区三区四区 | 亚洲欧美综合区丁香五月小说 | 无码国产激情在线观看 | 色爱情人网站 | 亚洲精品国产第一综合99久久 | 一本久久a久久精品亚洲 | 一二三四社区在线中文视频 | 国产又爽又黄又刺激的视频 | 国产婷婷色一区二区三区在线 | 国产偷国产偷精品高清尤物 | 青草视频在线播放 | 丰满人妻翻云覆雨呻吟视频 | 老司机亚洲精品影院 | 性生交片免费无码看人 | 久久综合九色综合欧美狠狠 | 国产熟妇另类久久久久 | 精品无码av一区二区三区 | 国产精品亚洲专区无码不卡 | 精品 日韩 国产 欧美 视频 | 国产精品高潮呻吟av久久 | 久久久中文久久久无码 | 亚洲人成人无码网www国产 | 中文精品久久久久人妻不卡 | 扒开双腿疯狂进出爽爽爽视频 | 老司机亚洲精品影院无码 | 国产午夜手机精彩视频 | 无套内谢的新婚少妇国语播放 | 欧美丰满熟妇xxxx | 三上悠亚人妻中文字幕在线 | 一个人免费观看的www视频 | 无码人妻久久一区二区三区不卡 | 久久亚洲国产成人精品性色 | 欧美一区二区三区视频在线观看 | 少妇的肉体aa片免费 | 亚洲精品一区国产 | 亚洲国产日韩a在线播放 | 性欧美疯狂xxxxbbbb | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲国产成人av在线观看 | 内射后入在线观看一区 | 伦伦影院午夜理论片 | 国产精品怡红院永久免费 | 十八禁真人啪啪免费网站 | 国产精品-区区久久久狼 | 精品厕所偷拍各类美女tp嘘嘘 | 福利一区二区三区视频在线观看 | 亚洲无人区午夜福利码高清完整版 | 丰满少妇高潮惨叫视频 | 国产精品毛片一区二区 | 日本又色又爽又黄的a片18禁 | 日韩少妇内射免费播放 | 奇米影视7777久久精品人人爽 | 成熟女人特级毛片www免费 | 国内少妇偷人精品视频 | 99国产欧美久久久精品 | 国产午夜亚洲精品不卡下载 | 精品一区二区三区波多野结衣 | 欧美freesex黑人又粗又大 | 亚洲成av人片天堂网无码】 | 99久久久无码国产精品免费 | 日日夜夜撸啊撸 | 国产精品鲁鲁鲁 | 在线播放亚洲第一字幕 | 少妇人妻大乳在线视频 | 特级做a爰片毛片免费69 | 亚洲阿v天堂在线 | 色婷婷久久一区二区三区麻豆 | v一区无码内射国产 | 久久精品人人做人人综合试看 | 天天躁夜夜躁狠狠是什么心态 | 在线欧美精品一区二区三区 | 色情久久久av熟女人妻网站 | 中文字幕日韩精品一区二区三区 | 永久免费精品精品永久-夜色 | 日日橹狠狠爱欧美视频 | 亚洲小说春色综合另类 | 国产精品久久国产精品99 | 日日摸天天摸爽爽狠狠97 | 亚洲中文无码av永久不收费 | 色综合久久88色综合天天 | 青青青爽视频在线观看 | 国产舌乚八伦偷品w中 | 玩弄少妇高潮ⅹxxxyw | 国产又爽又猛又粗的视频a片 | 国产69精品久久久久app下载 | 亚洲一区二区三区四区 | 性欧美熟妇videofreesex | 中文无码伦av中文字幕 | 免费人成在线视频无码 | 中文字幕日韩精品一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 综合激情五月综合激情五月激情1 | 久久亚洲日韩精品一区二区三区 | 少妇无码吹潮 | 荫蒂被男人添的好舒服爽免费视频 | 国产农村妇女高潮大叫 | 久久久精品456亚洲影院 | 蜜桃视频韩日免费播放 | 国产精品成人av在线观看 | 波多野结衣乳巨码无在线观看 | 国产精品美女久久久久av爽李琼 | 熟妇人妻无码xxx视频 | 妺妺窝人体色www婷婷 | 久久精品人人做人人综合试看 | 欧美熟妇另类久久久久久多毛 | 午夜福利一区二区三区在线观看 | 亚洲人成影院在线无码按摩店 | 成年美女黄网站色大免费全看 | 天天做天天爱天天爽综合网 | 亚洲熟妇色xxxxx欧美老妇y | 久久久久久九九精品久 | 久久天天躁夜夜躁狠狠 | 中文字幕无线码 | 欧美精品国产综合久久 | av无码久久久久不卡免费网站 | 99精品无人区乱码1区2区3区 | 欧美激情综合亚洲一二区 | 久久国产精品偷任你爽任你 | 国产艳妇av在线观看果冻传媒 | 日本xxxx色视频在线观看免费 | 亚洲色欲色欲欲www在线 | 国产人妻精品一区二区三区 | 男女作爱免费网站 | 精品国产一区二区三区四区 | 大肉大捧一进一出好爽视频 | 日本饥渴人妻欲求不满 | 亚洲 欧美 激情 小说 另类 | 偷窥日本少妇撒尿chinese | 人人爽人人爽人人片av亚洲 | 在教室伦流澡到高潮hnp视频 | 国产美女精品一区二区三区 | 国产精品怡红院永久免费 | 日本丰满护士爆乳xxxx | 欧美日韩人成综合在线播放 | 欧美老熟妇乱xxxxx | 久久亚洲a片com人成 | 国产成人人人97超碰超爽8 | 我要看www免费看插插视频 | 日本一本二本三区免费 | 欧美性生交xxxxx久久久 | 亚洲国产精品无码一区二区三区 | 欧美国产亚洲日韩在线二区 | 国内精品一区二区三区不卡 | 欧美35页视频在线观看 | 精品成在人线av无码免费看 | 色五月五月丁香亚洲综合网 | 国内精品人妻无码久久久影院 | 麻豆国产97在线 | 欧洲 | 日本一卡二卡不卡视频查询 | 亚洲欧洲无卡二区视頻 | 偷窥村妇洗澡毛毛多 | 天天综合网天天综合色 | 99久久久无码国产精品免费 | аⅴ资源天堂资源库在线 | 国产亚洲精品久久久久久久 | 日韩亚洲欧美中文高清在线 | 精品国产成人一区二区三区 | 国产精品va在线播放 | 丰满人妻翻云覆雨呻吟视频 | 国内精品久久毛片一区二区 | 女人被男人躁得好爽免费视频 | 亚洲精品中文字幕 | 久久精品女人的天堂av | 久久午夜无码鲁丝片午夜精品 | 熟女少妇人妻中文字幕 | 男女超爽视频免费播放 | 日本丰满护士爆乳xxxx | 无码人中文字幕 | 性啪啪chinese东北女人 | 国产亚洲精品久久久久久国模美 | 伊人久久大香线焦av综合影院 | 香港三级日本三级妇三级 | 大地资源中文第3页 | 少妇人妻偷人精品无码视频 | 中文字幕人妻无码一区二区三区 | 天堂久久天堂av色综合 | 中文字幕av伊人av无码av | 欧美激情内射喷水高潮 | 成人无码视频在线观看网站 | 色综合久久久无码中文字幕 | 麻豆人妻少妇精品无码专区 | 久久99精品国产麻豆蜜芽 | 日韩亚洲欧美中文高清在线 | 亚洲 高清 成人 动漫 | 久久午夜无码鲁丝片 | 亚洲中文字幕久久无码 | 国产在热线精品视频 | 日韩人妻少妇一区二区三区 | 色欲人妻aaaaaaa无码 | 色婷婷综合激情综在线播放 | 亚洲a无码综合a国产av中文 | 欧美日韩人成综合在线播放 | 亲嘴扒胸摸屁股激烈网站 | 婷婷综合久久中文字幕蜜桃三电影 | 女人被男人爽到呻吟的视频 | 久久97精品久久久久久久不卡 | 永久免费精品精品永久-夜色 | 久久国产精品精品国产色婷婷 | 中文字幕乱码中文乱码51精品 | 狠狠cao日日穞夜夜穞av | 日日摸夜夜摸狠狠摸婷婷 | 任你躁在线精品免费 | 97夜夜澡人人爽人人喊中国片 | 特级做a爰片毛片免费69 | 欧美亚洲日韩国产人成在线播放 | a片在线免费观看 | 亚洲天堂2017无码中文 | 亚洲一区二区三区无码久久 | 国产一区二区三区四区五区加勒比 | 亚洲色无码一区二区三区 | 久久99精品国产麻豆 | 亚洲一区av无码专区在线观看 | 98国产精品综合一区二区三区 | 亚欧洲精品在线视频免费观看 | 亚洲自偷自拍另类第1页 | 麻豆国产97在线 | 欧洲 | 欧美兽交xxxx×视频 | 青草青草久热国产精品 | 国产午夜手机精彩视频 | 亚洲精品一区二区三区大桥未久 | 精品无码一区二区三区的天堂 | 国产超级va在线观看视频 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产在线aaa片一区二区99 | 日产精品99久久久久久 | 欧美成人免费全部网站 | 久久久久久九九精品久 | 欧美精品一区二区精品久久 | 久久无码中文字幕免费影院蜜桃 | 狠狠cao日日穞夜夜穞av | 国产成人精品必看 | 久久综合色之久久综合 | 国产va免费精品观看 | 欧美第一黄网免费网站 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 中文字幕亚洲情99在线 | 国产亚av手机在线观看 | 成人片黄网站色大片免费观看 | 国产精品-区区久久久狼 | 亚洲国产日韩a在线播放 | 一本久久a久久精品亚洲 | 日本乱人伦片中文三区 | 欧美成人午夜精品久久久 | 国产sm调教视频在线观看 | 国产美女精品一区二区三区 | 伊人色综合久久天天小片 | 欧美精品国产综合久久 | 人妻天天爽夜夜爽一区二区 | 内射爽无广熟女亚洲 | 日韩精品乱码av一区二区 | 婷婷五月综合激情中文字幕 | 国产亚洲精品久久久久久大师 | 十八禁真人啪啪免费网站 | 四虎永久在线精品免费网址 | 人妻插b视频一区二区三区 | 精品国产青草久久久久福利 | 国产午夜视频在线观看 | 亚洲国产精品一区二区第一页 | 大肉大捧一进一出视频出来呀 | 高清无码午夜福利视频 | 精品一区二区三区无码免费视频 | 夜夜高潮次次欢爽av女 | 日韩少妇白浆无码系列 | 一本色道婷婷久久欧美 | 国产成人无码av一区二区 | 免费观看黄网站 | 人人妻人人澡人人爽人人精品浪潮 | 少妇太爽了在线观看 | 欧美性生交活xxxxxdddd | 久久久精品456亚洲影院 | 欧美人与善在线com | 亚洲日本一区二区三区在线 | 超碰97人人做人人爱少妇 | 欧美喷潮久久久xxxxx | 色婷婷久久一区二区三区麻豆 | 成人片黄网站色大片免费观看 | 久久久久久久久888 | 正在播放东北夫妻内射 | 未满成年国产在线观看 | 18禁黄网站男男禁片免费观看 | 亚洲日韩精品欧美一区二区 | 亚洲熟妇色xxxxx亚洲 | 亚洲欧美中文字幕5发布 | 欧美freesex黑人又粗又大 | 日本肉体xxxx裸交 | 成人免费视频在线观看 | 免费国产成人高清在线观看网站 | 人妻与老人中文字幕 | 国産精品久久久久久久 | 亚洲狠狠婷婷综合久久 | 国产凸凹视频一区二区 | 亚洲中文字幕在线无码一区二区 | 人妻熟女一区 | 搡女人真爽免费视频大全 | 伦伦影院午夜理论片 | 国产亚洲精品久久久ai换 | 午夜免费福利小电影 | 久久综合给合久久狠狠狠97色 | 国产成人无码区免费内射一片色欲 | 老子影院午夜伦不卡 | 精品欧美一区二区三区久久久 | 人妻与老人中文字幕 | 中文无码精品a∨在线观看不卡 | 中文字幕精品av一区二区五区 | 亚洲综合久久一区二区 | 成人性做爰aaa片免费看 | 国产真人无遮挡作爱免费视频 | 国产农村妇女高潮大叫 | 一本久久a久久精品亚洲 | 国产精品亚洲一区二区三区喷水 | 少妇太爽了在线观看 | 又大又硬又爽免费视频 | 欧美阿v高清资源不卡在线播放 | 熟妇人妻中文av无码 | 亚洲无人区一区二区三区 | 国产香蕉97碰碰久久人人 | 欧美第一黄网免费网站 | 国产精品无码一区二区桃花视频 | 99久久人妻精品免费一区 | 欧洲美熟女乱又伦 | 亚洲中文字幕av在天堂 | 国产一区二区三区影院 | 亚洲成av人片在线观看无码不卡 | 精品国偷自产在线视频 | 无码人妻少妇伦在线电影 | 国内老熟妇对白xxxxhd | 久久久久99精品国产片 | 我要看www免费看插插视频 | 熟女少妇人妻中文字幕 | 婷婷六月久久综合丁香 | 狠狠色噜噜狠狠狠7777奇米 | 又紧又大又爽精品一区二区 | 久久国语露脸国产精品电影 | 99re在线播放 | 亚洲乱码日产精品bd | 最新国产乱人伦偷精品免费网站 | 在线а√天堂中文官网 | 久在线观看福利视频 | 一本久道久久综合狠狠爱 | 国产一区二区三区四区五区加勒比 | 大屁股大乳丰满人妻 | 377p欧洲日本亚洲大胆 | 欧美亚洲国产一区二区三区 | 成在人线av无码免费 | 国产乱子伦视频在线播放 | 日本精品少妇一区二区三区 | av人摸人人人澡人人超碰下载 | 领导边摸边吃奶边做爽在线观看 | 女人被男人爽到呻吟的视频 | 麻豆成人精品国产免费 | 成人影院yy111111在线观看 | 人妻少妇精品视频专区 | aⅴ在线视频男人的天堂 | 国产午夜精品一区二区三区嫩草 | 色狠狠av一区二区三区 | 无遮挡国产高潮视频免费观看 | 乌克兰少妇xxxx做受 | 亚洲成av人综合在线观看 | 丝袜 中出 制服 人妻 美腿 | 99国产精品白浆在线观看免费 | 在线播放无码字幕亚洲 | 波多野结衣 黑人 | 国产在线无码精品电影网 | 男女爱爱好爽视频免费看 | 蜜桃视频插满18在线观看 | 亚洲性无码av中文字幕 | 无码人妻av免费一区二区三区 | 爽爽影院免费观看 | 国产激情无码一区二区app | 高清国产亚洲精品自在久久 | 99精品国产综合久久久久五月天 | 久久无码中文字幕免费影院蜜桃 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品欧美一区二区三区久久久 | 欧美老妇与禽交 | 青青草原综合久久大伊人精品 | 好男人社区资源 | 国产成人av免费观看 | 强开小婷嫩苞又嫩又紧视频 | 久久精品中文字幕大胸 | 国产精品久久精品三级 | 精品国偷自产在线 | 扒开双腿吃奶呻吟做受视频 | 鲁一鲁av2019在线 | 成年美女黄网站色大免费全看 | 国产区女主播在线观看 | 水蜜桃亚洲一二三四在线 | 亚洲精品久久久久avwww潮水 | 日日橹狠狠爱欧美视频 | 国产精品永久免费视频 | 国精品人妻无码一区二区三区蜜柚 | 丰满少妇熟乱xxxxx视频 | 丰腴饱满的极品熟妇 | 亚洲成av人在线观看网址 | 性开放的女人aaa片 | 亚洲の无码国产の无码步美 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产网红无码精品视频 | 午夜精品久久久久久久 | 宝宝好涨水快流出来免费视频 | 国产后入清纯学生妹 | 午夜无码人妻av大片色欲 | 又色又爽又黄的美女裸体网站 | 欧美人妻一区二区三区 | 日韩无套无码精品 | 成人免费视频一区二区 | 一本久道高清无码视频 | 成人欧美一区二区三区黑人免费 | 国产精品美女久久久久av爽李琼 | 亚洲中文字幕av在天堂 | 日本一卡2卡3卡四卡精品网站 | 国产97人人超碰caoprom | 少妇人妻偷人精品无码视频 | 性开放的女人aaa片 | 性欧美牲交xxxxx视频 | 男人的天堂av网站 | 久久精品国产精品国产精品污 | 色爱情人网站 | 粗大的内捧猛烈进出视频 | 国产精品久免费的黄网站 | 狂野欧美性猛xxxx乱大交 | 日韩成人一区二区三区在线观看 | 国产真实伦对白全集 | 99视频精品全部免费免费观看 | 麻豆国产人妻欲求不满谁演的 | 国产一区二区不卡老阿姨 | 97久久精品无码一区二区 | 亚洲の无码国产の无码步美 | 天堂а√在线中文在线 | 亚洲精品久久久久久一区二区 | 亚洲中文字幕在线无码一区二区 | 青青青手机频在线观看 | av在线亚洲欧洲日产一区二区 | 风流少妇按摩来高潮 | 亚洲精品成人福利网站 | 动漫av一区二区在线观看 | 福利一区二区三区视频在线观看 | 成年美女黄网站色大免费全看 | 麻豆国产人妻欲求不满谁演的 | 欧美人妻一区二区三区 | 国产女主播喷水视频在线观看 | 乱码av麻豆丝袜熟女系列 | 一本无码人妻在中文字幕免费 | 人妻无码久久精品人妻 | 奇米影视7777久久精品人人爽 | 少妇无码吹潮 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲国产欧美国产综合一区 | 伊人久久大香线蕉亚洲 | 妺妺窝人体色www婷婷 | 日韩人妻系列无码专区 | 一本久久a久久精品亚洲 | 给我免费的视频在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 久久精品女人的天堂av | 色窝窝无码一区二区三区色欲 | 日日干夜夜干 | 欧美野外疯狂做受xxxx高潮 | 麻豆国产人妻欲求不满谁演的 | 大色综合色综合网站 | 亚洲国产精品无码一区二区三区 | 国产超级va在线观看视频 | 中文精品久久久久人妻不卡 | 性色欲情网站iwww九文堂 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲 高清 成人 动漫 | 欧美真人作爱免费视频 | 久久伊人色av天堂九九小黄鸭 | 无码人妻av免费一区二区三区 | 精品无码一区二区三区的天堂 | 久久久久久亚洲精品a片成人 | 国产电影无码午夜在线播放 | 国产网红无码精品视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲人交乣女bbw | 国产精品久久久久久久9999 | 亚洲一区二区三区在线观看网站 | 国产色视频一区二区三区 | 伦伦影院午夜理论片 | 一二三四在线观看免费视频 | 免费网站看v片在线18禁无码 | av无码久久久久不卡免费网站 | 男人扒开女人内裤强吻桶进去 | 亚洲一区二区三区在线观看网站 | 日韩精品无码一本二本三本色 | 高潮喷水的毛片 | 天堂久久天堂av色综合 | 国产精品久久久久久无码 | 亚洲日韩av片在线观看 | 99久久精品无码一区二区毛片 | 99精品视频在线观看免费 | 中文字幕乱妇无码av在线 | 国产麻豆精品一区二区三区v视界 | 亚洲色大成网站www | 任你躁国产自任一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 成人一在线视频日韩国产 | 亚洲伊人久久精品影院 | 日产精品高潮呻吟av久久 | 日本肉体xxxx裸交 | 日日摸夜夜摸狠狠摸婷婷 | 3d动漫精品啪啪一区二区中 | 18禁止看的免费污网站 | 天天拍夜夜添久久精品大 | 四虎国产精品免费久久 | 天堂亚洲2017在线观看 | 最新国产麻豆aⅴ精品无码 | 久久综合色之久久综合 | 日日摸日日碰夜夜爽av | 黄网在线观看免费网站 | 性欧美疯狂xxxxbbbb | 亚洲小说春色综合另类 | 少妇性l交大片 | 大乳丰满人妻中文字幕日本 | 丝袜 中出 制服 人妻 美腿 | 2019nv天堂香蕉在线观看 | 亚洲国产精品久久久久久 | 国产精华av午夜在线观看 | 四虎4hu永久免费 | 国产亚洲视频中文字幕97精品 | 欧美成人家庭影院 | 亚洲人成影院在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | www国产亚洲精品久久网站 | 亚洲色成人中文字幕网站 | 黑人巨大精品欧美黑寡妇 | 久久人人爽人人人人片 | 亚洲精品成a人在线观看 | 强伦人妻一区二区三区视频18 | 亚洲熟女一区二区三区 | 两性色午夜视频免费播放 | 天天燥日日燥 | 日韩人妻系列无码专区 | 无码国产激情在线观看 | 日本xxxx色视频在线观看免费 | 国产精品久久久久久亚洲影视内衣 | 亚洲色欲久久久综合网东京热 | 欧美日韩亚洲国产精品 | 男女超爽视频免费播放 | 好爽又高潮了毛片免费下载 | 久久久婷婷五月亚洲97号色 | 在线看片无码永久免费视频 | 又粗又大又硬毛片免费看 | 成熟妇人a片免费看网站 | www国产亚洲精品久久网站 | 国产精品无码一区二区桃花视频 | 久久伊人色av天堂九九小黄鸭 | 中文无码精品a∨在线观看不卡 | 老司机亚洲精品影院 | 国产精品久久国产三级国 | 国产精品二区一区二区aⅴ污介绍 | 一本久道高清无码视频 | 麻豆国产人妻欲求不满谁演的 | 51国偷自产一区二区三区 | 少妇无码av无码专区在线观看 | 国产免费久久久久久无码 | 天海翼激烈高潮到腰振不止 | 波多野42部无码喷潮在线 | 大肉大捧一进一出视频出来呀 | 台湾无码一区二区 | 色狠狠av一区二区三区 | 亚洲精品久久久久久一区二区 | 中国大陆精品视频xxxx | 日本护士毛茸茸高潮 | 亚洲一区二区三区含羞草 | 无码乱肉视频免费大全合集 | 国产在线精品一区二区三区直播 | 亚洲国产欧美国产综合一区 | 国产精品沙发午睡系列 | 99在线 | 亚洲 | 亚洲第一网站男人都懂 | 色综合久久网 | 中文字幕av日韩精品一区二区 | 色综合久久88色综合天天 | 日韩av无码一区二区三区不卡 | 亚洲无人区一区二区三区 | 亚洲精品久久久久中文第一幕 | 1000部啪啪未满十八勿入下载 | 大肉大捧一进一出视频出来呀 | 性做久久久久久久久 | 99精品视频在线观看免费 | 在线а√天堂中文官网 | 丝袜足控一区二区三区 | 国产成人精品久久亚洲高清不卡 | 一本大道久久东京热无码av | 无码人妻出轨黑人中文字幕 | 日本熟妇浓毛 | 免费播放一区二区三区 | 久久成人a毛片免费观看网站 | 成人三级无码视频在线观看 | 国产午夜福利100集发布 | 中国女人内谢69xxxxxa片 | 无码精品人妻一区二区三区av | 荫蒂被男人添的好舒服爽免费视频 | 久久久精品欧美一区二区免费 | 中文亚洲成a人片在线观看 | 少妇邻居内射在线 | 亚洲一区二区三区在线观看网站 | 5858s亚洲色大成网站www | 亚洲精品成人福利网站 | 少妇性l交大片 | 欧美日韩色另类综合 | 国产乱码精品一品二品 | 天天爽夜夜爽夜夜爽 | 久热国产vs视频在线观看 | 无码国产色欲xxxxx视频 | 人妻少妇精品无码专区动漫 | 精品国产av色一区二区深夜久久 | 国产无遮挡又黄又爽又色 | 国产午夜精品一区二区三区嫩草 | 中文字幕av日韩精品一区二区 | 亚洲日本va午夜在线电影 | 亚欧洲精品在线视频免费观看 | 国产精品人妻一区二区三区四 | 亚洲色大成网站www | 国产午夜福利100集发布 | 性欧美牲交xxxxx视频 | 亲嘴扒胸摸屁股激烈网站 | 亚洲人成人无码网www国产 | 扒开双腿疯狂进出爽爽爽视频 | 中文字幕人妻无码一夲道 | 亚洲自偷精品视频自拍 | 国产成人无码av在线影院 | 亚洲欧美日韩成人高清在线一区 | 天天躁日日躁狠狠躁免费麻豆 | 天天综合网天天综合色 | 一本大道伊人av久久综合 | 色偷偷人人澡人人爽人人模 | 亚洲欧美色中文字幕在线 | 性欧美videos高清精品 | 国产精品人人爽人人做我的可爱 | 欧美大屁股xxxxhd黑色 | 中文字幕无码乱人伦 | 国内精品久久毛片一区二区 | 国产香蕉尹人视频在线 | 麻豆国产人妻欲求不满谁演的 | 国产又爽又黄又刺激的视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 午夜丰满少妇性开放视频 | 国产精品久久精品三级 | 亚洲色偷偷偷综合网 | 亚洲欧美精品伊人久久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | √天堂中文官网8在线 | 无套内谢的新婚少妇国语播放 | 国产乱人伦av在线无码 | 亚洲精品国产第一综合99久久 | 久久久av男人的天堂 | 一本久道久久综合婷婷五月 | 99riav国产精品视频 | 国精产品一区二区三区 | 国产成人无码av一区二区 | 欧美亚洲国产一区二区三区 | 日韩精品乱码av一区二区 | 亚洲区小说区激情区图片区 | 精品一区二区三区波多野结衣 | 六月丁香婷婷色狠狠久久 | www国产精品内射老师 | 人妻与老人中文字幕 | 国产精品对白交换视频 | 日韩人妻系列无码专区 | 国产成人综合在线女婷五月99播放 | 日产国产精品亚洲系列 | 中文字幕 人妻熟女 | 国产人妻精品午夜福利免费 | 日本一卡二卡不卡视频查询 | 国产免费观看黄av片 | 蜜桃视频插满18在线观看 | 99视频精品全部免费免费观看 | 精品无码国产自产拍在线观看蜜 | 亚洲精品综合五月久久小说 | 亚洲午夜福利在线观看 | 免费无码午夜福利片69 | 欧美黑人巨大xxxxx | 蜜桃视频韩日免费播放 | 亚洲精品综合一区二区三区在线 | 丝袜 中出 制服 人妻 美腿 | 亚洲小说图区综合在线 | 成年美女黄网站色大免费全看 | 日本一卡2卡3卡四卡精品网站 | 免费男性肉肉影院 | 国产另类ts人妖一区二区 | 国精产品一品二品国精品69xx | 无码国产乱人伦偷精品视频 | 国内综合精品午夜久久资源 | 九九综合va免费看 | 欧美乱妇无乱码大黄a片 | 亚洲欧美色中文字幕在线 | 精品乱码久久久久久久 | 人人妻人人澡人人爽欧美一区 | 国产情侣作爱视频免费观看 | 亚洲 a v无 码免 费 成 人 a v | 欧美高清在线精品一区 | 亚洲午夜无码久久 | 免费人成网站视频在线观看 | 日韩 欧美 动漫 国产 制服 | 无码午夜成人1000部免费视频 | 国产激情综合五月久久 | 亚洲欧美日韩成人高清在线一区 | 中文字幕日韩精品一区二区三区 | 日本乱偷人妻中文字幕 | 欧美国产亚洲日韩在线二区 | 亚洲欧洲无卡二区视頻 | 国产乡下妇女做爰 | 婷婷六月久久综合丁香 | 鲁鲁鲁爽爽爽在线视频观看 | 欧美丰满熟妇xxxx性ppx人交 | 色爱情人网站 | 精品国产一区二区三区av 性色 | 欧美亚洲国产一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 无码人妻出轨黑人中文字幕 | 亚洲成av人片在线观看无码不卡 | 丰满人妻一区二区三区免费视频 | 日韩精品无码免费一区二区三区 | 国产人妻精品一区二区三区 | 精品国产乱码久久久久乱码 | 啦啦啦www在线观看免费视频 | 在线播放无码字幕亚洲 | 熟妇人妻无乱码中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 国产极品美女高潮无套在线观看 | 国产人妻人伦精品 | 久久精品人人做人人综合 | 四虎永久在线精品免费网址 | 中文字幕乱码中文乱码51精品 | 亚洲乱码国产乱码精品精 | 青青青手机频在线观看 | 极品尤物被啪到呻吟喷水 | 日韩欧美中文字幕在线三区 | 99久久婷婷国产综合精品青草免费 | 成人三级无码视频在线观看 | 亚洲区小说区激情区图片区 | 欧美精品国产综合久久 | 日日碰狠狠躁久久躁蜜桃 | 色爱情人网站 | 久久精品国产精品国产精品污 | 无码av最新清无码专区吞精 | 国产麻豆精品一区二区三区v视界 | 99久久久国产精品无码免费 | 中文字幕无码乱人伦 | 久久人人爽人人人人片 | 国产精品高潮呻吟av久久4虎 | 亚洲伊人久久精品影院 | 欧美人与物videos另类 | 日日橹狠狠爱欧美视频 | 日本www一道久久久免费榴莲 | a片在线免费观看 | 中文字幕人妻无码一夲道 | 亚洲伊人久久精品影院 | 无遮挡啪啪摇乳动态图 | 久久人人97超碰a片精品 | 国产无套粉嫩白浆在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 成人一区二区免费视频 | 欧美丰满熟妇xxxx性ppx人交 | 中文字幕人妻无码一夲道 | 无码人妻精品一区二区三区不卡 | 久久久久久亚洲精品a片成人 | 中文字幕亚洲情99在线 | 国产xxx69麻豆国语对白 | 久久伊人色av天堂九九小黄鸭 | 正在播放老肥熟妇露脸 | 国产激情艳情在线看视频 | 国产一区二区三区四区五区加勒比 | 色婷婷av一区二区三区之红樱桃 | 午夜精品一区二区三区在线观看 | 99精品无人区乱码1区2区3区 | 亚洲色www成人永久网址 | 欧美性生交xxxxx久久久 | 九月婷婷人人澡人人添人人爽 | 国产手机在线αⅴ片无码观看 | 无码成人精品区在线观看 | 精品欧美一区二区三区久久久 | 欧美激情一区二区三区成人 | 人人澡人人透人人爽 | 99久久久无码国产aaa精品 | 人妻少妇精品无码专区二区 | 麻豆av传媒蜜桃天美传媒 | 日本大香伊一区二区三区 | 国产精品无码mv在线观看 | 欧美刺激性大交 | 国产成人精品三级麻豆 | 奇米影视7777久久精品 | 亚洲国产欧美在线成人 | 亚洲区小说区激情区图片区 | 国产精品va在线观看无码 | 日本在线高清不卡免费播放 | 欧美肥老太牲交大战 | 在线观看国产午夜福利片 | 野狼第一精品社区 | 97无码免费人妻超级碰碰夜夜 | 极品嫩模高潮叫床 | 国产精品多人p群无码 | 女人被爽到呻吟gif动态图视看 | 免费国产黄网站在线观看 | 久久99热只有频精品8 | 久久精品中文字幕一区 | 丰满人妻精品国产99aⅴ | 领导边摸边吃奶边做爽在线观看 | 午夜无码人妻av大片色欲 | 无码av免费一区二区三区试看 | 精品国产一区二区三区av 性色 | 国产亚洲精品精品国产亚洲综合 | 少妇高潮喷潮久久久影院 | 亚洲综合无码久久精品综合 | 女人高潮内射99精品 | 少妇一晚三次一区二区三区 | 久久久久亚洲精品男人的天堂 | 国产成人精品必看 | 亚洲大尺度无码无码专区 | 成人精品天堂一区二区三区 | 欧洲欧美人成视频在线 | 亚洲呦女专区 | aa片在线观看视频在线播放 | 久久99精品久久久久久 | 久久精品国产日本波多野结衣 | 亚洲成av人片天堂网无码】 | 成人片黄网站色大片免费观看 | av无码久久久久不卡免费网站 | 日本丰满熟妇videos | 国产免费观看黄av片 | 亚洲中文字幕无码一久久区 | 国产做国产爱免费视频 | 久久久久成人精品免费播放动漫 | 妺妺窝人体色www婷婷 | 99久久久国产精品无码免费 | 国精产品一品二品国精品69xx | 男人扒开女人内裤强吻桶进去 | 狂野欧美性猛xxxx乱大交 | 国产疯狂伦交大片 | 成熟女人特级毛片www免费 | 99国产精品白浆在线观看免费 | 欧美日本日韩 | 亚洲国产高清在线观看视频 | 亚洲va欧美va天堂v国产综合 | 国产真实乱对白精彩久久 | 亚洲一区二区三区香蕉 | 狂野欧美性猛交免费视频 | 久久久久亚洲精品男人的天堂 | 国产精品二区一区二区aⅴ污介绍 | 亚洲综合另类小说色区 | 亚洲综合伊人久久大杳蕉 | 麻豆果冻传媒2021精品传媒一区下载 | 久久这里只有精品视频9 | 免费观看的无遮挡av | 强辱丰满人妻hd中文字幕 | 伊人久久大香线蕉午夜 | 一本久道久久综合婷婷五月 | 欧美xxxx黑人又粗又长 | 熟妇人妻激情偷爽文 | 性色欲情网站iwww九文堂 | 捆绑白丝粉色jk震动捧喷白浆 | 暴力强奷在线播放无码 | 无码人妻丰满熟妇区毛片18 | 午夜精品久久久内射近拍高清 | 久久亚洲精品成人无码 | 成人免费视频一区二区 | 丁香花在线影院观看在线播放 | 黄网在线观看免费网站 | 久久精品人妻少妇一区二区三区 | 好男人社区资源 | 国产福利视频一区二区 | 久久久久久久久蜜桃 | 人人妻人人澡人人爽人人精品浪潮 | 97夜夜澡人人双人人人喊 | 国产绳艺sm调教室论坛 | 日产国产精品亚洲系列 | 伊人久久大香线蕉av一区二区 | 国产尤物精品视频 | 国产成人精品优优av | 亚洲第一网站男人都懂 | 中文久久乱码一区二区 | 2020最新国产自产精品 | 少妇无套内谢久久久久 | 久久久久久久人妻无码中文字幕爆 | 国产福利视频一区二区 | 少妇一晚三次一区二区三区 | 草草网站影院白丝内射 | 日韩av无码一区二区三区 | 国产人成高清在线视频99最全资源 | 人妻少妇精品视频专区 | 国产亚洲精品久久久闺蜜 | 亚洲最大成人网站 | 国产农村妇女高潮大叫 | 日本精品人妻无码免费大全 | 乱人伦人妻中文字幕无码久久网 | 天天av天天av天天透 | 国产精品人人妻人人爽 | 国产精品高潮呻吟av久久 | 精品国产青草久久久久福利 | 国产成人综合在线女婷五月99播放 | 亚洲熟妇色xxxxx亚洲 | 丰满肥臀大屁股熟妇激情视频 | 日韩视频 中文字幕 视频一区 | 国产成人无码午夜视频在线观看 | 亚洲精品鲁一鲁一区二区三区 | 日韩欧美中文字幕在线三区 | 欧美第一黄网免费网站 | 久久综合香蕉国产蜜臀av | 日本一区二区更新不卡 | 精品一二三区久久aaa片 | 天堂亚洲免费视频 | 中文字幕无码免费久久99 | 国产乱人伦偷精品视频 | 色一情一乱一伦 | 国产黄在线观看免费观看不卡 | 麻豆国产人妻欲求不满谁演的 | 国内精品人妻无码久久久影院 | 国产精品va在线观看无码 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲精品久久久久中文第一幕 | 国产精品人妻一区二区三区四 | 国产舌乚八伦偷品w中 | 国产精品99久久精品爆乳 | 日本va欧美va欧美va精品 | 性欧美videos高清精品 | 牛和人交xxxx欧美 | 久久婷婷五月综合色国产香蕉 | 国产精品久久久一区二区三区 | 国产精华av午夜在线观看 | 精品偷自拍另类在线观看 | 麻豆精品国产精华精华液好用吗 | 曰韩少妇内射免费播放 | 久久午夜无码鲁丝片秋霞 | 国产精品爱久久久久久久 | 国产精品a成v人在线播放 | 国产偷自视频区视频 | 日日碰狠狠丁香久燥 | 亚洲欧美精品伊人久久 | 强伦人妻一区二区三区视频18 | 少妇性荡欲午夜性开放视频剧场 | 又色又爽又黄的美女裸体网站 | 又色又爽又黄的美女裸体网站 | 粉嫩少妇内射浓精videos | 中文字幕人成乱码熟女app | 97夜夜澡人人爽人人喊中国片 | 99国产欧美久久久精品 | 中文亚洲成a人片在线观看 | 高潮喷水的毛片 | 成人精品视频一区二区三区尤物 | 成人免费视频在线观看 | 亚洲天堂2017无码中文 | 97夜夜澡人人爽人人喊中国片 | 亚洲无人区午夜福利码高清完整版 | 无码人妻丰满熟妇区毛片18 | 我要看www免费看插插视频 | 国产口爆吞精在线视频 | 久久久久av无码免费网 | 久久无码人妻影院 | 亚洲自偷自拍另类第1页 | 色窝窝无码一区二区三区色欲 | 精品水蜜桃久久久久久久 | 兔费看少妇性l交大片免费 | 图片区 小说区 区 亚洲五月 | 久久99精品久久久久久动态图 | 国产亚av手机在线观看 | 思思久久99热只有频精品66 | 色一情一乱一伦 | 亚洲国产欧美在线成人 | 乱人伦人妻中文字幕无码久久网 | 亚洲va欧美va天堂v国产综合 | 日本丰满护士爆乳xxxx | 中文字幕人成乱码熟女app | 牲欲强的熟妇农村老妇女 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产精品无码mv在线观看 | 亚洲国产av美女网站 | 欧洲精品码一区二区三区免费看 | 正在播放东北夫妻内射 | ass日本丰满熟妇pics | 亚洲国产精品美女久久久久 | 欧美日韩亚洲国产精品 | 日韩在线不卡免费视频一区 | 欧洲精品码一区二区三区免费看 | 久久精品人人做人人综合试看 | 一本大道久久东京热无码av | 亚洲综合精品香蕉久久网 | 国产女主播喷水视频在线观看 | 天天燥日日燥 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久久久九九精品久 | 亚洲精品午夜国产va久久成人 | 一二三四在线观看免费视频 | 亚洲国产精品一区二区第一页 | 桃花色综合影院 | 奇米影视888欧美在线观看 | 性色欲网站人妻丰满中文久久不卡 | 中文字幕无码乱人伦 | 人人爽人人爽人人片av亚洲 | 一本一道久久综合久久 | 久久久精品成人免费观看 | 性开放的女人aaa片 | 国产农村乱对白刺激视频 | 色五月五月丁香亚洲综合网 | 奇米影视7777久久精品 | 人人妻人人澡人人爽精品欧美 | 中文字幕无码av波多野吉衣 | 久久综合给久久狠狠97色 | 国产午夜无码视频在线观看 | 精品乱子伦一区二区三区 | 黑人玩弄人妻中文在线 | 国产99久久精品一区二区 | 福利一区二区三区视频在线观看 | 色噜噜亚洲男人的天堂 | 精品国产麻豆免费人成网站 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久精品人妻少妇一区二区三区 | 中文字幕无码视频专区 | 青青草原综合久久大伊人精品 | 无码成人精品区在线观看 | 国产精品久久国产精品99 | 国产在热线精品视频 | 97se亚洲精品一区 | 在线播放亚洲第一字幕 | 秋霞特色aa大片 | 亚洲熟妇色xxxxx欧美老妇 | 无码精品人妻一区二区三区av | 日本熟妇人妻xxxxx人hd | 无套内射视频囯产 | 国产精品无码永久免费888 | 在线播放无码字幕亚洲 | 麻豆国产人妻欲求不满谁演的 | 欧美日韩人成综合在线播放 | 伦伦影院午夜理论片 | 日本丰满熟妇videos | 强伦人妻一区二区三区视频18 | 国产午夜手机精彩视频 | 黑森林福利视频导航 | 国产深夜福利视频在线 | 国产成人无码区免费内射一片色欲 | 3d动漫精品啪啪一区二区中 | 国内揄拍国内精品人妻 | 精品久久久无码中文字幕 | 中文字幕无码日韩欧毛 | 国产一区二区三区精品视频 | 久久国产精品偷任你爽任你 | 午夜男女很黄的视频 | 色综合视频一区二区三区 | 一二三四社区在线中文视频 | 中文字幕中文有码在线 | 亚洲精品综合一区二区三区在线 | 亚洲乱码日产精品bd | 欧美三级a做爰在线观看 | 麻豆md0077饥渴少妇 | 国产莉萝无码av在线播放 | 波多野42部无码喷潮在线 | 人妻有码中文字幕在线 | 在线亚洲高清揄拍自拍一品区 | 男人的天堂av网站 | 无码吃奶揉捏奶头高潮视频 | 亚洲国产av精品一区二区蜜芽 | 18禁黄网站男男禁片免费观看 | 国产9 9在线 | 中文 | 人妻天天爽夜夜爽一区二区 | 亚洲欧美日韩国产精品一区二区 | 人人妻人人澡人人爽人人精品浪潮 | 人妻与老人中文字幕 | 99久久精品日本一区二区免费 | 久久综合香蕉国产蜜臀av | 99在线 | 亚洲 | 九九综合va免费看 | 日本精品少妇一区二区三区 | 亚洲熟妇自偷自拍另类 | 青青久在线视频免费观看 | 波多野结衣一区二区三区av免费 | 日韩亚洲欧美精品综合 | 国产成人无码av一区二区 | 国产午夜福利100集发布 | 精品国产乱码久久久久乱码 | 国产精品a成v人在线播放 | 狠狠色噜噜狠狠狠7777奇米 | 一本无码人妻在中文字幕免费 | 欧洲美熟女乱又伦 | 亚洲欧洲无卡二区视頻 | 免费乱码人妻系列无码专区 | 国产精品手机免费 | 欧美老妇与禽交 | 成人免费视频在线观看 | 久久99精品久久久久婷婷 | 一二三四在线观看免费视频 | 日韩无套无码精品 | 人人妻人人澡人人爽人人精品 | 娇妻被黑人粗大高潮白浆 | 学生妹亚洲一区二区 | 成人毛片一区二区 | 狠狠色欧美亚洲狠狠色www | 免费观看的无遮挡av | 久久精品国产一区二区三区肥胖 | 久久久精品456亚洲影院 | 丝袜 中出 制服 人妻 美腿 | 国产一区二区不卡老阿姨 | 国产精品久久久久9999小说 | 国产猛烈高潮尖叫视频免费 | 秋霞特色aa大片 | 东京无码熟妇人妻av在线网址 | 免费无码的av片在线观看 | 日本丰满护士爆乳xxxx | 日本高清一区免费中文视频 | 激情五月综合色婷婷一区二区 | 少妇高潮一区二区三区99 | 2020久久香蕉国产线看观看 | 日产精品高潮呻吟av久久 | 色婷婷久久一区二区三区麻豆 | 一本精品99久久精品77 | 国产色xx群视频射精 | 免费网站看v片在线18禁无码 | 日日干夜夜干 | 露脸叫床粗话东北少妇 | 88国产精品欧美一区二区三区 | 成人亚洲精品久久久久软件 | 久久久精品成人免费观看 | 亚洲人成影院在线观看 | 国产精品-区区久久久狼 | 特大黑人娇小亚洲女 | 久久人妻内射无码一区三区 | 国产偷自视频区视频 | 色窝窝无码一区二区三区色欲 | 久久精品国产99精品亚洲 | 伊人色综合久久天天小片 | 国精产品一区二区三区 | 欧美猛少妇色xxxxx | 国产真人无遮挡作爱免费视频 | 四虎4hu永久免费 | 老太婆性杂交欧美肥老太 | 精品一区二区三区波多野结衣 | 国产精品99爱免费视频 | 国产精品办公室沙发 | 国产成人无码专区 | 熟妇人妻激情偷爽文 | 乌克兰少妇xxxx做受 | 野狼第一精品社区 | 国精产品一品二品国精品69xx | 国产无遮挡又黄又爽又色 | 国产性生交xxxxx无码 | 无码国内精品人妻少妇 | 久久久www成人免费毛片 | 成年美女黄网站色大免费全看 | 国产人妖乱国产精品人妖 | 国产麻豆精品精东影业av网站 | 国产熟妇另类久久久久 | 曰韩无码二三区中文字幕 | 久久精品国产精品国产精品污 | 日韩欧美群交p片內射中文 | 性开放的女人aaa片 | 午夜嘿嘿嘿影院 | 狠狠噜狠狠狠狠丁香五月 | 99精品无人区乱码1区2区3区 | 国产综合色产在线精品 | 啦啦啦www在线观看免费视频 | 成人性做爰aaa片免费看不忠 | 一二三四社区在线中文视频 | 亚洲天堂2017无码 | 无码午夜成人1000部免费视频 | 久久国产精品精品国产色婷婷 | 午夜福利一区二区三区在线观看 | 久久熟妇人妻午夜寂寞影院 | 中文字幕 亚洲精品 第1页 | 午夜理论片yy44880影院 | 国产激情一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 成 人 网 站国产免费观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美zoozzooz性欧美 | 国产激情精品一区二区三区 | 无码播放一区二区三区 | 欧美阿v高清资源不卡在线播放 | 国产xxx69麻豆国语对白 | 午夜成人1000部免费视频 | 亚洲成色www久久网站 | 成人免费无码大片a毛片 | 四虎永久在线精品免费网址 | a在线亚洲男人的天堂 | 色狠狠av一区二区三区 | 久久无码专区国产精品s | 377p欧洲日本亚洲大胆 | 影音先锋中文字幕无码 | 国产在线精品一区二区三区直播 | 99久久无码一区人妻 | 特大黑人娇小亚洲女 | 精品成人av一区二区三区 | 男女性色大片免费网站 | 国精产品一区二区三区 | 亚洲国产精品无码一区二区三区 | 少妇久久久久久人妻无码 | 久久亚洲中文字幕无码 | 小sao货水好多真紧h无码视频 | 亚洲va中文字幕无码久久不卡 | 国产精品免费大片 | 四虎影视成人永久免费观看视频 | 丰满人妻精品国产99aⅴ | 欧美一区二区三区 | 国产午夜无码视频在线观看 | 欧美性生交xxxxx久久久 | 伊人久久大香线焦av综合影院 | 亚洲熟妇色xxxxx欧美老妇y | 国产成人av免费观看 | 久久国产精品_国产精品 | 大乳丰满人妻中文字幕日本 | 人妻aⅴ无码一区二区三区 | 精品久久久中文字幕人妻 | 久激情内射婷内射蜜桃人妖 | 亚洲精品国偷拍自产在线观看蜜桃 | 熟女少妇在线视频播放 | 久久精品99久久香蕉国产色戒 | 国产精品嫩草久久久久 | 无套内谢的新婚少妇国语播放 | 国产麻豆精品精东影业av网站 | 亚洲日韩一区二区 | 国产精品va在线播放 | 亚洲精品成人av在线 | 久久精品国产99久久6动漫 | 人妻人人添人妻人人爱 | 亚洲人成网站免费播放 | 亚洲国产精品一区二区美利坚 | 欧美 日韩 人妻 高清 中文 | 国产三级久久久精品麻豆三级 | 亚洲色在线无码国产精品不卡 | 色综合久久88色综合天天 | 鲁大师影院在线观看 | 99国产欧美久久久精品 | 奇米影视7777久久精品 | 日本精品久久久久中文字幕 | 又粗又大又硬毛片免费看 | 日本又色又爽又黄的a片18禁 | 亚洲熟妇色xxxxx亚洲 | 兔费看少妇性l交大片免费 | 色婷婷综合中文久久一本 | 思思久久99热只有频精品66 | 日本精品少妇一区二区三区 | 色 综合 欧美 亚洲 国产 | 国产做国产爱免费视频 | 色欲综合久久中文字幕网 | 亚洲精品国产品国语在线观看 | 免费网站看v片在线18禁无码 | 午夜精品久久久久久久 | 天堂久久天堂av色综合 | 久青草影院在线观看国产 | 欧美老妇交乱视频在线观看 | 日本精品少妇一区二区三区 | a片在线免费观看 | 国产香蕉尹人视频在线 | 国产亲子乱弄免费视频 | 国模大胆一区二区三区 | 小泽玛莉亚一区二区视频在线 | 亚洲熟妇色xxxxx欧美老妇 | 九九综合va免费看 | 成人无码视频免费播放 | 老子影院午夜精品无码 | 久久97精品久久久久久久不卡 | 性欧美videos高清精品 | 亚洲国产精品美女久久久久 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲中文无码av永久不收费 | 黑人大群体交免费视频 | 97se亚洲精品一区 | 精品厕所偷拍各类美女tp嘘嘘 | 国产午夜手机精彩视频 | 国产精品国产三级国产专播 | 国产精品久久久久久久影院 | 亚洲а∨天堂久久精品2021 | 亚洲精品一区三区三区在线观看 | 国産精品久久久久久久 | 蜜桃视频韩日免费播放 | 在线播放无码字幕亚洲 | 国产激情一区二区三区 | 狠狠躁日日躁夜夜躁2020 | 国产av一区二区精品久久凹凸 | 国产精品亚洲а∨无码播放麻豆 | 亚洲日韩av一区二区三区四区 | 久久精品中文字幕大胸 | 人人爽人人爽人人片av亚洲 | 成人三级无码视频在线观看 | 动漫av一区二区在线观看 | a片免费视频在线观看 | 国产超级va在线观看视频 | 日韩在线不卡免费视频一区 | 国产成人无码av一区二区 | 国产av一区二区三区最新精品 | 亚洲成色在线综合网站 | 1000部啪啪未满十八勿入下载 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲熟女一区二区三区 | 啦啦啦www在线观看免费视频 | 扒开双腿疯狂进出爽爽爽视频 | 俺去俺来也在线www色官网 | 波多野结衣 黑人 | 国精产品一区二区三区 | 国产亚洲精品久久久久久国模美 | 天天做天天爱天天爽综合网 | 黑森林福利视频导航 | 极品尤物被啪到呻吟喷水 | 黑人大群体交免费视频 | 亚洲精品国产精品乱码视色 | 久久zyz资源站无码中文动漫 | 老熟女重囗味hdxx69 | 色 综合 欧美 亚洲 国产 | 国产精品二区一区二区aⅴ污介绍 | 亚洲精品一区二区三区在线 | 国产精华av午夜在线观看 | 国产人妖乱国产精品人妖 | 欧美国产亚洲日韩在线二区 | 国产极品美女高潮无套在线观看 | 国产两女互慰高潮视频在线观看 | 久在线观看福利视频 | 婷婷色婷婷开心五月四房播播 | 无遮无挡爽爽免费视频 | 无码av最新清无码专区吞精 | 国产三级久久久精品麻豆三级 | 亚洲精品鲁一鲁一区二区三区 | 亚洲狠狠色丁香婷婷综合 | 国产亚洲人成a在线v网站 | 性啪啪chinese东北女人 | √天堂资源地址中文在线 | 亚洲一区二区三区偷拍女厕 | 亚洲第一网站男人都懂 | 熟妇人妻激情偷爽文 | 波多野42部无码喷潮在线 | 久久无码人妻影院 | 一二三四在线观看免费视频 | 国产极品美女高潮无套在线观看 | 日韩精品一区二区av在线 | 欧美三级不卡在线观看 | 国产亚洲精品久久久久久久 | 欧美丰满熟妇xxxx性ppx人交 | 欧美人与牲动交xxxx | 午夜福利不卡在线视频 | 成人无码视频免费播放 | 国精品人妻无码一区二区三区蜜柚 | 欧美人妻一区二区三区 | 初尝人妻少妇中文字幕 | 国产偷国产偷精品高清尤物 | 男女猛烈xx00免费视频试看 | 久久人人爽人人爽人人片av高清 | 999久久久国产精品消防器材 | 精品欧美一区二区三区久久久 | 人妻体内射精一区二区三四 | 国产av一区二区三区最新精品 | 日本一卡二卡不卡视频查询 | 男女超爽视频免费播放 | 88国产精品欧美一区二区三区 | 国产真实乱对白精彩久久 | 少妇无套内谢久久久久 | 麻花豆传媒剧国产免费mv在线 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲人成影院在线无码按摩店 | 精品久久久无码中文字幕 | 亚洲综合无码一区二区三区 | 无码人妻少妇伦在线电影 | 少妇人妻av毛片在线看 | 久久婷婷五月综合色国产香蕉 | 精品一区二区三区无码免费视频 | 久久精品人人做人人综合 | 夜精品a片一区二区三区无码白浆 | 日本一区二区三区免费高清 | 国产精品igao视频网 | 中文精品久久久久人妻不卡 | 精品国产精品久久一区免费式 | 东京热无码av男人的天堂 | 亚洲伊人久久精品影院 | 欧洲欧美人成视频在线 | 亚洲色成人中文字幕网站 | 国产一区二区三区日韩精品 | 日韩人妻系列无码专区 | 日本又色又爽又黄的a片18禁 | 欧美第一黄网免费网站 | 水蜜桃亚洲一二三四在线 | 成年美女黄网站色大免费全看 | 国产精品亚洲一区二区三区喷水 | a在线亚洲男人的天堂 | 蜜臀av无码人妻精品 | 国产精品无码成人午夜电影 | 成在人线av无码免费 | 精品aⅴ一区二区三区 | 亚洲中文字幕乱码av波多ji |