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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像

發(fā)布時間:2024/7/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1)摘自【正點原子】領(lǐng)航者 ZYNQ 之linux驅(qū)動開發(fā)指南

2)實驗平臺:正點原子領(lǐng)航者ZYNQ開發(fā)板
3)平臺購買地址:https://item.taobao.com/item.htm?&id=606160108761
4)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html
5)對正點原子FPGA感興趣的同學可以加群討論:876744900
6)關(guān)注正點原子公眾號,獲取最新資料

第二十章另一種方式編譯ZYNQ鏡像


本篇是ARM Linux驅(qū)動開發(fā)篇中的第一章,本章跟驅(qū)動開發(fā)并沒有什么關(guān)系,由于前面我們一直都是使用xilinx的petalinux工具編譯鏡像文件,例如包括u-boot、linux內(nèi)核、設(shè)備樹、ZYNQ PL端的bitstream文件以及fsbl等,雖然petalinux功能上比較全面,但是在編譯速度上太慢了!完全是在浪費時間,相信大家在使用petalinux的時候已經(jīng)感受到了它給你帶來的無奈之處;為此筆者專門去研究了一下,那本章筆者就帶大家通過另外一種比較快的方式編譯各種鏡像文件。
本章采用分步式的方式編譯啟動開發(fā)板所需要的各種鏡像文件,雖然步驟比較繁瑣,但靈活性比較高;雖然本章使用的是另一種方式編譯鏡像,但還是得需要用到petalinux提供的一些工具,所以大家一定要安裝petalinux。
20.1由hdf文件得到bit文件
.bit文件是zynq pl端所需要用到的bitstream文件,例如我們使用petalinux-build命令完成工程編譯之后會在images/linux目錄會產(chǎn)生一個system.bit文件,這個就是我們這里說到bitstream文件,.bit可以通過.hdf硬件描述符文件得到,怎么得到呢?下面給大家說來。
將ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70103_Embedded_Linuxvivado_proNavigator_7010Navigator_7010.sdk文件夾拷貝到Ubuntu系統(tǒng)目錄下,例如/home/zynq/hdf/目錄,大家根據(jù)自己的情況選擇目錄,本實驗以領(lǐng)航者7010為例,如果大家用的是領(lǐng)航者7020,則選擇ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70203_Embedded_Linuxvivado_proNavigator_7020Navigator_7020.sdk文件夾。
在Navigator_7010.sdk目錄下有一個.hdf文件,如下所示:

圖 31.1.1 hdf文件


接下來使用source命令執(zhí)行petalinux的環(huán)境配置腳本settings.sh,如下所示:

  • source /home/zynq/petalinux/v2018.3/settings.sh
  • 圖 31.1.2 運行settings.sh腳本文件


    /home/zynq/petalinux/v2018.3是筆者的petalinux安裝目錄,完成環(huán)境配置之后執(zhí)行hsi命令進入到hsi命令模式,如下所示:

  • hsi
  • 圖 31.1.3 hsi命令行


    執(zhí)行命令之后就可以進入到hsi命令行模式下了,hsi命令行模式就跟我們的linux命令行模式差不多,都可以執(zhí)行命令,只不過執(zhí)行的命令不同;hsi命令是petalinux工具提供的,所以一定安裝petalinux才行;在這個模式下可以執(zhí)行一些命令,例如執(zhí)行下面這條命令可以打開硬件設(shè)計文件hdf得到bit文件:

  • open_hw_design /home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.hdf
  • 圖 31.1.4 打開hdf文件


    Open_hw_design命令緊跟著的是hdf文件路徑,命令執(zhí)行成功之后會在hdf文件所在目錄下產(chǎn)生bit文件以及ps7_init命名的.c文件和.h文件,如下所示(在hsi命令行模式下執(zhí)行exit命令退出該模式):
    exit

    圖 31.1.5 退出hsi命令行模式

    圖 31.1.6 產(chǎn)生bit文件及其它文件


    從上圖中可以看到在hdf文件所在目錄下產(chǎn)生了design_navigator_7010_wrapper.bit文件以及.c和.h文件。
    20.2自動生成設(shè)備樹文件
    Petalinux可以根據(jù)hdf文件描述的硬件信息自動配置U-Boot和內(nèi)核所需的設(shè)備樹文件,那么我們也可以通過hsi命令來生成;首先需要導入xilinx的device-tree倉庫,在我們提供的資料包中已經(jīng)給大家準備好了,路徑為:ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70103_Embedded_Linuxmiscdevice-tree-xlnx-xilinx-v2018.3.tar.gz,大家也可以通過https://github.com/Xilinx/device-tree-xlnx/releases網(wǎng)址進行下載,選擇2018.3版本.tar.gz壓縮格式文件,如下所示:

    圖 31.2.1 設(shè)備樹倉庫下載


    Xilinx device-tree描述了設(shè)備與設(shè)備樹之間的匹配關(guān)系,將下載好或是資料包中的device-tree-xlnx-xilinx-v2018.3.tar.gz壓縮文件拷貝到Ubuntu系統(tǒng)目錄下,例如/home/zynq/device-tree,大家根據(jù)自己的情況選擇,然后將其解壓當前目錄,解壓之后會產(chǎn)生一個device-tree-xlnx-xilinx-v2018.3文件夾,如下所示:

    圖 31.2.2 device-tree目錄


    那么device-tree-xlnx-xilinx-v2018.3目錄就是我們所需要的device-tree倉庫。接下來我們執(zhí)行hsi命令進入到hsi命令行模式,執(zhí)行下面這些命令:

  • open_hw_design /home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.hdf
  • set_repo_path /home/zynq/device-tree/device-tree-xlnx-xilinx-v2018.3
  • create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
  • generate_target -dir /home/zynq/linux/dts
  • 圖 31.2.3 生成設(shè)備樹文件


    首先也是通過open_hw_design命令打開hdf文件,然后使用set_repo_path命令設(shè)置device-tree倉庫所在路徑,例如/home/zynq/device-tree/device-tree-xlnx-xilinx-v2018.3;使用create_sw_design創(chuàng)建軟件設(shè)計,” -os device_tree”指定了軟件設(shè)計的類型,我們這里使用device-tree表示它是一個設(shè)備樹類型,” -proc ps7_cortexa9_0”指定處理器的名稱,在hsi命令模式下使用”xxxx -help”可以查看xxxx命令的用法說明,這里就不給大家列舉了;最后使用generate_target命令去產(chǎn)生目標,也就是我們的設(shè)備樹文件,” -dir /home/zynq/linux/dts”指定路徑。
    此時我們可以退出hsi命令行模式,進入到/home/zynq/linux/dts目錄下,可以看到自動配置產(chǎn)生的.dts和.dtsi文件,如下所示:

    圖 31.2.4 生成設(shè)備樹文件


    Linux設(shè)備樹是是一個很重要的知識點,將會在后面給大家詳細說明,本章先不講,這些文件后面我們會用到。
    20.3創(chuàng)建、編譯fsbl工程
    fsbl(First Stage Boot Loader)是ZYNQ第一啟動引導加載代碼,它的主要任務(wù)就是初始化DDR,并將用戶代碼(例如U-Boot、bit文件或者是SDK裸機代碼)從存儲設(shè)備中拷貝到DDR中運行。在使用petalinux-build命令編譯完成之后,在images/linux目錄下有一個zynq_fsbl.elf文件,這個就是fsbl編譯之后產(chǎn)生了elf格式文件,同樣也可以使用hsi命令來創(chuàng)建fsbl工程并進行編譯。
    首先我們需要導入Xilinx embeddedsw存儲庫,該embeddedsw倉庫用于裸機應(yīng)用,例如fsbl、pmu固件、plm等,在我們提供的資料包中已經(jīng)給大家準備好了,路徑:ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70103_Embedded_Linuxmiscembeddedsw-xilinx-v2018.3.tar.gz,大家也可以從https://github.com/Xilinx/embeddedsw/releases網(wǎng)址進行下載,選擇2018.3版本.tar.gz壓縮格式,如下所示:

    圖 31.3.1 下載embeddedsw倉庫


    將下載好或是資料包中的embeddedsw-xilinx-v2018.3.tar.gz壓縮文件拷貝到Ubuntu系統(tǒng)目錄下,例如/home/zynq/embeddedsw,大家根據(jù)自己的情況選擇;然后將其解壓當前目錄,解壓之后會產(chǎn)生一個embeddedsw-xilinx-v2018.3文件夾,如下所示:

    圖 31.3.2 embeddedsw目錄


    在Ubuntu中執(zhí)行下面這條命令,建立一個軟鏈接文件gmake,鏈接到make:

  • sudo ln -s /usr/bin/make /usr/bin/gmake
  • 圖 31.3.3 建立gmake軟鏈接文件


    因為在編譯的過程中會用到gmake,其實gmake就是GNU make的縮寫,Linux系統(tǒng)環(huán)境下的make就是GNU make;之所有有g(shù)make,是因為在別的平臺上,make一般被占用,GNU make只好叫g(shù)make了;比如在進行編譯時要使用make命令,但如果在非GNU系統(tǒng)中運行,必須使用GNU make,而不是使用系統(tǒng)自帶的make版本,這時要用gmake代替make進行編譯。
    完成上面的工作之后,我們就可以進行fsbl的創(chuàng)建與編譯了,執(zhí)行hsi命令進入hsi命令行模式,執(zhí)行下面這些命令:

  • open_hw_design /home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.hdf
  • set hwdsgn design_navigator_7010_wrapper // 定義hwdsgn變量
  • set_repo_path /home/zynq/embeddedsw/embeddedsw-xilinx-v2018.3 // 設(shè)置embeddedsw倉庫路徑
  • set fsbl_dir /home/zynq/linux/fsbl // 定義fsbl_dir變量
  • generate_app -hw $hwdsgn -os standalone -proc ps7_cortexa9_0 -app zynq_fsbl -compile -sw fsbl -dir $fsbl_dir
  • 圖 31.3.4 編譯fsbl-1

    圖 31.3.5 編譯fsbl-2


    首先還是使用open_hw_design命令打開hdf硬件描述符文件;使用set_repo_path命令設(shè)置embeddedsw倉庫所在路徑,例如/home/zynq/embeddedsw/embeddedsw-xilinx-v2018.3;set命令用于定義變量,我們使用set命令定義了一個hwdsgn變量等于design_navigator_7010_wrapper,當執(zhí)行g(shù)enerate_app命令的時候使用該變量,定義了一個fsbl_dir變量定義了用于存放fsbl工程的路徑;最后使用generate_app命令產(chǎn)生和編譯fsbl,”-hw $hwdsgn”指定硬件設(shè)計的名字,就是hdf文件去掉后綴即可,”-os standalone”指定我們的app是一個無操作系統(tǒng)的裸機程序,”-proc ps7_cortexa9_0”指定處理器,”-app zynq_fsbl”指定app的名字(這個不能改),”-compile”表示要編譯生成的源文件(如果不加的話則表示僅產(chǎn)生fsbl工程源碼并不進行編譯),”-sw fsbl”指定本軟件設(shè)計的名字(這個名字可以自己定),”-dir $fsbl_dir”我們的fsbl工程存放的路徑,筆者這里以/home/zynq/linux/fsbl為例,大家根據(jù)自己的情況設(shè)定。
    整個過程完成之后,我們可以執(zhí)行exit命令退出hsi命令行模式了,此時/home/zynq/linux/fsbl目錄下的內(nèi)容如下所示:

    圖 31.3.6 fsbl工程源碼目錄


    /home/zynq/linux/fsbl就是我們通過hsi命令生成的fsbl對應(yīng)的源碼目錄,這個就像是在Windows下使用SDK軟件創(chuàng)建了一個FSBL工程一樣,上圖中的executable.elf文件fsbl工程編譯之后得到elf格式文件;得到fsbl源碼工程之后,我們就可以直接在fsbl工程目錄進行編譯了,例如,在/home/zynq/linux/fsbl目錄下執(zhí)行make clean命令對fsbl工程目錄進行清理,如下:
    make clean

    圖 31.3.7 清理工程


    我們可以修改Makefile文件,將編譯產(chǎn)生的fsbl鏡像文件名字改為zynq_fsbl.elf,在fsbl工程目錄下,打開Makefile文件,修改EXEC變量,如下所示:
    vi Makefile

    圖 31.3.8 修改EXEC變量


    將該變量由executable.elf修改為zynq_fsbl.elf,除此之外,我們還可以看到變量CC := arm-none-eabi-gcc,這指定了編譯fsbl時使用的交叉編譯工具,這個不用改,修改完成之后保存退出即可!我們直接在該目錄下執(zhí)行make命令即可編譯,如下:
    make

    圖 31.3.9 make編譯fsbl工程


    編譯成功之后產(chǎn)生的鏡像文件就成了fsbl_zynq.elf,如下所示:

    圖 31.3.10 fsbl鏡像文件


    20.4編譯U-Boot
    在中,已經(jīng)讓大家把xilinx官方的U-Boot拷貝到Ubuntu系統(tǒng)中了,并對他們進行了修改,添加了一些自己定義的文件,本篇教程不使用前面移植后的U-Boot,我們用一份新的xilinx官方2018.3版本(這個版本是xilinx設(shè)定的版本,其U-Boot版本為2018.01)的U-Boot源碼,源碼已經(jīng)提供給大家了,路徑為:ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70103_Embedded_Linux資源文件甥潢瑯u-boot-xlnx-xilinx-v2018.3.tar.gz,大家也可以通過https://github.com/Xilinx/u-boot-xlnx/releases網(wǎng)址進行下載。
    首先將U-Boot源碼壓縮包文件拷貝到Ubuntu系統(tǒng)目錄中,例如/home/zynq/linux/u-boot目錄,并將其解壓到當前目錄,解壓之后會產(chǎn)生一個u-boot-xlnx-xilinx-v2018.3文件夾,進入到該目錄下,就可以看到U-boot源碼目錄下的文件和文件夾了,如下所示:

    圖 31.4.1 U-Boot源碼目錄


    在前面給大家講過,使用"petalinux-config -c u-boot"命令可以對U-Boot進行配置、使用"petalinux-build -c u-boot"命令可以編譯u-boot,那么這些方法都是使用petalinux工具時的做法,這里教大家如何在U-Boot源碼目錄下配置、編譯而不通過petalinux-xxx命令;
    關(guān)于U-Boot我們已經(jīng)在前面給大家進行了詳細的講解,包括Makefile文件、各個文件目錄的作用以及源碼的分析、U-Boot配置、U-Boot常用命令等等,這里就不再講解。
    1、添加設(shè)備樹文件
    關(guān)于設(shè)備樹的概念現(xiàn)在不給大家講,后面會說。除了Linux內(nèi)核支持設(shè)備樹之外,我們使用的U-Boot也是支持設(shè)備樹的;在31.2小節(jié)中我們使用hsi命令生成了一些dts和dtsi的設(shè)備樹源文件,現(xiàn)在我們要用到它們了,這些設(shè)備樹文件都是根據(jù)我們的hdf硬件設(shè)計而自動生成的,如果我們使用U-Boot中自帶的設(shè)備樹文件則不能滿足我們的情況。
    將前面生成的設(shè)備樹文件(筆者這里生成的設(shè)備樹文件在/home/zynq/linux/dts目錄下)pcw.dtsi、pl.dtsi、system-top.dts以及zynq-7000.dtsi四個文件拷貝到U-Boot源碼目錄下的arch/arm/dts目錄下,拷貝過去之后進入到arch/arm/dts目錄下查看,如下所示:

    圖 31.4.2 拷貝設(shè)備樹文件到U-Boot


    接下來我們需要對system-top.dts文件進行一個簡單地修改,打開system-top.dts文件,修改之前內(nèi)容如下:
    示例代碼20.4.1 system-top.dts修改之前

  • 1 /*
  • 2 * CAUTION: This file is automatically generated by Xilinx.
  • 3 * Version: HSI
  • 4 * Today is: Mon Mar 16 02:51:23 2020
  • 5 */
  • 6
  • 7
  • 8 /dts-v1/;
  • 9 #include "zynq-7000.dtsi"
  • 10 #include "pl.dtsi"
  • 11 #include "pcw.dtsi"
  • 12 / {
  • 13 chosen {
  • 14 bootargs = "earlycon";
  • 15 stdout-path = "serial0:115200n8";
  • 16 };
  • 17 aliases {
  • 18 ethernet0 = &gem0;
  • 19 i2c0 = &i2c_2;
  • 20 i2c1 = &i2c0;
  • 21 i2c2 = &i2c1;
  • 22 serial0 = &uart0;
  • 23 serial1 = &uart1;
  • 24 spi0 = &qspi;
  • 25 };
  • 26 memory {
  • 27 device_type = "memory";
  • 28 reg = <0x0 0x20000000>;
  • 29 };
  • 30 };

  • 這里我們對該文件進行一個簡單地修改,修改之后如下所示:
    示例代碼20.4.2 system-top.dts修改之后

  • 1 /*
  • 2 * CAUTION: This file is automatically generated by Xilinx.
  • 3 * Version: HSI
  • 4 * Today is: Mon Mar 16 02:51:23 2020
  • 5 */
  • 6
  • 7
  • 8 /dts-v1/;
  • 9 #include "zynq-7000.dtsi"
  • 10 #include "pl.dtsi"
  • 11 #include "pcw.dtsi"
  • 12 / {
  • 13 model = "Alientek ZYNQ Development Board";
  • 14
  • 15 chosen {
  • 16 bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait";
  • 17 stdout-path = "serial0:115200n8";
  • 18 };
  • 19 aliases {
  • 20 ethernet0 = &gem0;
  • 21 i2c0 = &i2c_2;
  • 22 i2c1 = &i2c0;
  • 23 i2c2 = &i2c1;
  • 24 serial0 = &uart0;
  • 25 serial1 = &uart1;
  • 26 spi0 = &qspi;
  • 27 };
  • 28 memory {
  • 29 device_type = "memory";
  • 30 reg = <0x0 0x20000000>;
  • 31 };
  • 32 };
  • 33
  • 34 &gem0 {
  • 35 local-mac-address = [00 0a 35 00 1e 53];
  • 36 };
  • 37
  • 38 &qspi {
  • 39 #address-cells = <1>;
  • 40 #size-cells = <0>;
  • 41 flash0: flash@0 {
  • 42 compatible = "n25q512a","micron,m25p80";
  • 43 reg = <0x0>;
  • 44 #address-cells = <1>;
  • 45 #size-cells = <1>;
  • 46 spi-max-frequency = <50000000>;
  • 47 partition@0x00000000 {
  • 48 label = "boot";
  • 49 reg = <0x00000000 0x00500000>;
  • 50 };
  • 51 partition@0x00500000 {
  • 52 label = "bootenv";
  • 53 reg = <0x00500000 0x00020000>;
  • 54 };
  • 55 partition@0x00520000 {
  • 56 label = "kernel";
  • 57 reg = <0x00520000 0x00a80000>;
  • 58 };
  • 59 partition@0x00fa0000 {
  • 60 label = "spare";
  • 61 reg = <0x00fa0000 0x00000000>;
  • 62 };
  • 63 };
  • 64 };

  • 修改完成之后保存退出即可!
    以上主要修改了bootargs屬性、添加了model屬性、網(wǎng)口0的MAC地址以及給qspi進行了分區(qū)操作。修改完成之后,我們還需要將system-top.dts文件添加到arch/arm/dts/Makefile文件中,找到dtb-$(CONFIG_ARCH_ZYNQ)這里,將system-top.dtb(.dts編譯之后得到的就是.dtb文件)添加上去,這樣當CONFIG_ARCH_ZYNQ宏被選中的時候,system-top.dts才會被編譯進去,如下所示:

    圖 31.4.3 添加system-top.dtb文件


    注意在zynq-zybo.dtb后面加上一個反斜杠””,跟上面的保持一致。
    添加好之后保存退出文件。
    2、修改zynq-common.h和zynq_zc70x.h配置文件
    include/configs/目錄下有很多的配置文件,該目錄下的配置文件中有很多宏定義,這些宏定義將會在編譯U-Boot源碼時會被用到;前面我們使用petalinux工具的時候并沒有去配置U-Boot、內(nèi)核等,原因在于petalinux確實比較智能,它能夠根據(jù)hdf文件記錄的信息自動配置,例如一些時鐘頻率、外設(shè)時鐘、環(huán)境變量偏移量等。
    zynq-common.h和zynq_zc70x.h都在include/configs目錄下,zynq-common.h是xilinx提供的用于配置zynq系列處理器的通用配置文件,zynq-common.h頭文件被zynq_zc70x.h包含,下面我們要對這兩個頭文件進行一些簡單地修改!
    首先對zynq_zc70x.h文件進行修改,修改之前如下所示:
    示例代碼20.4.3 zynq_zc70x.h修改之前

  • 1 /*
  • 2 * (C) Copyright 2013 Xilinx, Inc.
  • 3 *
  • 4 * Configuration settings for the Xilinx Zynq ZC702 and ZC706 boards
  • 5 * See zynq-common.h for Zynq common configs
  • 6 *
  • 7 * SPDX-License-Identifier: GPL-2.0+
  • 8 */
  • 9
  • 10 #ifndef __CONFIG_ZYNQ_ZC70X_H
  • 11 #define __CONFIG_ZYNQ_ZC70X_H
  • 12
  • 13 #define CONFIG_ZYNQ_I2C0
  • 14 #define CONFIG_ZYNQ_EEPROM
  • 15
  • 16 #include
  • 17
  • 18 #endif /* __CONFIG_ZYNQ_ZC70X_H */

  • 這里我們要把CONFIG_ZYNQ_I2C0和CONFIG_ZYNQ_EEPROM宏定義給去掉,原因就是我不想在U-Boot中使用I2C設(shè)備,直接給去掉!修改之后如下:
    示例代碼20.4.4 zynq_zc70x.h修改之后

  • 1 /*
  • 2 * (C) Copyright 2013 Xilinx, Inc.
  • 3 *
  • 4 * Configuration settings for the Xilinx Zynq ZC702 and ZC706 boards
  • 5 * See zynq-common.h for Zynq common configs
  • 6 *
  • 7 * SPDX-License-Identifier: GPL-2.0+
  • 8 */
  • 9
  • 10 #ifndef __CONFIG_ZYNQ_ZC70X_H
  • 11 #define __CONFIG_ZYNQ_ZC70X_H
  • 12
  • 13 #include
  • 14
  • 15 #endif /* __CONFIG_ZYNQ_ZC70X_H */

  • 接下來修改zynq-common.h文件,打開該文件,修改CONFIG_CPU_FREQ_HZ(ARM主頻),將頻率由800000000修改為666666687(如果是7020核心板則修改為766666687):
    示例代碼20.4.5 zynq-common.h修改內(nèi)容-1

  • 12
  • 13 /* CPU clock */
  • 14 #ifndef CONFIG_CPU_FREQ_HZ
  • 15 # define CONFIG_CPU_FREQ_HZ 666666687
  • 16 #endif
  • 17

  • 接下來修改CONFIG_SF_DEFAULT_SPEED(默認的QSPI速率),由30000000改為50000000,如下所示:
    示例代碼20.4.6 zynq-common.h修改內(nèi)容-2

  • 50
  • 51 /* QSPI */
  • 52 #ifdef CONFIG_ZYNQ_QSPI
  • 53 # define CONFIG_SF_DEFAULT_SPEED 50000000
  • 54 #endif
  • 55

  • 修改CONFIG_ENV_SIZE(環(huán)境變量大小),由(128 << 10)修改為0x20000:
    示例代碼20.4.7 zynq-common.h修改內(nèi)容-3

  • 148
  • 149 /* Total Size of Environment Sector */
  • 150 #ifdef CONFIG_ENV_IS_IN_EEPROM
  • 151 # define CONFIG_ENV_SIZE CONFIG_SYS_EEPROM_SIZE
  • 152 # define CONFIG_EXTRA_ENV_SETTINGS
  • 153 #else
  • 154 # define CONFIG_ENV_SIZE 0x20000
  • 155 #endif
  • 156

  • 修改CONFIG_ENV_OFFSET(環(huán)境變量存儲位置偏移量),由0xE0000修改為0x500000:
    [size=13.3333px]示例代碼20.4.8 zynq-common.h修改內(nèi)容-4

  • 163
  • 164 /* cc108 requires to be 0xF00000 to have boot.bin with bitstream included */
  • 165 # ifndef CONFIG_ENV_OFFSET
  • 166 # define CONFIG_ENV_OFFSET 0x500000
  • 167 # endif
  • 168 #endif
  • 169

  • 需要注意CONFIG_ENV_SIZE和CONFIG_ENV_OFFSET這兩個是U-Boot環(huán)境變量存儲有關(guān)的,在下面menuconfig配置U-Boot的時候我們會將環(huán)境變量存儲在QSPI中,CONFIG_ENV_SIZE指定了環(huán)境變量分區(qū)的大小,CONFIG_ENV_OFFSET指定環(huán)境變量分區(qū)的偏移量,這些都與QSPI的分區(qū)表有關(guān)!
    修改完成之后保存退出即可,接下來就可以正式使用make命令進行配置和編譯了。
    3、defconfig配置
    在U-Boot的源碼目錄下,執(zhí)行下面這條命令對xilinx官方的U-Boot進行defconfig配置,如下所示:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig

    圖 31.4.4 defconfig配置


    “ARCH=arm”指定了u-boot運行的機器架構(gòu),“CROSS_COMPILE=arm-linux-gnueabihf-”指定了交叉編譯工具的前綴,交叉編譯工具我們使用的是xilinx官方提供的,在我們安裝petalinux的時候也安裝了,在petalinux安裝目錄下的tools/linux-i386目錄,如下所示:

    圖 31.4.5 交叉編譯工具鏈安裝目錄


    gcc-arm-linux-gnueabi和gcc-arm-none-eabi兩個目錄下安裝的是兩種不同的交叉編譯工具鏈(其它那幾個目錄安裝的也是交叉編譯工具鏈,對于ZYNQ 7010/7020來說用不上),兩者之間的區(qū)別大家可以簡單地理解為gcc-arm-linux-gnueabi一般用于編譯linux系統(tǒng)的源碼,例如ARM Linux內(nèi)核源碼、ARM Linux應(yīng)用程序等,而gcc-arm-none-eabi一般用于編譯ARM裸機程序,例如我們前面編譯fsbl代碼的時候用的就是它;這么一說的話,那我們編譯U-Boot應(yīng)該用gcc-arm-none-eabi咯,但這里我們用的是gcc-arm-linux-gnueabi,主要筆者看到xilinx wiki文檔中用的也是這個,那就這個吧。
    交叉編譯命令就在安裝目錄下的bin文件夾中,例如:

    圖 31.4.6 交叉編譯命令


    CROSS_COMPILE指定的就是這些命令的前綴,我們在前面source petalinux目錄下的settings.sh腳本時已經(jīng)將它們的路徑導出到環(huán)境變量了,所以不用加全路徑。
    zynq_zc702_defconfig是xilinx為7010/7020添加的配置文件,所以我們也是使用這個!
    4、menuconfig圖形化配置
    U-Boot圖形化配置前面已經(jīng)給大家講過了,在U-Boot源碼目錄下,執(zhí)行下面這條命令進入到menuconfig圖形化配置界面:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  • 圖 31.4.7 menuconfig配置


    各個配置項就不給大家一一講解了,相信大家通過前面的學習已經(jīng)對U-Boot的menuconfig圖形化配置有一定的認識和理解了,接下來我直接把配置列出來:

  • Boot media --->
  • Support for booting from SD/EMMC // 選擇
  • SPL / TPL --->
  • [ ] Enable SPL // 取消
  • Command line interface --->
  • Memory commands --->
  • [ ] eeprom - EEPROM subsystem // 取消
  • Device access commands --->
  • [ ] i2c // 取消
  • Device Tree Control --->
  • (system-top) Default Device Tree for DT control // 將設(shè)備樹設(shè)置為system-top(也就是system-top.dts)
  • Device Drivers --->
  • Serial drivers --->
  • [ ] Enable an early debug UART for debugging // 取消

  • 配置完成之后保存退出,執(zhí)行下面這條命進行編譯:

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j10
  • 圖 31.4.8 編譯U-Boot


    編譯完成之后將會在當前目錄下生成一個u-boot文件、u-boot.bin文件以及其它一些文件,如下所示:

    圖 31.4.9 編譯完成


    u-boot文件是elf格式的鏡像文件,而u-boot.bin則是純二進制格式的鏡像文件。
    20.5編譯kernel
    同樣本篇教程不使用前面移植后的Linux內(nèi)核源碼,我們用一份新的xilinx官方2018.3版本(這個版本是xilinx設(shè)定的版本,其linux版本為4.14.0)的內(nèi)核源碼,源碼已經(jīng)提供給大家了,路徑為:ZYNQ開發(fā)板資料盤(A盤)4_SourceCodeZYNQ_70103_Embedded_Linux資源文件kernellinux-xlnx-xilinx-v2018.3.tar.gz,大家也可以通過https://github.com/Xilinx/linux-xlnx/releases網(wǎng)址進行下載。
    將內(nèi)核源碼壓縮包文件拷貝到Ubuntu系統(tǒng)目錄中,例如/home/zynq/linux/kernel目錄,并將其解壓到當前目錄,解壓之后會產(chǎn)生一個linux-xlnx-xilinx-v2018.3文件夾,進入到該目錄下,就可以看到內(nèi)核源碼目錄下的文件和文件夾了,如下所示:

    圖 31.5.1 內(nèi)核源碼目錄


    本小節(jié)我們也是直接在內(nèi)核源碼目錄下進行編譯,而不使用petalinux工具,其實這些知識前面都已經(jīng)給大家介紹過了。
    1、添加設(shè)備樹文件
    這里我們直接將前面U-Boot源碼arch/arm/dts目錄下的那四個設(shè)備樹文件(pl.dtsi、pcw.dtsi、system-top.dts和zynq-7000.dtsi)直接拷貝到內(nèi)核源碼目錄下的arch/arm/boot/dts目錄中,不用進行修改。同樣我們也需要修改arch/arm/boot/dts目錄下的Makefile文件,將設(shè)備樹添加上去,如下:

    圖 31.5.2 Makefile中添加設(shè)備樹


    修改完成之后保存退出即可!
    2、defconfig配置
    在內(nèi)核源碼目錄下執(zhí)行下面這條命令對內(nèi)核進行defconfig配置:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

    圖 31.5.3 defconfig配置


    命令這里就不給大家解釋了,前面我們已經(jīng)解釋過,內(nèi)核的配置、編譯方式基本跟U-Boot是一樣的,需要注意的是命令中間的空格不要漏掉了,因為以前發(fā)現(xiàn)很多初學者老是會漏掉這些空格,這樣就導致命令執(zhí)行失敗。
    3、menuconfig配置
    這里我們暫時就不進行配置,以后有需要的時候再配,先保持默認!
    4、編譯內(nèi)核
    執(zhí)行下面這條命令編譯內(nèi)核源碼:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10

    圖 31.5.4 編譯內(nèi)核

    圖 31.5.5 編譯完成


    編譯完成之后會在arch/arm/boot/目錄下生成一個名為zImage的內(nèi)核鏡像文件,后面我們在用。
    5、編譯設(shè)備樹
    內(nèi)核與u-boot不同的是,U-Boot的設(shè)備樹默認是與內(nèi)核一起編譯的,并且產(chǎn)生的dtb文件已經(jīng)與U-Boot鏡像文件集成在一起了;在內(nèi)核里邊我們需要單獨編譯出設(shè)備樹的dtb文件,前面已經(jīng)將我們所需要的設(shè)備樹文件拷貝到內(nèi)核的arch/arm/boot/dts目錄下了,接下來執(zhí)行這條命令編譯system-top.dtb文件:
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

    圖 31.5.6 編譯設(shè)備樹


    編譯成功之后會在arch/arm/boot/dts目錄下生成system-top.dtb文件。
    20.6編譯rootfs
    根文件系統(tǒng)我們直接使用petalinux進行編譯即可,首先進入petalinux的安裝目錄,使用petalinux-create命令新建一個petalinux工程,如下:
    petalinux-create --type project --template zynq --name ALIENTEK-ZYNQ

    圖 31.6.1 新建petalinux工程


    進入到ALIENTEK-ZYNQ工程目錄下,執(zhí)行petalinux-config --get-hw命令導入hdf硬件描述符文件:
    cd ALIENTEK-ZYNQ

  • petalinux-config --get-hw-description /home/zynq/hdf/Navigator_7010.sdk
  • 圖 31.6.2 導入hdf文件


    這里用的hdf文件就是31.1小節(jié)中使用的,在彈出來的配置界面中,我們不用進行任何配置,直接保存退出即可!等待它配置完成。
    接下來直接編譯根文件系統(tǒng):

  • petalinux-build -c rootfs
  • 圖 31.6.3 編譯根文件系統(tǒng)


    等待其編譯完成,完成之后產(chǎn)生的根文件系統(tǒng)壓縮包在images/linux目錄下,如下所示:

    圖 31.6.4 產(chǎn)生的根文件系統(tǒng)壓縮包


    因為我們要使用SD卡啟動,并且SD卡會有一個EXT4格式的分區(qū)專門存放根文件系統(tǒng),所以我們要使用壓縮格式的根文件系統(tǒng),例如rootfs.tar.gz或rootfs.tar.bz2。
    20.7啟動開發(fā)板
    經(jīng)過上面一系列的過程之后,我們就已經(jīng)得到了啟動開發(fā)板的所有所需的鏡像文件了。例如我們使用petalinux工具會生成image.ub和BOOT.BIN文件,使用這兩個文件我們就可以啟動開發(fā)板了,但是這里我們不這樣做。
    前面給大家介紹過image.ub這個文件的本質(zhì),那么它其實是多個文件組合在一起的,包括內(nèi)核鏡像、dtb以及根文件系統(tǒng),這樣的做法有一個弊端,不夠靈活,一個變了整個image.ub文件就得重新制作一遍,很麻煩。同樣BOOT.BIN文件是fsbl鏡像、u-boot鏡像以及pl端bit文件集合在一起的,那么既然是集合在一起的,那么我們單獨使用也是可以的嘛。
    所以我們這里的思路就是將內(nèi)核鏡像文件zImage、內(nèi)核設(shè)備樹文件以及根文件系統(tǒng)從image.ub文件中分離出來;而將bit文件從BOOT.BIN文件中分離出來,這樣做之后我們的SD卡中將會存在5部分內(nèi)容:zImage、dtb、rootfs、bit以及BOOT.BIN(fsbl鏡像與u-boot鏡像的集合體),明確之后我們將他們拷貝到我們的SD卡中。
    1、制作SD啟動卡
    SD啟動卡的制作方式在17.2.10小節(jié)當中已經(jīng)給大家介紹過了,這里不再細說,筆者直接將一張16G的TF卡格式化了2個分區(qū),FAT32和EXT4,如下所示:

    圖 31.7.1 SD啟動卡分區(qū)信息


    2、拷貝鏡像到FAT分區(qū)
    將前面過程當中生成的各種鏡像文件拷貝到SD啟動卡的FAT分區(qū),包括zImage(內(nèi)核鏡像,內(nèi)核源碼目錄arch/arm/boot/zImage)、system-top.dtb(內(nèi)核設(shè)備樹dtb文件,內(nèi)核源碼目錄arch/arm/boot/dts/system-top.dtb)、design_navigator_7010_wrapper.bit(pl端bitstream文件,/home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.bit)。大家根據(jù)自己前面步驟當中文件存放的目錄去找到相應(yīng)的這些鏡像文件。
    接下來我們需要將BOOT.BIN文件拷貝到FAT分區(qū),但是前面的過程中我們并沒有生成BOOT.BIN文件,這里就需要使用前面生成的u-boot(U-Boot elf格式鏡像,U-Boot源碼目錄u-boot)和zynq_fsbl.elf(fsbl elf格式鏡像,/home/zynq/linux/fsbl/zynq_fsbl.elf)來制作BOOT.BIN文件。
    首先我們進入到U-Boot源碼目錄下,將生成的u-boot文件重命名為u-boot.elf,如下所示:

  • mv u-boot u-boot.elf
  • 圖 31.7.2 u-boot重命名


    為啥要重命名呢?因為筆者發(fā)現(xiàn)使用petalinux-package命令制作BOOT.BIN文件的時候,如果elf格式文件沒有帶.elf后綴名會識別不了。接下來我們就可以用petalinux-package命令去生成BOOT.BIN文件了,在U-Boot源碼目錄下執(zhí)行下面這條命令:
    petalinux-package --boot -p /home/zynq/petalinux/v2018.3/ALIENTEK-ZYNQ --fsbl /home/zynq/linux/fsbl/zynq_fsbl.elf --u-boot ./u-boot.elf -o ./BOOT.BIN --force

    圖 31.7.3 生成BOOT.BIN文件


    petalinux-package命令前面已經(jīng)給大家介紹過了,”-p”選項指定一個petalinux工程,如果直接在petalinux工程目錄下運行該命令則不需要用”-p”指定;”--fsbl”指定fsbl的elf格式鏡像;” --u-boot”指定U-Boot的elf格式鏡像文件,大家根據(jù)自己的路徑情況進行修改;”-o”選項指定輸出文件的名字以及存放的路徑,例如這里是將BOOT.BIN文件存放在當前目錄下,命令執(zhí)行完成之后就會在當前目錄下生成一個BOOT.BIN文件,如上圖所示。我們使用ls查看下它的大小:

    圖 31.7.4 BOOT.BIN文件大小


    我們發(fā)現(xiàn)它只有600多K,但是u-boot.elf文件可是有4M多的,而zynq_fsbl.elf文件也有600多K,為啥合成為BOOT.BIN文件之后只有600多K了呢?原因在于格式問題,elf格式文件中除了機器碼之外,還包含了很多額外的信息,例如符號表、調(diào)試信息、重定位表、運行地址和加載地址等,信息量很大,所以導致elf文件很大,例如linux下的應(yīng)用程序就是elf格式的,程序加載運行的時候會去解析,但是裸機下不能用elf格式,包括內(nèi)核鏡像和U-Boot鏡像等都不能用elf格式;而bin文件則是最純粹的二進制機器代碼,沒有任何多余的信息,所以文件小。
    使用petalinux-package命令生成的BOOT.BIN文件的時候,它會解析我們給定的elf格式文件,獲取它的運行地址、加載地址以及真正的二進制機器代碼,然后再把它倆集合起來,所以BOOT.BIN文件就是一個.bin格式的文件,所以它小,相信說到這里大家應(yīng)該明白了!需要注意我們生成的BOOT.BIN文件中并不包含bit文件,前面已經(jīng)跟大家說過了。
    之后將BOOT.BIN文件也拷貝到SD啟動卡的FAT分區(qū),那么此時來看看我們的FAT分區(qū)有哪些文件:

    圖 31.7.5 FAT分區(qū)文件列表


    為了方便、好看,筆者將design_navigator_7010_wrapper.bit文件和system-top.dtb文件進行了重命名,分別為system.bit和system.dtb,如下:

    圖 31.7.6 文件重命名


    3、將根文件系統(tǒng)解壓到EXT4分區(qū)
    接下來我們需要將31.6小節(jié)編譯的根文件系統(tǒng)壓縮包文件解壓到SD啟動卡的EXT4分區(qū),這里筆者使用rootfs.tar.gz壓縮包文件,進入到rootfs.tar.gz壓縮包文件所在目錄,執(zhí)行解壓命令:

    圖 31.7.7 解壓rootfs.tar.gz


    /media/zynq/ext4是筆者的SD啟動卡對應(yīng)的EXT4分區(qū)的掛載點,注意解壓的時候需要使用前面要加sudo,也就是要以root用戶的身份進行解壓。解壓完成之后執(zhí)行sync命令將數(shù)據(jù)同步到SD卡中,之后卸載SD啟動卡,卸載成功之后拔掉它!

    圖 31.7.8 卸載SD啟動卡


    4、啟動開發(fā)板
    將我們做好的啟動卡插入開發(fā)板,連接電源、串口啟動,打印信息如下所示:

    圖 31.7.9 開發(fā)板啟動


    在U-Boot啟動2秒倒計時之前,按回車或者是空格鍵停止啟動,進入到U-Boot的命令行模式,因為現(xiàn)在不能直接啟動,我們需要對U-Boot環(huán)境變量進行修改,在U-Boot命令行下執(zhí)行下面這些命令設(shè)置環(huán)境變量,如下所示:

    圖 31.7.10 設(shè)置環(huán)境變量


    示例代碼20.7.1 U-Boot環(huán)境變量設(shè)置

  • Zynq> setenv bitstream_load_address 0x100000
  • Zynq> setenv bitstream_image system.bit
  • Zynq> setenv bitstream_size 0x300000
  • Zynq> setenv kernel_image zImage
  • Zynq> setenv devicetree_image system.dtb
  • Zynq>
  • Zynq> setenv sdboot 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && load mmc 0 ${bitstream_load_address} ${bitstream_image} && fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && load mmc 0 ${kernel_load_address} ${kernel_image} && load mmc 0 ${devicetree_load_address} ${devicetree_image} && bootz ${kernel_load_address} - ${devicetree_load_address}; fi'

  • 關(guān)于U-Boot命令的使用在前面已經(jīng)給大家講解過,不過這里也給大家簡單地說明一下我們設(shè)置的這些環(huán)境變量的作用:
    首先第一條命令我們設(shè)置了bitstream_load_address變量存放bitstream文件從SD卡中拷貝到內(nèi)存中的地址;第二條命設(shè)置了bitstream_image變量等于SD卡中bitstream文件的名字,也就是system.bit;第三條命設(shè)置了bitstream_size變量等于bitstream文件的大小;第四條命令設(shè)置了kernel_image變量等于SD卡中內(nèi)核鏡像的名字,也就是zImage;第五條命令設(shè)置了devicetree_image變量等于SD卡中內(nèi)核設(shè)備樹dtb文件的名字,也就是system.dtb;kernel_image和devicetree_image我們的這個U-Boot中默認是有的,只不過它們的內(nèi)容并不是我們SD中的文件名,所以需要重新設(shè)定。
    最后一條命令設(shè)置了sdboot變量,其實這個變量在我們使用的這個U-Boot中也是存在的,這里也是對他重新定義,這個變量的內(nèi)容很長,我們可以把它的內(nèi)容整理一下,如下:
    示例代碼20.7.2 sdboot變量內(nèi)容整理

  • if mmcinfo; then
  • run uenvboot;
  • echo Copying Linux from SD to RAM... && // 打印字符串
  • load mmc 0 ${bitstream_load_address} ${bitstream_image} && // 從SD卡拷貝bitstream文件到內(nèi)存
  • fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && // 從內(nèi)存中加載bitstream數(shù)據(jù)到FPGA
  • load mmc 0 ${kernel_load_address} ${kernel_image} && // 從SD卡拷貝內(nèi)核鏡像到內(nèi)存
  • load mmc 0 ${devicetree_load_address} ${devicetree_image} &&// 從SD卡拷貝設(shè)備樹到內(nèi)存
  • bootz ${kernel_load_address} - ${devicetree_load_address}; // bootz啟動內(nèi)核
  • fi

  • “&&”符號其實就是C語言中”與”,跟C語言里面的作用一毛一樣,${xxx}就是變量的引用,if … fi這個就是if條件判斷語句了,fi表示條件判斷的結(jié)束,U-Boot里邊的這種語法很簡單地,就不給大家細說了,如果不明白可以在網(wǎng)上找找資料。
    前面跟大家講過,U-Boot中的bootcmd變量的作用,U-Boot啟動內(nèi)核或在命令行下執(zhí)行boot命令時其實就是去執(zhí)行bootcmd,那我們來看看bootcmd的內(nèi)容是什么:

    圖 31.7.11 bootcmd的內(nèi)容

    圖 31.7.12 modeboot的內(nèi)容


    所以從上面可以知道,bootcmd的內(nèi)容其實就是運行sdboot,也就是上面定義的那個。
    變量設(shè)置完成之后,執(zhí)行saveenv保存環(huán)境變量到QSPI Flash中,那么下次就不用再設(shè)置了

    圖 31.7.13 保存環(huán)境變量


    保存完成執(zhí)行boot命令啟動內(nèi)核:

    圖 31.7.14 啟動內(nèi)核


    啟動完成之后登陸系統(tǒng)(用戶名和密碼都是root):

    圖 31.7.15 登陸系統(tǒng)


    后面我們的驅(qū)動開發(fā)篇將以本章使用的U-Boot源碼、內(nèi)核源碼等進行開發(fā)工作!
    20.8tcl腳本
    前面我們在hsi終端下通過執(zhí)行相應(yīng)的命令去獲取bit文件、自動生成設(shè)備樹以及構(gòu)建一個fsbl源碼等,覺得這樣非常的不方便,每次都要先執(zhí)行hsi命令進入到hsi終端模式,然后在一個一個命令敲,這樣感覺非常不好,那可不可以像shell命令一樣,創(chuàng)建一個shell腳本之類的呢?其實是可以的,我們可以創(chuàng)建一個后綴名為.tcl的腳本,然后把我們的命令添加上去,然后直接執(zhí)行這個腳本就行了。
    例如我在Ubuntu目錄下新建一個hsi_test.tcl文件,內(nèi)容如下所示:

  • 1
  • 2 hsi::open_hw_design /home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.hdf

  • 文件中的hsi::open_hw_design xxx.hdf就表示執(zhí)行his的open_hw_design命令,后面跟著的參數(shù)就是對應(yīng)的hdf文件路徑了,例如我們將31.2小節(jié)中執(zhí)行的命令寫入到hsi_test.tcl腳本中,如下所示:
    示例代碼20.8.1 tcl腳本示例 hsi_test.tcl內(nèi)容

  • 1 # tcl script test
  • 2
  • 3 hsi::open_hw_design /home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.hdf
  • 4 hsi::set_repo_path /home/zynq/device-tree/device-tree-xlnx-xilinx-v2018.3
  • 5 hsi::create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
  • 6 hsi::generate_target -dir /home/zynq/linux/dts
  • 7

  • 第一行#號表示注釋。
    那我們?nèi)绾螆?zhí)行hsi_test.tcl腳本呢?執(zhí)行方法如下所示:

  • xsct hsi_test.tcl
  • 圖 31.8.1 運行hsi_test.tcl腳本


    “xsct xxx.tcl”即可!xsct也是petalinux工具安裝的時候自帶的,它也是命令行終端,例如運行xsct命令就會進入到xsct終端模式,如下所示:

    圖 31.8.2 xsct終端


    例如我們在xsct終端下也可以執(zhí)行腳本中的命令,例如:

    圖 31.8.3 xsct運行hsi命令


    所以當我們執(zhí)行”xsct hsi_test.tcl”命令時其實就是類似于將hsi_test.tcl交給xsct去解析并運行。
    關(guān)于xsct、hsi以及tcl腳本等更多的內(nèi)容這里就不講了,筆者對這些沒有什么深入的了解!如果大家感興趣自己去網(wǎng)上找找相關(guān)的資料。

    總結(jié)

    以上是生活随笔為你收集整理的修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    亚洲精品玖玖玖av在线看 | 五月婷婷一级片 | 亚洲性少妇性猛交wwww乱大交 | 亚洲成人精品国产 | 91精品国产综合久久婷婷香蕉 | 麻豆视频观看 | 欧美 日韩 成人 | 00av视频 | 欧美日韩精品二区第二页 | 国产中文字幕av | 日韩在线视频线视频免费网站 | 中文字幕在线播放日韩 | 久久免费视频5 | 在线黄色观看 | 国内精品久久久精品电影院 | 亚洲少妇自拍 | 国产精品一区免费在线观看 | 在线观看中文字幕网站 | 天天干视频在线 | 999日韩 | 国产亚洲精品女人久久久久久 | 精品久久久久久久久中文字幕 | 成人国产精品电影 | 精品福利片 | 国产成人一区二区三区电影 | 久草99 | 热久久99这里有精品 | 激情五月播播久久久精品 | 丁香综合网 | 欧美 亚洲 另类 激情 另类 | 久久久久久毛片 | 人人添人人澡 | 91成人看片 | 亚洲国产欧美在线人成大黄瓜 | 精品国产1区2区3区 国产欧美精品在线观看 | 亚洲做受高潮欧美裸体 | 国产精品无av码在线观看 | 丁香六月婷婷开心 | 亚a在线| 欧洲激情综合 | 青青河边草免费视频 | 国产精品青青 | 日韩成人xxxx | 国产精品美女久久久久久久 | 日韩视频中文字幕 | 日韩免费福利 | 91在线91拍拍在线91 | 久久美女精品 | 91精品无人成人www | 国产福利免费在线观看 | 五月天天av | 欧美伊人网 | 欧美国产日韩一区 | 最新av在线播放 | 丝袜+亚洲+另类+欧美+变态 | 精品亚洲国产视频 | 狠狠色狠狠综合久久 | 日韩av成人在线观看 | 成人在线播放免费观看 | 一本一道久久a久久综合蜜桃 | 亚洲精品永久免费视频 | 免费在线观看av的网站 | 国产丝袜一区二区三区 | 不卡的av在线 | 色综合久久综合网 | 在线观看久草 | 午夜精品久久久久久 | 国产美女在线观看 | 狠狠的干狠狠的操 | 久久免费黄色 | 欧美精品国产综合久久 | 亚洲精品视频在线观看免费视频 | 欧美一二三专区 | 国产不卡在线 | 亚洲精品18p| 又黄又爽又湿又无遮挡的在线视频 | 久久久久麻豆 | www.久久久| 久久久人人爽 | 亚洲va欧美va人人爽 | 国产一区在线观看视频 | 正在播放日韩 | 精品一区二区在线看 | 玖玖视频国产 | 国产日产精品一区二区三区四区 | 日三级在线 | 青春草视频在线播放 | 亚洲自拍av在线 | 亚洲精品综合一二三区在线观看 | 99视频99| 中文字幕精品视频 | 国产粉嫩在线观看 | 在线免费观看麻豆 | 探花系列在线 | 久久久久久久毛片 | 永久免费精品视频 | 日本在线观看黄色 | 蜜臀av性久久久久av蜜臀三区 | 欧美日韩中文在线观看 | 在线观看一区二区精品 | 99热这里只有精品8 久久综合毛片 | 在线免费看黄色 | 成人免费中文字幕 | 欧美精品一区二区三区四区在线 | 国产亚洲精品美女 | 国产日韩一区在线 | 日韩高清dvd | 六月激情久久 | 天天操天天干天天操天天干 | 久久精品美女视频网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 婷婷丁香在线 | 一区精品在线 | 我要看黄色一级片 | 亚洲视频www | 欧美日韩免费看 | 免费麻豆 | 久久久午夜精品理论片中文字幕 | 日本精品一区二区 | 国产精品国产三级国产aⅴ9色 | 国产精品久久久久久久久久久久久 | 亚洲国产成人精品电影在线观看 | 国产一区视频免费在线观看 | 成人精品久久 | 日韩精品中文字幕在线不卡尤物 | 久久久久免费精品视频 | 激情欧美丁香 | 色噜噜在线观看视频 | 久久手机看片 | 亚洲成av人影院 | 亚洲精品视频偷拍 | 久久视频在线免费观看 | 免费人做人爱www的视 | 九九视频一区 | 伊人网站 | 国产99免费 | 精品亚洲成人 | 97国产在线 | 久久人人精品 | 操操操夜夜操 | 免费视频一区 | 午夜 久久 tv | 国产高清精品在线观看 | 天天色天天射天天综合网 | 欧美乱淫视频 | 天天综合久久综合 | 国内偷拍精品视频 | 午夜精品成人一区二区三区 | 亚洲区精品| 成人黄色短片 | 精品国产一区二区三区久久影院 | 中文字幕 91 | 国产免费国产 | 国产99久| 正在播放五月婷婷狠狠干 | 国产精品久久久久久一二三四五 | 精品国产一区二区三区久久久蜜月 | 91热| 国产精品淫 | 国产一级片网站 | 日韩免费电影 | 日本黄色一级电影 | 久久久久久久99 | 9色在线视频 | 国产精品理论在线观看 | 在线观看精品一区 | 国产欧美最新羞羞视频在线观看 | 九九爱免费视频在线观看 | 久久国产精品99久久人人澡 | 97福利 | 国产精品高潮在线观看 | 麻豆一二三精选视频 | 国产精品久久久久久久久久久久午夜片 | 日本精品va在线观看 | 99精品福利 | 久久艹艹 | 精品 一区 在线 | 日韩精品91偷拍在线观看 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美成人tv| 国产九九九九九 | 欧美日韩国产精品一区二区三区 | 亚洲天堂网在线观看视频 | 四虎成人免费影院 | 午夜神马福利 | 久久久久在线视频 | 精品亚洲欧美无人区乱码 | 四虎亚洲精品 | 日韩在线精品视频 | 日韩精品高清不卡 | 激情开心站 | 人人爱人人添 | 黄网站免费大全入口 | 日韩系列在线观看 | 奇米先锋 | 337p西西人体大胆瓣开下部 | 国产美女精品在线 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品精品久久久久久 | 国产精品亚洲综合久久 | 人人插超碰 | av福利在线播放 | 99精品国产成人一区二区 | 国产日韩精品欧美 | 久久的色 | 精品久久五月天 | 综合久久一本 | 天天操操操操操操 | 久久影视精品 | 免费手机黄色网址 | 成人久久精品 | 久久久国产一区二区三区 | 99资源网| 国产精品成久久久久三级 | 91看片淫黄大片在线播放 | 久久国产三级 | 97色婷婷成人综合在线观看 | 成年人在线播放视频 | 久久国产高清 | av片在线看 | www夜夜| 91亚洲精品国偷拍 | 狠狠干.com| 国产成人综合在线观看 | www色com| 中文在线天堂资源 | 亚洲精品乱码久久久久久9色 | 久久成人国产精品 | 国产精品久久久999 国产91九色视频 | 久久久久久久久久久电影 | 国产精品久久久久av免费 | 91精选在线观看 | 日本精品在线视频 | 久久艹艹 | 久久久九色精品国产一区二区三区 | caobi视频| 国产精品久久久久三级 | 成人免费视频网址 | 天天综合导航 | av电影一区 | 国产.精品.日韩.另类.中文.在线.播放 | 毛片网站免费 | 天堂av网址 | 五月天婷婷在线观看视频 | 麻豆 91 在线 | 精品久久久一区二区 | 黄色网在线免费观看 | 91污视频在线观看 | 国产一区二区高清视频 | 人人澡澡人人 | 91精品国产一区二区在线观看 | 久久久久久久国产精品影院 | 国产精品成人一区二区三区吃奶 | 色一级片| 不卡av在线播放 | 欧美一区二区三区在线播放 | 国产伦精品一区二区三区四区视频 | 精品国产三级 | 99久久999久久久精玫瑰 | 一区二区电影网 | 久久免费公开视频 | 天堂va在线观看 | 亚洲春色奇米影视 | 欧美成人在线网站 | 中文字幕国产精品一区二区 | 中文字幕av最新更新 | av千婊在线免费观看 | 九九免费精品视频在线观看 | 亚洲精品久久久久58 | 亚洲区色| 香蕉免费在线 | 中文字幕在线视频精品 | 精品国产成人 | 久久刺激视频 | 亚洲丝袜中文 | 精品视频在线视频 | 六月婷操| 69国产精品视频 | 亚洲综合精品视频 | 久久不卡国产精品一区二区 | 中文av字幕在线观看 | 欧美日韩国产一区二区三区 | 91麻豆精品国产91久久久无需广告 | 日一日干一干 | 国产专区视频在线 | 国产成人三级在线播放 | 亚洲人成影院在线 | 国产在线小视频 | 免费特级黄色片 | 高清av网站| 五月婷婷影院 | 五月天欧美精品 | 国产中文欧美日韩在线 | 免费在线色| 在线观看日韩一区 | 久久综合久久综合这里只有精品 | 九九九热精品免费视频观看网站 | 69热国产视频 | 欧美一级片在线观看视频 | 久久精品视频免费观看 | 免费a级黄色毛片 | 亚洲欧洲成人 | 国产日韩欧美精品在线观看 | 亚洲免费成人av电影 | 色视频网站免费观看 | 国产精品一区二 | 夜夜操天天 | 天天久久夜夜 | 国产久草在线观看 | 国产精品久久久久久影院 | 国产日韩视频在线观看 | 亚洲日本在线视频观看 | 狠狠躁夜夜躁人人爽超碰91 | 欧美精品一区二区在线观看 | 香蕉成人在线视频 | 久久国产精品视频观看 | 成人午夜电影网 | 成人av片免费观看app下载 | 日韩av免费在线看 | 日韩欧美国产视频 | 黄网站色欧美视频 | 日韩大片在线看 | 亚洲日本va在线观看 | 特级西西人体444是什么意思 | 美女av免费 | 久久综合五月 | 欧美精品成人在线 | 中文字幕欧美激情 | 免费观看一区 | 天干啦夜天干天干在线线 | 亚洲高清在线精品 | 日p在线观看 | 国产婷婷在线观看 | 91女神的呻吟细腰翘臀美女 | 久久99精品久久久久婷婷 | 中文字幕精品一区二区三区电影 | 免费观看一区二区三区视频 | 成人国产精品入口 | 丁香九月婷婷 | 免费久久精品视频 | 高清精品在线 | 国产高清精品在线观看 | 国产自在线观看 | www日日夜夜 | 国产精品久久久久久久7电影 | 久久国产精品二国产精品中国洋人 | 麻豆91精品91久久久 | 久久国产精品精品国产色婷婷 | 精品黄色在线观看 | av片中文字幕 | 欧美国产日韩在线视频 | 超碰大片 | 国产区网址 | 日韩videos高潮hd | 国产福利在线免费观看 | 天天插天天干天天操 | 久草在线 | 久久精品视频免费观看 | 久草在线免费播放 | 五月天久久综合网 | 99色视频在线 | 国产精品中文久久久久久久 | bbbbb女女女女女bbbbb国产 | 精品久久久久久久久久久久久久久久 | 国产麻豆精品传媒av国产下载 | 亚洲黄色成人av | 一区二区三区在线观看免费视频 | 欧美日韩国产网站 | 亚洲精品国产精品国自产在线 | 亚洲一区二区视频 | 亚洲人人射 | 久精品在线 | 狠狠色丁香婷婷综合久小说久 | 一级片视频在线 | 婷婷在线色 | 亚洲婷婷在线视频 | 国产专区在线看 | 亚洲全部视频 | www夜夜操 | 国产亚洲在线观看 | 天天激情在线 | 欧美精品久久久久久久久久丰满 | 久久久久久久久久久久亚洲 | 欧美精品久久久久久久免费 | 国产成人一区二区三区免费看 | 亚洲午夜av久久乱码 | 精品嫩模福利一区二区蜜臀 | 国产成人av综合色 | 99久久精品久久亚洲精品 | 欧美一二三专区 | 婷婷色综合网 | 少妇性色午夜淫片aaaze | 中日韩在线视频 | 国产精品观看 | 欧美视频99 | 在线天堂视频 | 天天爽夜夜爽人人爽一区二区 | 免费久久久久久久 | 这里有精品在线视频 | 久久久免费精品国产一区二区 | www操操| 日日摸日日添夜夜爽97 | www蜜桃视频 | 人人爽人人看 | 午夜 在线| 在线看一区 | 国产无遮挡又黄又爽在线观看 | av女优中文字幕在线观看 | 97夜夜澡人人双人人人喊 | 国产精品99免视看9 国产精品毛片一区视频 | 国产免费三级在线观看 | 日日操夜夜操狠狠操 | 亚洲婷婷免费 | 超碰免费97 | 国产免费亚洲 | 免费成人黄色 | 中文字幕在线免费观看视频 | 欧美综合国产 | 天天做日日爱夜夜爽 | 91在线精品视频 | 国产成人综合图片 | 久久无码精品一区二区三区 | 国产午夜av | 国内精品久久久久久久 | 久久久久久美女 | 精品福利视频在线观看 | 国产96在线 | 欧美国产日韩在线观看 | 午夜精品视频一区 | 天天综合网久久 | 国产高清av免费在线观看 | 操天天操| 国产成人亚洲在线观看 | 天堂av中文字幕 | 日韩在线网址 | 欧美久久久久久久久久久 | 久久国产一区 | 视频国产区 | 毛片网免费 | 在线播放视频一区 | 国产精品999久久久 久产久精国产品 | 一区二区电影网 | 久久久网址 | 综合网伊人 | 九九久久影视 | 精品1区2区3区 | 久久高清免费视频 | 国产精品视频全国免费观看 | 蜜臀一区二区三区精品免费视频 | 五月婷婷久 | 国产精品九色 | 亚洲情婷婷 | 一级黄色片在线观看 | 精品久久久久久久久亚洲 | 狠狠综合网 | 久久综合婷婷 | 欧美一级网站 | 九九热av | 又黄又爽又刺激视频 | 69国产盗摄一区二区三区五区 | 久草在线视频资源 | 992tv人人草| 国产成人精品综合久久久 | 国产亚洲精品福利 | 亚洲精品国精品久久99热一 | 日韩欧美视频免费在线观看 | 最新av免费在线观看 | 精品99免费视频 | 国产黄色特级片 | av网站在线观看免费 | 久久久久久久免费观看 | 91资源在线观看 | 蜜臀一区二区三区精品免费视频 | 日韩av成人在线观看 | 国产91亚洲精品 | 亚洲闷骚少妇在线观看网站 | 中文字幕一区二区三区乱码在线 | 毛片在线播放网址 | 国产亚洲日| 久久久久伦理电影 | www狠狠| 国产一在线精品一区在线观看 | 天天操狠狠操夜夜操 | 在线观看精品黄av片免费 | 91综合久久一区二区 | 中文亚洲欧美日韩 | 亚洲午夜久久久久久久久电影网 | 九色精品免费永久在线 | 中文字幕av最新更新 | 99精品黄色片免费大全 | 久久国产亚洲精品 | 日韩精品视频免费 | 久久久久久久久毛片精品 | 色香蕉在线视频 | 五月天天av | 亚洲欧美日本一区二区三区 | 黄色免费大全 | 五月婷综合| 国产三级香港三韩国三级 | 91日韩在线视频 | 99久免费精品视频在线观看 | 免费看污污视频的网站 | 久久久久女教师免费一区 | 99热在线精品观看 | 亚洲人成免费 | 婷婷丁香狠狠爱 | 天天干,夜夜爽 | 99久久久久久 | 国产成人61精品免费看片 | 亚洲成人精品影院 | 2019中文字幕第一页 | 国产精品麻豆91 | 亚洲成人精品在线观看 | 在线黄频 | 97碰碰视频 | 天天操综合 | 日韩a级免费视频 | 婷婷日日 | 97av免费视频| 在线导航av | 狠狠狠色丁香婷婷综合久久88 | 国产精品久久久免费 | 国产午夜精品久久 | 色婷婷免费视频 | 麻豆国产精品视频 | 国产情侣一区 | 天堂av免费观看 | 91网址在线看 | 在线观看一区视频 | 四川妇女搡bbbb搡bbbb搡 | 免费日韩一区二区 | 4438全国亚洲精品观看视频 | 国产精品一级在线 | 99热99 | 国产精品嫩草69影院 | 狠狠色丁香久久综合网 | 人人射人人澡 | 黄网站色成年免费观看 | 中文字幕日韩伦理 | 黄网站免费看 | 久久久久国产成人精品亚洲午夜 | 99久久夜色精品国产亚洲 | 色婷婷成人网 | 99国产精品一区二区 | 97色在线观看 | 欧美日韩精品在线免费观看 | 国产91精品一区二区绿帽 | 久草在线视频精品 | 综合在线色 | 久久久黄视频 | 欧美日韩1区 | 一本一道波多野毛片中文在线 | 国产一区成人 | 成人黄大片视频在线观看 | 国产小视频国产精品 | 欧美aa在线 | 亚洲国产成人精品久久 | 在线观看精品 | 免费在线观看成人 | 一级一级一片免费 | 国产一卡在线 | 亚洲国产69| 色婷婷 亚洲 | 97超碰人人看 | 国产视频精品免费 | 久久精品女人毛片国产 | 一级黄色a视频 | 成人夜晚看av | 中文字幕色播 | 日本激情视频中文字幕 | 日本视频久久久 | 日韩av在线免费播放 | 在线看黄网站 | 久久久久久美女 | www.久久色| 丁香花中文字幕 | 国产不卡精品视频 | 亚洲丝袜一区二区 | 久久精品中文字幕一区二区三区 | 天天干 天天摸 天天操 | 国产精品女教师 | 一区二区久久久久 | 国产性天天综合网 | 啪啪午夜免费 | 99久久综合狠狠综合久久 | 亚洲一级黄色av | 欧美精品一区二区三区一线天视频 | 久久精品视频一 | 国产97免费 | 一级黄色片网站 | 99这里有精品 | 天天操天天色综合 | 91精品国产欧美一区二区成人 | 精选久久| 久久96国产精品久久99漫画 | 日韩mv欧美mv国产精品 | 五月婷婷丁香网 | 奇米影视8888| 四虎影视成人永久免费观看亚洲欧美 | 精品国产一区二区三区久久久久久 | 亚洲v欧美v国产v在线观看 | 国产高清一级 | 中日韩在线 | 免费一区在线 | 亚洲狠狠婷婷 | 99高清视频有精品视频 | 97视频在线| 成人在线播放av | 91九色蝌蚪视频网站 | 99久久精品久久久久久清纯 | 91激情 | 91插插视频| 中文字幕日韩电影 | 久久国产精品久久久久 | 免费a级毛片在线看 | 狠狠色丁香婷婷综合最新地址 | 麻豆精品在线 | 亚洲 欧美 国产 va在线影院 | 欧美日韩国产一区二区在线观看 | 亚洲一区久久 | 91av原创 | 日日干干| 日韩午夜精品福利 | 日本中文字幕在线一区 | 中文字幕 第二区 | 久久久久久久久久久免费 | 超碰日韩在线 | 免费91在线观看 | 中文字幕日韩高清 | 国产成人精品999 | 久草网在线观看 | 亚洲免费成人av电影 | 久久久久久久免费 | 精品国产一二三 | 欧美在线观看视频 | 最近av在线 | 天天插日日射 | 亚洲成人xxx | 国产手机免费视频 | 黄av资源| 日韩在线观看高清 | av超碰在线 | 久久久久国产精品一区二区 | 亚洲人片在线观看 | 国产精品美女久久久久久网站 | 久久毛片网 | 国产福利91精品张津瑜 | 国产视频欧美视频 | 波多野结衣在线中文字幕 | 亚洲免费av片 | 国产精品久久嫩一区二区免费 | 国产高清无av久久 | 久久综合在线 | av中文国产 | 亚洲午夜精品一区 | 五月天婷婷免费视频 | 久久午夜精品影院一区 | 久久久免费观看 | 国产 欧美 日本 | 婷婷福利影院 | 极品久久久 | 国产精品理论片在线播放 | 久久精品一 | 国产区欧美 | 日韩av高清 | 国产午夜三级一区二区三 | 亚洲精品视频二区 | 在线观看韩日电影免费 | 亚洲欧洲国产视频 | 伊人婷婷网 | 久久亚洲欧美日韩精品专区 | 久久久午夜精品理论片中文字幕 | 欧美精品国产综合久久 | 99热这里只有精品免费 | 99人久久精品视频最新地址 | 精品亚洲欧美一区 | 亚洲 在线 | 天堂av网站| 在线黄色免费av | 中文字幕之中文字幕 | 日日夜夜操操操操 | 91在线欧美 | 色悠悠久久综合 | 亚洲五月激情 | 国产精品成人久久久久久久 | 九九在线视频 | 欧美日韩一区二区在线观看 | 欧美日韩视频免费看 | 久久免费高清 | 午夜12点| 国产精品午夜在线 | 999久久国产精品免费观看网站 | 久久精品理论 | 人人艹人人 | 午夜私人影院久久久久 | 亚洲精品999| 一级黄色av | 国产精品久久久久一区二区三区 | 五月精品 | 国产亚洲视频在线免费观看 | 免费黄色网址网站 | 丁香六月伊人 | 欧美在线视频不卡 | 国产视频观看 | 久久久午夜精品理论片中文字幕 | 午夜在线免费观看 | 日本久久久影视 | 国产高清视频免费最新在线 | 亚洲精品一区二区三区新线路 | 色婷婷久久久综合中文字幕 | 麻豆 free xxxx movies hd | 三级黄色三级 | 五月激情久久 | 国产高清一区二区 | 99国产一区二区三精品乱码 | 久久精品一区二区三区中文字幕 | 精品久久久久免费极品大片 | 欧美射射射| avav99| 亚洲精品综合欧美二区变态 | 色婷婷视频网 | 色.com| 五月天伊人 | 亚洲 欧美 日韩 综合 | 日韩av电影网站在线观看 | 深夜免费福利在线 | 国产精品久久久久久欧美 | 亚洲成人资源在线 | 一区三区视频在线观看 | 在线播放日韩av | 中国成人一区 | 欧美色婷| 福利视频导航网址 | 久久免费激情视频 | 久久看片| 在线观看aa | av高清影院 | 日批视频在线 | 成人黄色片在线播放 | 亚洲欧美国产视频 | 在线观看亚洲a | 亚洲男模gay裸体gay | 中国一级片在线观看 | 99婷婷狠狠成为人免费视频 | 92精品国产成人观看免费 | 亚洲精品国产品国语在线 | 色播六月天 | 久久99爱视频 | 欧日韩在线 | 99高清视频有精品视频 | 久久在线| 国产亚洲成av人片在线观看桃 | 99这里都是精品 | 91精品国产福利在线观看 | 国产五月色婷婷六月丁香视频 | 伊人www22综合色 | 国产无区一区二区三麻豆 | 国产精品igao视频网网址 | 久久精品官网 | 精品国产免费一区二区三区五区 | 99精品欧美一区二区蜜桃免费 | 国产麻豆视频 | 天天操天天射天天添 | 香蕉视频在线免费 | 在线观看亚洲专区 | 欧美一级久久 | 国产一级高清视频 | 99久久精品免费一区 | 精品日韩av| www.天天操 | 在线免费观看麻豆 | 亚洲视频 一区 | 人人艹视频 | 国产专区在线视频 | 973理论片235影院9 | 国产精品av一区二区 | 九九热精品国产 | av中文字幕网| 在线一区二区三区 | 麻豆视频网址 | 国产精品综合av一区二区国产馆 | 9999亚洲| 91av视频免费在线观看 | 黄色小说免费观看 | 水蜜桃亚洲一二三四在线 | 久久人网 | 亚洲另类视频在线 | 午夜影院一级片 | 久久精品亚洲一区二区三区观看模式 | 9i看片成人免费看片 | 色婷婷导航 | 日韩av进入 | 婷婷在线网 | 一二区精品 | 欧美日高清视频 | 国产拍揄自揄精品视频麻豆 | 亚州视频在线 | 人人爽人人 | 国产精品18久久久久久久久久久久 | 国产高清视频在线观看 | 欧美性久久久久久 | 亚洲免费公开视频 | 日韩黄色免费看 | 精品亚洲在线 | 2019天天干天天色 | 99产精品成人啪免费网站 | 97视频在线观看视频免费视频 | 色婷婷成人网 | 天天操天天干天天摸 | 久久婷亚洲五月一区天天躁 | 99在线观看免费视频精品观看 | 99色在线| 97电影在线观看 | 久久久激情网 | 免费观看成人av | 久久你懂的 | 丁香激情综合国产 | www黄色av| 久艹视频在线观看 | 国产精品久久久久久超碰 | 欧美久久久久久 | 亚洲成人av在线播放 | 伊人午夜 | 激情综合啪 | 美女网站在线观看 | 国产精品18久久久久久不卡孕妇 | 亚洲天堂在线观看完整版 | 三级黄色a | 国产亚洲精品久久久久久久久久 | 婷婷久久亚洲 | 久热电影 | 在线日本看片免费人成视久网 | 97免费在线视频 | 91精品国产99久久久久久红楼 | 欧美一区在线观看视频 | 成人在线观看你懂的 | 亚洲欧洲精品一区二区 | 国产电影黄色av | 日韩在线电影一区 | 二区视频在线观看 | 日韩av影视| 色91在线 | 在线影视 一区 二区 三区 | 17videosex性欧美 | av三级在线免费观看 | 亚洲影音先锋 | 亚洲丁香久久久 | 视频一区二区视频 | 欧美色图30p | 色国产精品 | 国产馆在线播放 | 久草视频视频在线播放 | 日日干天天 | 日韩精品一区二区三区在线播放 | 亚洲精品在线观看中文字幕 | 国产99视频在线观看 | www天天操| 国产视 | 国产97碰免费视频 | 婷婷av电影| 亚洲国产精品电影 | 人人爽人人看 | 999电影免费在线观看 | 欧美精品在线观看一区 | 91在线小视频 | 久久99在线视频 | 美女免费电影 | 久久久天天操 | 国产精品一区二区久久久久 | 很黄很黄的网站免费的 | 亚洲乱码精品久久久 | 免费a网 | 国产视频1 | 亚洲第二色 | 99视频在线免费播放 | 欧美日本啪啪无遮挡网站 | 欧美日韩中文另类 | 久久久午夜精品福利内容 | 午夜精品电影一区二区在线 | 精品国产区 | 波多野结衣在线观看一区二区三区 | 久久狠狠亚洲综合 | 91亚洲视频在线观看 | 999电影免费在线观看 | 国产精品毛片一区二区在线看 | 久久久久久久久久久免费av | 久久精品一区二区三区视频 | 亚洲综合视频在线观看 | 高清不卡一区二区在线 | 亚洲精品视频免费观看 | 狠狠色丁香久久婷婷综合五月 | 亚洲精品麻豆视频 | 成年人黄色免费视频 | 91大片网站 | 国色天香永久免费 | 久久精品一区 | 黄色一级动作片 | 久久久国产99久久国产一 | 天天天干夜夜夜操 | 777奇米四色 | 国语自产偷拍精品视频偷 | 五月天天av | 精品一区二区三区久久久 | 一级黄色片网站 | 久草网首页| 99精品亚洲 | 97超碰人人澡人人 | 黄色在线免费观看网址 | 中文字幕一区二区三区在线视频 | 亚洲狠狠操 | 久久成人一区 | 丁香婷婷基地 | 国产黄色精品网站 | 久久综合久久综合这里只有精品 | 久久天天躁夜夜躁狠狠85麻豆 | 五月激情在线 | 国产中文字幕视频在线观看 | 四虎www com| 国产免费不卡 | 91精品久久久久久久久久久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 中文字幕在线观看资源 | 手机在线观看国产精品 | 中文字幕91视频 | 日日夜夜免费精品视频 | 奇米影视777四色米奇影院 | 四虎影视成人永久免费观看亚洲欧美 | 一区二区三区三区在线 | 麻花天美星空视频 | 黄污视频网站 | 蜜臀久久99静品久久久久久 | 美女福利视频在线 | av高清网站在线观看 | 欧美极品xxx | 黄色一集片 | www国产精品com | 欧美色图88 | 91视频啪| 亚洲播播 | av免费片 | 国产婷婷久久 | 中文字幕av免费在线观看 | 黄色视屏在线免费观看 | 偷拍精偷拍精品欧洲亚洲网站 | 久久久精品免费看 | 国产99区| 日韩精品不卡 | 日韩在线理论 | 色偷偷人人澡久久超碰69 | 亚洲欧美激情精品一区二区 | 日韩精品视频第一页 | 99九九热只有国产精品 | 狠狠gao | 亚洲精品免费在线视频 | 97综合在线 | 国产精品12 | 激情欧美一区二区免费视频 | 精品在线视频播放 | 亚洲天堂香蕉 | 国产99一区二区 | 天天鲁一鲁摸一摸爽一爽 | 久久精品视频日本 | 欧美性生交大片免网 | 中文字幕日韩伦理 | 色小说在线 | 国产护士hd高朝护士1 | 久久精品中文 | 精品伊人久久久 | 日韩免费不卡视频 | 国产日产av | av网站地址 | 天天综合网 天天综合色 | 免费大片黄在线 | 91在线视频一区 | 91精品国产高清自在线观看 | 四虎成人网 | 99免费观看视频 | 婷婷丁香色 | 欧美日韩伦理在线 | 中文字幕免费高清av | 久久婷婷精品视频 | 久久免费国产电影 | 亚洲精品国偷拍自产在线观看蜜桃 | 色视频成人在线观看免 | 在线观看中文字幕视频 | 黄色小网站在线 | 精品一区二区三区久久 | 欧美亚洲免费在线一区 | 亚洲欧美视频在线 | 九九99视频| av在线a| 黄色午夜| 久久女同性恋中文字幕 | 欧美一区二区免费在线观看 | 综合色影院 | 国产一区免费看 | 在线a视频 | 成年人免费在线看 |