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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

U-Boot 之五 详解 U-Boot 及 SPL 的启动流程

發布時間:2024/10/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 U-Boot 之五 详解 U-Boot 及 SPL 的启动流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??在之前的博文 Linux 之八 完整嵌入式 Linux 環境介紹及搭建過程詳解 中我們說了要一步步搭建整個嵌入式 Linux 運行環境,今天繼續介紹 U-Boot 相關的內容。我所使用的硬件平臺及整個要搭建的嵌入式 Linux 環境見博文 Linux 之八 完整嵌入式 Linux 環境介紹及搭建過程詳解,沒有特殊說明都是在以上環境中進行驗證的,就不過多說明了。

??這篇博文我們僅僅關注啟動過程本身,想要吃透 U-Boot,有太多東西需要學習!最開始我想放到一篇文章中,寫著寫著內容越來越多,最終超過了 CSDN 編輯器的限制。。。最終決定把內容拆分成多篇文章。你可能需要:

  • U-Boot 之一 零基礎編譯 U-Boot 過程詳解 及 編譯后的使用說明
  • U-Boot 之二 詳解使用 eclipse + J-Link 進行編譯及在線調試
  • U-Boot 之三 U-Boot 源碼文件解析及移植過程詳解
  • U-Boot 之四 U-Boot 之四 U-Boot 之四 構建過程(Kconfig 配置 + Kbuild 編譯)詳解
  • SPL

    ??SPL 即 Secondary Program Loader 的縮寫,中文就是第二段程序加載器。這里的第二段程序其實就是指的 U-Boot,也就是,SPL 是第一段程序,優先執行,然后他再去加載 U-Boot。

    ??這里有一點需要注意,一般 MCU 內部還有個固化的引導程序,這個固化的 BootLoader 我在博文 STM32 之十四 System Memory、Bootloader 中有過詳細的介紹。這段程序的會初始化部分外設以與外部通信,具體可以參考官方手冊。在引入了 SPL 之后,整個啟動過程就是如下所示:

    ??在 U-Boot 源碼中,啟動過程沒有完全單獨出 SPL 的代碼,而是復用了大量 U-Boot 里面的代碼。在代碼中,通過宏 CONFIG_SPL_XXX 來進行區分。因此,SPL 的啟動 與 U-Boot 的啟動流程是一樣的(但是所具體實現的功能是不一樣的),下面我們來介紹一下 U-Boot 啟動過程。

    啟動流程

    ??我們可以將 U-Boot 的啟動過程劃分為兩個階段:芯片初始化板級初始化。芯片初始化階段的代碼主要是位于 ./arch/架構/cpu 目錄下,其中再根據架構的不同來區分,主要以匯編語言為主,下圖展示了 ./arch 目錄的基本介紹;

    板級初始化階段的代碼主要位于 ./arch/lib、 ./arch/mach-xxx、./board 目錄下,代碼也逐漸由匯編語言過度到 C 語言了。當然這兩個階段都可能引用一些公共的代碼(例如平臺無關的頭文件)。./board 目錄基本就是按照廠商來組織(例如 ST),同一廠家的開發板放在同一個目錄下。

    ??U-Boot 源碼文件眾多,我們如何知道最開始的啟動文件(程序入口)是哪個呢?這就需要查看 .\arch\arm\cpu 目錄下的 u-boot.lds 文件了(對于 SPL/TPL 對應的就是 .\arch\arm\cpu\u-boot-spl.lds 文件)。.lds 是連接腳本文件,它描述了如何生成最終的二進制文件,其中就包含程序入口。例如,在 u-boot.lds 文件中我們可以看到如下代碼:

    OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { #ifndef CONFIG_CMDLINE/DISCARD/ : { *(.u_boot_list_2_cmd_*) } #endif// 省略一部分. = 0x00000000;. = ALIGN(4);.text :{*(.__image_copy_start)*(.vectors)CPUDIR/start.o (.text*)}
  • 在部分 .\arch\arm\mach-xxx 目錄下面也有 u-boot-spl.lds,這個一般就是針對那些比較特殊的架構單獨實現的連接腳本。在編譯過程中,會通過 CONFIG_SYS_LDSCRIPT=xxxx 來執行這個特殊的腳本文件,如果不指定默認采用.\arch\arm\cpu\u-boot-spl.lds 文件。
  • u-boot.lds 文件也同上的說明可能有多個。
  • ??從上面的代碼可以看到,ENTRY(_start) 表示最終可執行程序的入口是 _start。第一個節的開始定義了一個名為 __image_copy_start 的符號,它的定義位于 ./arch/arm/lib/sections.c 中:char __image_copy_start[0] __section(".__image_copy_start"); 它僅僅就是個符號,不包含任何內容;接下來就是 vectors,它的定義位于 ./arch/arm/lib/vectors_m.S 中(針對我使用的 STM32F7 這個 ARM 核),這個其實就是 ARM 核中斷向量表。

    .section .vectors ENTRY(_start).long CONFIG_SYS_INIT_SP_ADDR @ 0 - Reset stack pointer.long reset @ 1 - Reset.long __invalid_entry @ 2 - NMI.long __hard_fault_entry @ 3 - HardFault.long __mm_fault_entry @ 4 - MemManage.long __bus_fault_entry @ 5 - BusFault.long __usage_fault_entry @ 6 - UsageFault.long __invalid_entry @ 7 - Reserved.long __invalid_entry @ 8 - Reserved.long __invalid_entry @ 9 - Reserved.long __invalid_entry @ 10 - Reserved.long __invalid_entry @ 11 - SVCall.long __invalid_entry @ 12 - Debug Monitor.long __invalid_entry @ 13 - Reserved.long __invalid_entry @ 14 - PendSV.long __invalid_entry @ 15 - SysTick.rept 255 - 16.long __invalid_entry @ 16..255 - External Interrupts.endr

    熟悉 ARM 平臺的應該知道,它的入口就是中斷向量表。因此,_start 也是定義在這里的。接下來我們以比較簡單的 u-boot-spl.lds 為例,來完整解析一下連接腳本:

    /* SPDX-License-Identifier: GPL-2.0+ */ /** Copyright (c) 2004-2008 Texas Instruments** (C) Copyright 2002* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>*//* 指定輸出可執行文件: "elf32 位小端格式" */ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /* 指定輸出可執行文件的目標架構:"arm" */ OUTPUT_ARCH(arm) /* 指定輸出可執行文件的入口地址(起始代碼段):"_start" */ ENTRY(_start) SECTIONS {/* * 設置 0 的原因是 arm 內核的處理器,上電后默認是從 0x00000000 處啟動* 1. stm32 片內的 nor-flash 起始地址是0x08000000,上電后,系統會自動將該地址(0x08000000) 映射到 0x00000000(硬件設計實現)*/. = 0x00000000;/* * 代碼以 4 字節對齊 .text為代碼段* 各個段按先后順序依次排列 * ARM規定在 cortex-m 的內核中,鏡像入口處首地址存放的是主堆棧的地址,其次是復位中斷地址,再其后依次存放其他中斷地址* 更詳細的啟動過程可以參見我之前的博文:ARM 之九 Cortex-M/R 內核啟動過程 / 程序啟動流程(基于ARMCC、Keil)*/. = ALIGN(4);.text :{__image_copy_start = .; /* u-boot 的設計中需要將 u-boot 的鏡像拷貝到ram(sdram,ddr....)中執行,這里表示復制的開始地址 */*(.vectors) /* 中斷向量表 */CPUDIR/start.o (.text*) /* CPUDIR/start.o中的所有.text段 */*(.text*) /* 其他.o中的所有.text 段 */*(.glue*) /* 其他.o中的所有.glue 段 */}/* * .rodata 段,確保是以4字節對齊 */. = ALIGN(4); .rodata : {*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } /* 按名稱依次存放其他 .o 文件中的.rodata *//* * data段,確保是以4字節對齊*/. = ALIGN(4); .data : {*(.data*) }/* * u_boot_list 段,確保是以4字節對齊 * 這里存放的都是 u_boot_list 中的函數* 例如:base/bdinfo/blkcache/cmp....* 具體的可參看./u-boot.map .u_boot_list* tips:要想優化編譯出來的 u-boot.bin 大小,可以參看此文件進行對照裁剪*/. = ALIGN(4);.u_boot_list : {KEEP(*(SORT(.u_boot_list*)));}/* * binman_sym_table 段,確保是以 4 字節對齊* binman 實現的功能是讓 c 代碼通過 binman_* 的函數接口字節調用鏡像中的個別函數* 具體可參看 binman_sym.h 中的接口*/. = ALIGN(4);.binman_sym_table : {__binman_sym_start = .;KEEP(*(SORT(.binman_sym*)));__binman_sym_end = .;}/* * __image_copy_end 也是個符號表示一個結束地址,確保是以4字節對齊 */. = ALIGN(4);__image_copy_end = .; /* u-boot 的設計中需要將 u-boot 的鏡像拷貝到ram(sdram,ddr....)中執行,這里表示復制的結束地址 */.rel.dyn : {__rel_dyn_start = .;*(.rel*)__rel_dyn_end = .;}.end :{*(.__end)}_image_binary_end = .; /* bin文件結束 */.bss __rel_dyn_start (OVERLAY) : {__bss_start = .;*(.bss*). = ALIGN(4);__bss_end = .;}__bss_size = __bss_end - __bss_start;.dynsym _image_binary_end : {*(.dynsym) }.dynbss : {*(.dynbss) }.dynstr : {*(.dynstr*) }.dynamic : {*(.dynamic*) }.hash : {*(.hash*) }.plt : {*(.plt*) }.interp : {*(.interp*) }.gnu : {*(.gnu*) }.ARM.exidx : {*(.ARM.exidx*) } } /* 下面就是檢查一些限制 */ #if defined(CONFIG_SPL_MAX_SIZE) ASSERT(__image_copy_end - __image_copy_start < (CONFIG_SPL_MAX_SIZE), \"SPL image too big"); #endif#if defined(CONFIG_SPL_BSS_MAX_SIZE) ASSERT(__bss_end - __bss_start < (CONFIG_SPL_BSS_MAX_SIZE), \"SPL image BSS too big"); #endif#if defined(CONFIG_SPL_MAX_FOOTPRINT) ASSERT(__bss_end - _start < (CONFIG_SPL_MAX_FOOTPRINT), \"SPL image plus BSS too big"); #endif

    ??這里有一點需要注意,SPL/TPL 與 U-Boot 采用的部分接口是一樣的,但是具體實現并不在同一文件中。也就是說,對于同一函數,SPL/TPL 與 U-Boot 在不同的文件中有不同的實現(下面啟動過程章節分別說明)。SPL/TPL 的代碼是分散在源碼目錄的各個文件夾下的,那么我們如何知道 SPL/TPL 具體使用了哪些源代碼文件呢?

    ??一個比較簡單的方法是:SPL 的編譯過程產生的文件會單獨放到 SPL 目錄下,TPL 的編譯過程產生的文件會單獨放到 TPL 目錄下,我們可以直接查看編譯后的 SPL 或者 TPL 文件夾,其中的內容也是按照源碼目錄組織的。SPL 編譯產生的文件(剔除了部分文件)如下所示:

    SPL ├── arch │ └── arm │ ├── cpu │ │ ├── armv7m │ │ │ ├── built-in.o │ │ │ ├── cache.o │ │ │ ├── cpu.o │ │ │ ├── mpu.o │ │ │ └── start.o │ │ └── built-in.o │ ├── lib │ │ ├── ashldi3.o │ │ ├── ashrdi3.o │ │ ├── asm-offsets.s │ │ ├── bdinfo.o │ │ ├── bootm-fdt.o │ │ ├── built-in.o │ │ ├── cache.o │ │ ├── crt0.o │ │ ├── div0.o │ │ ├── div64.o │ │ ├── eabi_compat.o │ │ ├── interrupts_m.o │ │ ├── lib1funcs.o │ │ ├── lib.a │ │ ├── lshrdi3.o │ │ ├── memcpy.o │ │ ├── memset.o │ │ ├── muldi3.o │ │ ├── psci-dt.o │ │ ├── reset.o │ │ ├── sections.o │ │ ├── setjmp.o │ │ ├── spl.o │ │ ├── stack.o │ │ ├── uldivmod.o │ │ ├── vectors_m.o │ │ ├── zimage.o │ └── mach-stm32 │ ├── built-in.o │ ├── soc.o ├── board │ └── st │ ├── common │ │ └── built-in.o │ └── stm32f746-disco │ ├── built-in.o │ ├── stm32f746-disco.o ├── boot │ ├── built-in.o │ ├── image-board.o │ ├── image-fdt.o │ ├── image.o ├── cmd │ ├── built-in.o │ ├── nvedit.o ├── common │ ├── built-in.o │ ├── cli.o │ ├── command.o │ ├── console.o │ ├── dlmalloc.o │ ├── fdt_support.o │ ├── init │ │ ├── board_init.o │ │ └── built-in.o │ ├── malloc_simple.o │ ├── memsize.o │ ├── spl │ │ ├── built-in.o │ │ ├── spl_legacy.o │ │ ├── spl.o │ │ ├── spl_xip.o │ ├── s_record.o │ ├── stdio.o │ ├── xyzModem.o ├── disk │ ├── built-in.o │ ├── part.o ├── drivers │ ├── block │ │ ├── blk_legacy.o │ │ └── built-in.o │ ├── built-in.o │ ├── clk │ │ ├── analogbits │ │ │ └── built-in.o │ │ ├── built-in.o │ │ ├── clk_fixed_factor.o │ │ ├── clk_fixed_rate.o │ │ ├── clk_stm32f.o │ │ ├── clk-uclass.o │ │ ├── imx │ │ │ └── built-in.o │ │ ├── tegra │ │ │ └── built-in.o │ │ └── ti │ │ └── built-in.o │ ├── core │ │ ├── built-in.o │ │ ├── device.o │ │ ├── dump.o │ │ ├── fdtaddr.o │ │ ├── lists.o │ │ ├── of_extra.o │ │ ├── ofnode.o │ │ ├── read_extra.o │ │ ├── root.o │ │ ├── simple-bus.o │ │ ├── uclass.o │ │ ├── util.o │ ├── gpio │ │ ├── built-in.o │ │ ├── gpio-uclass.o │ │ ├── stm32_gpio.o │ ├── misc │ │ ├── built-in.o │ │ ├── misc-uclass.o │ │ ├── stm32_rcc.o │ ├── mtd │ │ ├── built-in.o │ │ ├── mtdcore.o │ │ ├── mtd.o │ │ ├── mtd_uboot.o │ │ ├── mtd-uclass.o │ │ ├── stm32_flash.o │ ├── pinctrl │ │ ├── broadcom │ │ │ └── built-in.o │ │ ├── built-in.o │ │ ├── nxp │ │ │ └── built-in.o │ │ ├── pinctrl_stm32.o │ │ ├── pinctrl-uclass.o │ ├── ram │ │ ├── built-in.o │ │ ├── ram-uclass.o │ │ ├── stm32_sdram.o │ ├── reset │ │ ├── built-in.o │ │ ├── reset-uclass.o │ │ ├── stm32-reset.o │ ├── serial │ │ ├── built-in.o │ │ ├── serial_stm32.o │ │ ├── serial-uclass.o │ ├── soc │ │ └── built-in.o │ └── timer │ ├── built-in.o │ ├── stm32_timer.o │ ├── timer-uclass.o ├── dts │ ├── built-in.o │ └── dt-spl.dtb ├── env │ └── built-in.o ├── fs │ ├── built-in.o │ ├── fs_internal.o ├── include │ ├── autoconf.mk │ └── generated │ ├── asm-offsets.h │ └── generic-asm-offsets.h ├── lib │ ├── abuf.o │ ├── asm-offsets.s │ ├── built-in.o │ ├── crc32.o │ ├── ctype.o │ ├── date.o │ ├── display_options.o │ ├── div64.o │ ├── elf.o │ ├── errno.o │ ├── fdtdec_common.o │ ├── fdtdec.o │ ├── hang.o │ ├── hash-checksum.o │ ├── hashtable.o │ ├── hexdump.o │ ├── libfdt │ │ ├── built-in.o │ │ ├── fdt_addresses.o │ │ ├── fdt_empty_tree.o │ │ ├── fdt.o │ │ ├── fdt_overlay.o │ │ ├── fdt_ro.o │ │ ├── fdt_rw.o │ │ ├── fdt_strerror.o │ │ ├── fdt_sw.o │ │ ├── fdt_wip.o │ ├── linux_compat.o │ ├── linux_string.o │ ├── lmb.o │ ├── membuff.o │ ├── net_utils.o │ ├── panic.o │ ├── qsort.o │ ├── rand.o │ ├── rtc-lib.o │ ├── slre.o │ ├── string.o │ ├── strto.o │ ├── tables_csum.o │ ├── time.o │ ├── tiny-printf.o │ ├── uuid.o ├── u-boot.cfg ├── u-boot-spl ├── u-boot-spl.bin ├── u-boot-spl.dtb ├── u-boot-spl-dtb.bin ├── u-boot-spl.lds ├── u-boot-spl.map ├── u-boot-spl-nodtb.bin ├── u-boot-spl-pad.bin └── u-boot-spl.sym

    從中的 .o 文件我們就可以清除的知道 SPL 使用了那些源代碼文件了。U-Boot 本身的編譯默認并沒有一個統一的目錄,產生的中間文件都是直接放到與源文件統一目錄下的。

    ??當然我們可以在使用 make 命令時指定 O=xxx (例如,make O=/tmp/build canyonlands_config,每個命令都需要指定)參數來指定配置及編譯輸出的位置。例如 make O=build stm32f769-disco_defconfig 就會把配置生成的文件放到 ./build 目錄下,再例如最終編譯命令:CROSS_COMPILE=arm=none=eabi- ARC=arm make O=build -j8。關于構建及配置我們后面單獨說明。

    芯片初始化階段

    ??這里就以我使用的 STM32F769 這個 MCU 為例來說明一下,該 MCU 是 ARM 核心,指令集架構是 armv7m,因此,我的開發板使用的芯片初始化使用的具體代碼就是 ./arch/arm/cpu/armv7m 下的各代碼。那么具體是哪個文件呢?

    ??前面說過,ARM 架構要求,中斷向量表,開頭依次是 SP 地址,復位中斷地址,其他中斷地址。獲取 SP 后,從復位中斷開始執行。看中斷向量表,給出了 reset 這個符號,那么我們就需要找到 reset 這個符號。再看看目錄中,正好有個 start.S 的文件里就定義了 reset 符號,那么毫無疑問就是它了。

    ?? 然而,當我自信滿滿的打開 start.S 時卻發現,其中的代碼極其少,對比了一下 armv7 以及 armv8 目錄下的 start.S ,完全就不是一個級別!具體如下圖對比所示:

    ??首先,我們可以確認的是,U-Boot 是支持 armv7m 指令集架構的 CPU 的(根據后面對于源代碼的研究,好多功能是不可用的)。至于為什么代碼這么少,我也不是很清楚。我們就通過對比的方法并結合 U-Boot 的手冊來重點關注一下他們的共同點:

  • 他們的開頭都是直接從 reset 符號下的代碼開始執行的(Cortex-M 內核規定)。啟動過程中的函數調用如下(忽略在某些宏定義成立時的調用)所示:

  • armv8: reset -> save_boot_params -> save_boot_params_ret -> apply_core_errata -> lowlevel_init -> _main
  • armv7: reset -> save_boot_params -> save_boot_params_ret -> cpu_init_crit -> lowlevel_init -> _main
  • armv7m: reset -> _main
  • 其中,save_boot_params 是個弱函數,意味著如果需要,我們可以通過自定義同名函數來替代該函數。lowlevel_init() 這個函數定義在 lowlevel_init.S 這個文件中,官方手冊中有詳細說明具體用途:

    • 來做一些基本的初始化,以使 MCU可以運行到 board_init_f()
    • 沒有全局數據或 BSS
    • 沒有堆棧(ARMv7 可能有一個,但很快會被移除)
    • 不能設置 SDRAM 或使用控制臺
    • 必須僅做最少的事,只要能運行到 board_init_f() 即可
    • 可以不需要它
  • 他們都定義了一個名為 c_runtime_cpu_setup 符號,并導出為了全局符號,只是該符號內部代碼有所不同。但是,該符號均沒有在本文件中調用。

  • 他們經過一些列執行后,最終都會跳轉到 _main,下文我們單獨詳細來介紹 _main。

  • 至于目錄下的其他 .s 和 .c 文件,其中都是定義一些供外部使用的接口。

  • _main

    ??_main 這個符號定義在 ./arch/arm/lib/crt0.S 文件中。crt0 是 C-runtime Startup Code 的簡稱,主要就是用來準備 C 運行環境。下圖是 _main 的函數調用關系(忽略部分宏值條件,順序先后為從上到下):

    接下來我們在分析一下 _main 的具體功能:

  • 為調用 board_init_f() 初始化基本環境。這個環境只提供一個棧和一個存儲 GD(Global Data,全局數據)數據結構的地方,兩者都位于一些現成的 RAM (SRAM,鎖定的緩存……)中。在這種情況下,全局變量無論是否初始化,都是不可用的,只有初始化的常量數據可用。在調用 board_init_f() 之前,全局數據應該清零。

    ??代碼一開始就是設置棧指針的位置,宏 CONFIG_SPL_STACK / CONFIG_TPL_STACK / CONFIG_SYS_INIT_SP_ADDR 會在 .\include\configs\使用的開發板.h 中定義(例如,我這里對應的是 stm32f746-disco.h)。
    ??注意,GD 的數據結構定義在 include\asm-generic\global_data.h 中的 global_data,然后又使用 typedef struct global_data gd_t 進行了重定義。而 gd 這個符號定義在 arch\x86\include\asm\global_data.h 中,如下所示:

    由此可見,gd 就是一個 gd_t 類型的地址(指針)。經過上面的一番操作之后,內存數據就如下所示了:

    r9 存放的就是 gd 的地址。
  • 調用 board_init_f()。對于 SPL,board_init_f() 是定義在 .\common\spl\spl.c 中;對于 U-Boot,board_init_f() 是定義在 .\common\board_f.c 中。該函數為從系統 RAM (DRAM, DDR…)執行硬件做準備。由于系統 RAM 可能還不可用,因此 board_init_f() 必須使用當前 GD 來存儲必須傳遞到以后階段的任何數據。這些數據包括重定位目的地地址、未來棧和未來的 GD 位置。
  • 設置中間環境,其中棧和 GD 是由 board_init_f() 在系統 RAM 中分配的,但 BSS 和初始化的非 const 數據仍然不可用。對于 U-Boot(非 SPL),調用 relocate_code()。這個函數將 U-Boot 從當前位置重定位到由 board_init_f() 計算的重定位位置; 對于 SPL,board_init_f() 直接返回(到 crt0)。在 SPL中沒有代碼重定位,因此不需要調用 relocate_code()。

    ??relocate_code() 定義在 .\arch\arm\lib\relocate.S 中。函數原型:void relocate_code(addr_moni)在進行了代碼重定位之后,中斷向量表也是需要重定位的。這里需要注意的是,在代碼重定位完成之后,后續執行就開始執行重定位之后的代碼了。因此,這部分代碼中有計算重定位之后的 here 位置。
    ??對于 U-Boot(非 SPL),一些 cpu 在內存方面還有一些工作要做,所以調用 c_runtime_cpu_setup。c_runtime_cpu_setup 就定義在我們的起始文件 start.S 中,很多芯片的實現就是空的,沒啥內容。
  • 為調用 board_init_r() 設置最終環境。這個環境有 BSS(初始化為 0),初始化為非 const 數據(初始化為預期值),以及系統 RAM 中的棧(對于 SPL 來說,將棧和 GD 移動到 RAM 是可選的)。GD 保留了 board_init_f() 設置的值。最終的內存如下所示:
  • 調用 board_init_r()。對于 SPL,board_init_r() 是定義在 .\common\spl\spl.c 中;對于 U-Boot,board_init_r() 是定義在 .\common\board_r.c 中。
  • 板級初始化階段

    ??在上面對于 _main 的分析中,我們可以看到,其中調用了很多 board_ 開頭的函數。這部分函數主要位于 ./common 目錄下。同時需要注意的是,這里指的是 U-Boot 本身,SPL/TPL 的代碼主要位于 .\common\spl\ 目錄下。

    • ./common/init/board_init.c 其中的接口 U-Boot 與 SPL/TPL 共用。
      • ulong board_init_f_alloc_reserve(ulong top):從“top”地址分配預留的空間作為“globals”使用,并返回已分配空間的“bottom”地址。
      • void board_init_f_init_reserve(ulong base):初始化保留的空間(已從 C 運行時環境處理代碼安全地在 C 堆棧上分配)。
    • void board_init_f(ulong boot_flags):為執行 board_init_r 準備環境。在這里,GD 可用、棧在 RAM 中,BSS 不可用(全局變量、靜態變量均不可用)。
      • ./common/board_f.c:U-Boot 使用的接口位于此文件中,調用關系如下圖:

        void board_init_f(ulong boot_flags) 通過遍歷執行 static const init_fnc_t init_sequence_f[] 中定義的各個接口實現各種功能。
      • .\common\spl\spl.c:SPL/TPL 使用的接口位于此文件中,調用關系如下圖:
    • void board_init_r(gd_t *new_gd, ulong dest_addr):開始執行通用代碼。從這里開始,GD 可用、SDRAM 可用、棧在 RAM 中,BSS 可用(全局變量、靜態變量均可用),并最終執行位于 .\common\main.c 中的 void main_loop(void)。
      • ./common/board_r.c

        void board_init_r(gd_t *new_gd, ulong dest_addr) 通過遍歷執行 static init_fnc_t init_sequence_r[] 中定義的各個接口實現各種功能。
      • .\common\spl\spl.c:SPL/TPL 使用的接口位于此文件中,調用關系如下圖:

        load 完鏡像后,默認會去調用 spl_board_prepare_for_boot() 和 jump_to_image_no_args() 跳轉到 U-Boot。至此,u-boot-spl 的流程就走完了,接下來就是走 u-boot 的流程。

    對比其他架構

    ??這里有必要來對比其他架構來一個說明(就以 armv7 架構 ARM CPU 作為對比 )。如果大家去看網上的一些文章,會發現他們的啟動流程和這里的有很大區別,一個典型的啟動流程圖如下所示:

    至于 armv7m 為啥與上面差別這么大,我也還沒搞清楚!

    參考

  • https://askubuntu.com/questions/1243252/how-to-install-arm-none-eabi-gdb-on-ubuntu-20-04-lts-focal-fossa
  • https://james-hui.com/2021/07/02/building-a-small-uboot-linux-and-rootfs-for-arm-cortex-m7/
  • https://www.cnblogs.com/dylancao/p/8621789.html
  • https://wowothink.com/1e031f74/
  • https://blog.csdn.net/linuxweiyh/article/details/99331659
  • https://loee.xyz/2021/04/27/uboot-%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90/
  • https://www.twblogs.net/t/5d26d62ebd9eee1ede06f20d
  • https://mrchen.love/Article/ID/57
  • https://blog.csdn.net/weixin_39890452/article/details/114470827
  • https://www.cnblogs.com/cslunatic/archive/2013/03/28/2986146.html
  • https://wowothink.com/146db8db/
  • https://www.pianshen.com/article/70672050376/
  • https://my.oschina.net/u/4232364/blog/3134261
  • https://adrianalin.gitlab.io/popsblog.me/posts/build-linux-for-stm32f769i-disco-using-buildroot/
  • 總結

    以上是生活随笔為你收集整理的U-Boot 之五 详解 U-Boot 及 SPL 的启动流程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    日韩精品免费一区二区三区 | 亚洲一区精品二人人爽久久 | 成人黄色免费观看 | 日韩综合精品 | 一区二区三区电影大全 | 在线视频 影院 | 欧美一级电影免费观看 | 天天爽人人爽 | 久草a在线| 91在线观看视频 | 色综合久久综合网 | 中文字幕国产在线 | 欧美性粗大hdvideo | 91精品视频免费在线观看 | 日韩最新在线视频 | 久久精品中文字幕一区二区三区 | 最新av网址在线 | 色干综合 | 久久99热这里只有精品国产 | 日韩四虎 | 99视频这里只有 | 亚洲精品国偷拍自产在线观看 | 久久综合给合久久狠狠色 | 手机av片 | 亚洲女人天堂成人av在线 | 日韩在线免费观看视频 | 色综合网| 欧美日韩一区二区三区视频 | 国产精品一区二区三区久久 | 免费av片在线 | 中午字幕在线观看 | 日本高清中文字幕有码在线 | 免费在线观看一区二区三区 | wwwww.国产 | 国产精品美女久久久久久 | 在线视频手机国产 | 一区三区在线欧 | 久久国产成人午夜av影院宅 | 综合色中色 | www免费在线观看 | 日日操日日干 | 色网站国产精品 | 成人av午夜| 午夜91在线 | 国产区免费在线 | 国产最新网站 | 日韩性xxxx | 国产一级免费播放 | 亚洲午夜精 | 久久精品国产免费看久久精品 | 久久这里只有精品9 | 国产精品中文字幕在线观看 | 狠狠色免费 | 成人动漫一区二区三区 | 狠狠躁夜夜av | 亚洲第一中文字幕 | 97**国产露脸精品国产 | 91福利社在线观看 | 久久精品美女视频 | 国产一区国产精品 | 女人高潮一级片 | 国产精品久久久久久久久大全 | 久久亚洲视频 | 欧美一区免费观看 | 福利久久久 | 国产精品va视频 | 97电影网手机版 | 亚洲国产中文字幕在线观看 | 免费观看视频黄 | 久久精品国产亚洲精品 | 99久久国产免费免费 | 草莓视频在线观看免费观看 | 综合黄色网 | 久久99精品久久久久久三级 | 福利网在线 | 97香蕉超级碰碰久久免费软件 | 久久精美视频 | 韩国精品福利一区二区三区 | 中文字幕在线观看第一页 | 久久久久国产精品午夜一区 | 成人免费视频网站在线观看 | 91精品一区在线观看 | 久久黄网站 | 国产日韩精品欧美 | 亚洲精品欧美精品 | 午夜视频在线观看一区二区三区 | 久久久久久久国产精品 | 一区二区三区在线观看 | 中文字幕精品一区二区三区电影 | 国产精品免费观看在线 | 九九热视频在线 | 亚洲成人xxx | 久久综合射 | 亚洲欧洲中文日韩久久av乱码 | 国产午夜精品久久久久久久久久 | 久久精品一区二 | 国产精品亚洲综合久久 | 国产999精品久久久 免费a网站 | 99视频国产精品免费观看 | 丁香激情综合 | 亚洲国产中文字幕在线观看 | 久久久99精品免费观看 | 99热精品久久 | 天天爱天天干天天爽 | 91精品视频在线观看免费 | 特级片免费看 | 狠狠狠干 | 亚洲精品国产精品国自产观看 | 992tv在线观看| 国产精品系列在线观看 | 久久免费高清视频 | 中文字幕免费高清在线观看 | 一区二区精品视频 | 在线中文字母电影观看 | 久久在线视频在线 | 少妇bbw撒尿 | 亚洲精品88欧美一区二区 | 中文字幕大全 | 免费中文字幕视频 | 午夜国产影院 | 午夜10000| 亚洲精品 在线视频 | 亚洲欧美乱综合图片区小说区 | 国产精品完整版 | 免费在线黄色av | 黄色一级大片免费看 | 91视视频在线直接观看在线看网页在线看 | 中文字幕久久久精品 | 在线国产能看的 | 欧美国产亚洲精品久久久8v | 日本视频高清 | 午夜精品一二区 | 成人超碰97| 中文av资源站 | 91精品伦理| 在线影视 一区 二区 三区 | 色网址99| 久久久精品一区二区 | 国产成人精品一区二区三区在线 | 婷婷中文字幕 | 日韩三区在线观看 | 人人草人人草 | 欧美在线18| 国产中文视| 国产资源在线视频 | 久久a视频 | 国产在线v | 欧美成天堂网地址 | 中文字幕亚洲不卡 | 成片视频在线观看 | 2018亚洲男人天堂 | 欧美美女激情18p | 久久国产视频网站 | 久久免费精品一区二区三区 | 国产视频69 | 日韩综合色 | 狠狠色丁香久久综合网 | 超碰在线最新 | 国产黄免费看 | 婷婷色综 | 9色在线视频| www.99在线观看 | 中文字幕在线看视频 | 99在线精品视频在线观看 | 国产麻豆精品传媒av国产下载 | 天天婷婷 | 久久国产二区 | 久久久久国产一区二区三区 | 成人一区二区三区在线观看 | 五月婷婷导航 | 国产精品久久久久9999 | 亚洲热久久 | 在线免费黄色片 | 久草色在线观看 | 人人插人人草 | 成全免费观看视频 | 在线视频 一区二区 | 精品国产aⅴ一区二区三区 在线直播av | 日韩黄视频 | 中文字幕一区二区三区视频 | 午夜久草 | 国产a国产a国产a | 欧美精品久久久久久久久久白贞 | 玖玖在线资源 | 在线观看视频免费大全 | a'aaa级片在线观看 | 午夜视频在线观看欧美 | 少妇高潮冒白浆 | 天天干天天干天天干 | 草久在线视频 | 国产精品久久久久久久99 | 亚洲色图激情文学 | 四虎影视成人永久免费观看亚洲欧美 | 国产精品无av码在线观看 | 国产精品18久久久久久首页狼 | 人人干人人艹 | 天天操天天怕 | 日韩在线中文字幕 | 日韩欧美成人网 | 五月婷久久 | 96香蕉视频| 天天色视频 | 国产成人一区二区三区 | 久久国产一区二区三区 | 黄色三级网站 | 欧美国产精品久久久久久免费 | 视频精品一区二区三区 | 亚洲成人一区 | 在线观看亚洲专区 | 黄色片视频免费 | 久久精品精品电影网 | 亚洲专区免费观看 | 伊人五月在线 | 久久天天躁夜夜躁狠狠85麻豆 | 91专区在线观看 | 免费福利在线视频 | 中文字幕av一区二区三区四区 | 国产成人精品在线播放 | 成 人 a v天堂 | 免费在线观看av | 91视频在线国产 | 韩国一区二区在线观看 | 日韩av高清在线观看 | 免费色视频在线 | 日韩在线观看不卡 | 国产特级毛片aaaaaaa高清 | 成人高清在线 | 99精品视频在线观看视频 | 免费又黄又爽视频 | 国产精品第一视频 | 欧美日韩xxxxx | 99精品在线视频播放 | 韩国精品福利一区二区三区 | 色综合欧洲| 日韩激情免费视频 | 日韩av视屏在线观看 | 天无日天天操天天干 | 国产一级片免费播放 | 久久久久黄| 成年人在线观看免费视频 | 九九热精| 国产成人精品一区二区三区免费 | 91免费网 | 久久亚洲精品电影 | 黄色免费视频在线观看 | 精品视频www | 色婷婷六月 | 婷婷在线资源 | 久久免费精品国产 | 国产在线精品视频 | 色永久免费视频 | 麻豆激情电影 | 久久艹综合 | 午夜精品久久久久久久久久 | 国产视频 亚洲精品 | 精品国产一区二区三区四区在线观看 | 日韩中文字幕一区 | 在线一二三区 | 香蕉免费在线 | 99亚洲国产 | 日本资源中文字幕在线 | 黄色福利网站 | 精品久久久成人 | 欧美一级片免费观看 | 婷婷丁香色 | 国产一区二区视频在线播放 | 久草五月| 国产剧情一区在线 | 色中色亚洲 | 天堂va在线观看 | 国产亚洲高清视频 | 亚洲国产日韩在线 | 激情伊人五月天久久综合 | 天天干天天怕 | 一区二区三区 亚洲 | 成年人黄色免费视频 | 黄色一级影院 | 日韩电影中文字幕在线观看 | 午夜在线国产 | 久久精选视频 | 久久久久国产精品午夜一区 | 三级黄免费看 | 久久久久久久久影视 | 波多野结衣在线视频免费观看 | 中文字幕在线看视频国产中文版 | 97超级碰碰碰视频在线观看 | 亚洲精品网址在线观看 | 米奇四色影视 | 天天艹天天操 | 欧美日韩精品影院 | 在线日韩一区 | 99精品免费久久久久久久久日本 | 中文av不卡 | 99热手机在线观看 | 国产在线一线 | 在线电影日韩 | 国产视频精选 | 成人毛片在线观看 | 啪啪资源 | 国产中文字幕一区 | av黄在线播放 | 二区精品视频 | 欧美小视频在线观看 | 亚洲精品福利在线观看 | 亚洲最新av在线网站 | 久久激情五月丁香伊人 | 五月婷婷香蕉 | 丰满少妇麻豆av | 亚洲黄色免费观看 | 国产一区在线观看免费 | 国产特级毛片aaaaaa毛片 | 国产特级毛片aaaaaa毛片 | 精品亚洲一区二区三区 | 亚洲欧美国内爽妇网 | 欧美综合在线观看 | 在线网址你懂得 | www.福利视频 | 日韩免费三区 | www欧美色| 亚洲精品午夜国产va久久成人 | 黄色a大片 | 久青草影院 | 免费看的黄色片 | 欧美日韩中文字幕视频 | 欧美日韩aa | 麻豆传媒视频在线播放 | 伊人五月天 | 美女免费黄视频网站 | 日本色小说视频 | 永久免费的啪啪网站免费观看浪潮 | 少妇按摩av | 激情网在线观看 | 色a网| 69视频网站 | 在线看一区 | 亚洲欧洲精品一区二区精品久久久 | 成人毛片网 | 精品国产乱码一区二 | 青青啪| 一级黄色视屏 | 又湿又紧又大又爽a视频国产 | 日韩在线观看一区二区 | 久久久麻豆精品一区二区 | 欧美国产日韩一区二区三区 | 久草剧场| 久久精品99国产精品 | 国产美女精品视频 | 午夜天天操 | 日韩在线视频免费观看 | 99热这里只有精品国产首页 | 麻豆久久久 | 国产精品嫩草55av | 久9在线 | 日本激情视频中文字幕 | 久久精品7| 99视频免费播放 | 免费看特级毛片 | 亚洲精品资源在线观看 | 国外调教视频网站 | 日本黄区免费视频观看 | 97爱爱爱| 夜夜躁日日躁狠狠久久av | www.狠狠干| 一区免费观看 | 亚洲aⅴ久久精品 | 精品美女在线视频 | 国产一级片免费视频 | 91九色在线观看 | 免费麻豆 | 久久少妇免费视频 | 国内精品视频在线 | 亚洲va欧美va | 日韩免费在线一区 | 国产精品久久久久久69 | 一区二区不卡视频在线观看 | 国产成人精品亚洲日本在线观看 | 亚洲精品久久久蜜臀下载官网 | 伊人婷婷在线 | 免费av网站在线看 | 亚洲一区天堂 | 免费日韩av片 | 色网站在线免费观看 | 色综合天 | 日韩精品电影在线播放 | 玖玖视频在线 | 三级黄色网络 | 在线免费色视频 | 一区二区三区国产精品 | 91成人看片 | 久久久久97国产 | 欧美精品一级视频 | 亚洲成人精品久久久 | 日韩高清在线看 | 中文字幕 第二区 | 久久久久久久国产精品 | 99精品视频中文字幕 | 性日韩欧美在线视频 | 超碰在线色| 91av电影在线观看 | 欧美 日韩 国产 成人 在线 | 91精品少妇偷拍99 | 在线成人性视频 | 麻豆成人网 | 精品国产一区二区三区四区vr | 国产精品高 | 在线观看你懂的网址 | 人人澡人人添人人爽一区二区 | 国产精品毛片 | 成人黄色电影免费观看 | 中文在线√天堂 | 超碰在线日韩 | 一级欧美黄 | 亚洲精品一区二区三区新线路 | 国产99久久九九精品免费 | 欧美一区二视频在线免费观看 | 久久婷婷色 | 成片免费观看视频大全 | 伊人影院在线观看 | 97精品国产97久久久久久免费 | 欧美va在线观看 | 免费黄色在线网址 | 天天操夜 | 国产精品视频久久久 | 欧美a在线免费观看 | 99国产在线 | 日韩a欧美 | 国产福利久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩欧美国产成人 | 91精品在线免费观看视频 | 最近字幕在线观看第一季 | 91精品久久久久久久久 | 日韩免费小视频 | 一区二区丝袜 | 中文字幕乱在线伦视频中文字幕乱码在线 | 中文国产字幕在线观看 | 欧美久久久久 | 91精品免费在线视频 | 日韩精品在线视频 | 91福利国产在线观看 | 天堂av在线网站 | 久久99国产精品久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日日日日日| 亚洲精品日韩在线观看 | 99久久久国产精品免费99 | 黄色成品视频 | 日韩免费网站 | 色com网 | 18久久久 | 亚洲视频,欧洲视频 | 国产精品18久久久久久久久 | 亚洲精品在线国产 | 五月婷婷激情 | 国产亚洲精品成人av久久ww | 午夜精品一区二区三区在线视频 | 又黄又爽的视频在线观看网站 | 亚洲黄色免费在线看 | 91黄色小网站| 91av视频免费在线观看 | 亚洲天堂精品视频 | 最近日本字幕mv免费观看在线 | 福利视频一二区 | 狠狠的干 | 狠狠干成人综合网 | 亚洲精品观看 | 久久综合久久综合这里只有精品 | 欧美伦理电影一区二区 | 欧美精品国产综合久久 | 97成人在线 | 精品一区二区三区香蕉蜜桃 | 国产精品原创av片国产免费 | 片黄色毛片黄色毛片 | 国产精品麻豆免费版 | 亚洲精品美女久久久 | 亚洲日本欧美在线 | 亚洲韩国一区二区三区 | 日韩精品高清不卡 | 国产精品免费久久久 | 亚洲国产一区在线观看 | 久久99久久精品国产 | www.成人sex | 国产黄色免费 | 欧美精品网站 | 国产成人三级三级三级97 | 国产一级视屏 | 国产精品国产三级国产不产一地 | 日韩欧美xxx | 99免费在线视频观看 | 欧美日韩不卡在线视频 | 成人在线免费看 | 天天操夜夜逼 | 欧美日韩一二三四区 | 国产精品 欧美 日韩 | 97在线视频观看 | 国产九九九视频 | 精品99在线 | 91精品毛片| 亚洲精品国产成人av在线 | www蜜桃视频 | 中文字幕欧美三区 | 日韩视频中文字幕在线观看 | 精品久久国产一区 | 日韩欧美国产精品 | 伊人五月婷 | 中文字幕在线观看完整版 | 麻豆传媒一区二区 | 偷拍精品一区二区三区 | 欧美天堂视频在线 | 欧美日韩国产在线 | 成人av久久 | 六月丁香在线观看 | 天天色棕合合合合合合 | 午夜精品一区二区三区在线视频 | 日韩久久精品一区二区 | 久久精品第一页 | 香蕉网址 | 91成人免费视频 | 久久久久女教师免费一区 | 国产日韩欧美在线一区 | 免费看三片 | 亚洲国产欧美在线看片xxoo | 国产日产精品一区二区三区四区 | 在线观看一区二区视频 | 91av福利视频| 精品毛片一区二区免费看 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国产精品免费人成网站 | 国偷自产中文字幕亚洲手机在线 | 久久神马影院 | 人人澡人人干 | 在线观看va | 国产精品1区2区在线观看 | 日本婷婷色| 不卡视频在线看 | 天天操天天干天天 | 91精彩视频在线观看 | a视频在线播放 | 狠狠网站 | 成人午夜性影院 | 综合久久综合久久 | 91女神的呻吟细腰翘臀美女 | 午夜.dj高清免费观看视频 | 久久久久免费网站 | 九九影视理伦片 | 亚洲成人网av | 国产精品2区 | 激情五月综合网 | 色综合久久综合中文综合网 | 国产精品v欧美精品 | 97在线视频网站 | 亚洲综合日韩在线 | 欧美日韩在线电影 | 午夜av在线 | 国内视频在线 | 日日夜夜综合网 | 日韩免费在线视频 | 欧美性大胆| 国产亚洲精品久久久久久 | av中文字幕网 | 婷五月激情 | 99精品网站 | 亚洲精品久久久蜜臀下载官网 | 国产一区在线观看免费 | 99r在线播放| 中文字幕在线资源 | 久久天堂亚洲 | 国产高清免费 | 亚洲狠狠婷婷综合久久久 | 中文在线8资源库 | 97精品一区二区三区 | 综合色爱| 在线免费黄色片 | 国产一区二区在线免费 | 欧美日韩国产精品一区二区三区 | 色吊丝在线永久观看最新版本 | 99国产在线视频 | 91资源在线免费观看 | 有码中文字幕在线观看 | 91视频在线自拍 | 中文在线天堂资源 | 337p日本欧洲亚洲大胆裸体艺术 | 97超碰中文字幕 | 久久99热国产| 日本成人中文字幕在线观看 | 亚洲另类视频在线观看 | 欧美日韩精品在线视频 | 色鬼综合网| 久久久视屏 | 日本性xxx | 夜又临在线观看 | 超碰人人国产 | 亚洲精品成人av在线 | 久久久国产精品亚洲一区 | 又黄又刺激视频 | 精品一区欧美 | 国产精品高清一区二区三区 | 激情深爱| 97电影在线 | 国产99久久久国产精品免费二区 | av中文字幕在线看 | 一区二区三区高清不卡 | 国产在线观看网站 | 亚洲国产三级在线 | 欧美精品乱码99久久影院 | 97精品国产91久久久久久久 | 福利网址在线观看 | 五月网婷婷| 午夜久久精品 | 久久久免费网站 | 成人av资源在线 | 婷婷在线精品视频 | 日韩伦理片一区二区三区 | 五月激情亚洲 | 国产一区视频在线 | 在线播放一区二区三区 | 国产精品ssss在线亚洲 | 日本午夜免费福利视频 | 婷婷色综 | av免费观看高清 | 日韩中文字幕视频在线 | 国产一级免费播放 | 久久久在线免费观看 | 欧洲不卡av | 91丨九色丨首页 | 激情欧美一区二区三区 | 在线三级播放 | 热re99久久精品国产99热 | 偷拍福利视频一区二区三区 | 成年人免费在线播放 | 婷婷六月网 | 日韩欧美有码在线 | 日本黄色免费网站 | 9999激情| 欧美日韩高清不卡 | 色综合亚洲精品激情狠狠 | 99精品视频网站 | 国产精品高清一区二区三区 | 国产不卡在线播放 | 免费看三级网站 | 国产视频一区二区在线观看 | 人人爱人人添 | 国产精选在线 | 一区二区男女 | 日韩免费视频线观看 | 国产韩国精品一区二区三区 | 99九九热只有国产精品 | 在线有码中文字幕 | 欧美在线视频免费 | 欧美精品乱码久久久久久 | 国产热re99久久6国产精品 | 91传媒在线播放 | 天天爱天天干天天爽 | 亚洲精品乱码久久久一二三 | 色综合色综合色综合 | 99国产高清 | 国产精品影音先锋 | 亚洲国产片| 在线中文字母电影观看 | bbbbb女女女女女bbbbb国产 | 欧美精品久久久久性色 | 日韩女同av | 超碰在线天天 | 九九免费在线观看视频 | 欧美一级久久久 | 伊甸园永久入口www 99热 精品在线 | 亚洲精品久久久久久久蜜桃 | 国产精品观看在线亚洲人成网 | 久久视频国产精品免费视频在线 | www.亚洲| 亚洲成人资源 | 天天干天天操 | 久久新视频 | 国产96av| 国产又粗又猛又黄又爽视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 日韩精品久久一区二区三区 | 91精品国自产拍天天拍 | 亚洲精品视频网站在线观看 | 天天综合色网 | 精品久久免费 | 九九热免费观看 | 亚洲精品国产精品国自产观看 | 高清av免费一区中文字幕 | 九九热精品在线 | 国产亚洲成av片在线观看 | 干干日日| 亚洲国产成人av网 | 婷婷色在线| 国产资源精品在线观看 | 黄a在线看 | 亚洲japanese制服美女 | 黄色的片子 | 91成年人视频 | 亚洲五月 | 91看片在线播放 | 黄色软件在线看 | 91女人18片女毛片60分钟 | 99视频精品免费视频 | 亚洲精品动漫在线 | 中文字幕亚洲综合久久五月天色无吗'' | 天天插日日射 | 欧美性一级观看 | 天天色天天艹 | 青青射 | 91在线影视 | 在线免费av观看 | 91九色蝌蚪国产 | 99热精品国产一区二区在线观看 | 中文字幕在线观看第一页 | 婷婷激情综合五月天 | 美女久久 | 欧美va在线观看 | 亚洲成人蜜桃 | www.狠狠插.com | 最新中文字幕 | 亚洲综合日韩在线 | 狠狠亚洲 | 婷婷国产在线 | 久久66热这里只有精品 | 91尤物国产尤物福利在线播放 | 成人午夜影院在线观看 | a√国产免费a| 在线观看亚洲电影 | 欧美一区二区精品在线 | 国产一区免费在线观看 | 午夜美女福利 | 国产精品久久久久久久久久久久午夜 | 成年人免费在线看 | 在线观看日本韩国电影 | 国产小视频你懂的 | 美女黄视频免费 | 亚洲综合在线一区二区三区 | 日日夜夜精品免费视频 | 国产一级免费在线观看 | 久久精品高清视频 | 中文永久免费观看 | 成片免费观看视频大全 | 亚洲成人av影片 | 久草成人在线 | 国产黄色电影 | 国产精品美女免费看 | 亚洲精品乱码白浆高清久久久久久 | 国产黄色观看 | 午夜性盈盈 | 国产黄在线 | 久久激情五月丁香伊人 | 欧美日韩视频在线播放 | 69国产精品视频 | 美女露久久 | 免费97视频 | 精品美女国产在线 | 最近2019年日本中文免费字幕 | av高清在线观看 | 91精品国产乱码 | 久久电影国产免费久久电影 | 99在线精品免费视频九九视 | 国产资源中文字幕 | 狠狠撸电影| a视频在线看| 欧美日韩18| 91精品视频在线免费观看 | 国产精品久久久久久久免费大片 | 欧美成人猛片 | 欧洲精品视频一区二区 | 在线亚洲免费视频 | 国产专区欧美专区 | 成人网页在线免费观看 | 久久国产亚洲精品 | 成人久久久精品国产乱码一区二区 | 亚洲精品视频在线观看网站 | 国产专区免费 | 亚洲视频六区 | 青青河边草免费观看完整版高清 | 国产 亚洲 欧美 在线 | 日日爽天天操 | 麻豆你懂的 | 中文字幕在线播出 | 亚洲免费在线观看视频 | 久久久穴 | 69亚洲精品| 天天天色综合 | 中国美女一级看片 | 精品美女久久久久 | 人人爱在线视频 | 久久国产精品成人免费浪潮 | 欧美久久久一区二区三区 | 亚洲精品一区二区18漫画 | 久久精品人 | 亚洲精品电影在线 | 黄色一级在线视频 | 成人免费观看视频网站 | 97涩涩视频| 韩国av一区二区 | 欧美精品亚洲精品 | 精品国产一区在线观看 | 精品国产一区二 | 色婷婷国产 | 在线国产高清 | 中文字幕黄色av | 国产最新视频在线 | 亚洲综合一区二区精品导航 | 2019中文最近的2019中文在线 | 97精品国自产拍在线观看 | 成人avav| 四虎成人精品永久免费av | 色婷婷综合久久久中文字幕 | 亚洲欧美日韩在线看 | 国产精品igao视频网入口 | 天天鲁天天干天天射 | 国产视频资源 | 9999亚洲| 久精品一区 | 日韩精品一区二区久久 | 国产美女精品视频 | 免费看毛片在线 | 色搞搞 | 天天干人人 | 日韩av一区二区在线播放 | 在线看小早川怜子av | 久av电影| 久久久久伊人 | 亚洲欧美视频在线观看 | 99在线视频精品 | 日韩久久视频 | 久久er99热精品一区二区 | 99re视频在线观看 | 国产精品私人影院 | 欧美日韩高清一区 | 亚洲狠狠婷婷 | 日韩欧美一级二级 | 在线高清一区 | 成人全视频免费观看在线看 | 免费99视频 | 中文字幕一区二区三区乱码不卡 | 免费一级特黄毛大片 | 亚洲九九精品 | 天天操天天能 | 天天做天天射 | 91精品中文字幕 | 久久久久国产精品免费 | 黄色三级免费片 | 日韩精品视频第一页 | 91亚洲精品久久久中文字幕 | 成人国产精品免费观看 | 欧美日韩高清在线 | 中文字幕欧美日韩va免费视频 | 在线小视频| 欧美在线1区 | 亚洲一区二区精品在线 | 亚洲精品一区二区三区新线路 | 久久激情婷婷 | 欧美日韩另类在线 | 日日夜夜噜噜噜 | 婷婷激情av | 国产午夜免费视频 | 又爽又黄又无遮挡网站动态图 | 黄色一级性片 | 免费高清在线视频一区· | 波多野结衣在线观看一区 | 国产一区二区三区高清播放 | 久久综合九色综合欧美狠狠 | 欧美黄色免费 | 免费看久久 | 三级视频日韩 | 综合色播| 97人人模人人爽人人少妇 | 在线观看国产永久免费视频 | 91精品国产一区二区在线观看 | 美女视频a美女大全免费下载蜜臀 | 国产999| 99视频精品免费视频 | 亚洲电影黄色 | 日韩专区在线播放 | 日韩一区二区三区观看 | 国产黄色免费电影 | 美女免费网视频 | 91免费黄视频 | 少妇性bbb搡bbb爽爽爽欧美 | 国产偷国产偷亚洲清高 | 国产福利一区二区在线 | 国产精品video爽爽爽爽 | 久久a热6 | 美女久久精品 | 亚洲一区不卡视频 | 最近中文字幕久久 | 国产青草视频在线观看 | 一区二区三区在线视频111 | 日韩欧美精品在线视频 | 婷婷综合成人 | 久久影院午夜论 | 91久草视频| 久久午夜国产精品 | 久久久电影| 超碰在线观看av.com | 有码中文在线 | 国产成人一区二区三区影院在线 | 成年人视频在线免费播放 | 日韩欧美在线播放 | 美女久久久 | 玖玖玖精品 | 国产免费黄视频在线观看 | 久久精品国产亚洲 | 精品一区二区三区在线播放 | 久草在线在线精品观看 | 国产网站在线免费观看 | 午夜黄色一级片 | 亚洲综合黄色 | 欧美激情奇米色 | 午夜av一区 | 国产打女人屁股调教97 | 日韩电影中文字幕在线 | 日韩精品一区二区三区高清免费 | 91福利专区| 久久久久久久影视 | 狠狠色综合网站久久久久久久 | 天天射综合网视频 | 日韩专区中文字幕 | 欧美日韩视频在线观看一区二区 | 三上悠亚一区二区在线观看 | 国产福利一区二区在线 | 欧美激情精品久久久 | 99福利影院 | 狠狠操狠狠 | 国产高清免费在线播放 | 五月婷婷激情 | 日韩,精品电影 | 成年人毛片在线观看 | 国产玖玖在线 | 国产一区二区视频在线播放 | 国产在线资源 | 精品 一区 在线 | 五月天天色 | 最近中文字幕mv免费高清在线 | 国产1区2区| 黄色aaa级片 | 九九热精品视频在线播放 | 女人18毛片a级毛片一区二区 | 四虎影视成人永久免费观看视频 | 黄色软件网站在线观看 | 欧美精品久久久久久久久久 | 麻豆传媒电影在线观看 | 天堂av免费| 999久久国精品免费观看网站 | 国产精品久久久久久久午夜 | 亚洲三级在线免费观看 | 中文视频一区二区 | 日韩免费电影在线观看 | 欧美激情视频在线观看免费 | 永久av免费在线观看 | 日韩在线观看一区二区 | 成人小视频在线观看免费 | 欧美在线91| 午夜影视剧场 | 91插插插免费视频 | 2018亚洲男人天堂 | 天天摸夜夜添 | a√资源在线 | 亚洲欧洲一级 | 亚洲激情网站免费观看 | 免费黄色网址大全 | 日韩在线色 | 亚洲一区二区精品视频 | 狠狠色伊人亚洲综合网站野外 | 中文字幕免费久久 | 国产精品黄色av | 精品国产免费一区二区三区五区 | 国产女教师精品久久av | 亚洲免费一级电影 | 久久成人国产精品免费软件 | 91精品国产乱码久久 | 五月天开心 | 99免费精品视频 | 国产97碰免费视频 | 久草在线视频免费资源观看 | 91夫妻自拍 | 超碰国产97 | av中文字幕不卡 | 欧美日韩中文国产一区发布 | 日韩精品在线看 | 亚洲激情小视频 | 精品国产成人在线影院 | 久久99国产综合精品 | 在线视频麻豆 | 激情久久网 | 国产成人高清av | 99久久精品国产亚洲 | 久久久久国产一区二区三区 | 精品国产亚洲日本 | 日韩二区精品 | 97色涩| 日韩免费看片 | 国产精品18久久久久久首页狼 | 久久久在线视频 | 国产99视频在线观看 | 久久只有精品 | 久久狠狠亚洲综合 | 久国产在线播放 |