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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

U-Boot 之四 构建过程(Kconfig 配置 + Kbuild 编译)详解

發布時間:2024/10/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 U-Boot 之四 构建过程(Kconfig 配置 + Kbuild 编译)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

  • U-Boot 之一 零基礎編譯 U-Boot 過程詳解 及 編譯后的使用說明
  • U-Boot 之二 詳解使用 eclipse + J-Link 進行編譯及在線調試
  • U-Boot 之三 U-Boot 源碼文件解析及移植過程詳解
  • U-Boot 之五 詳解 U-Boot 及 SPL 的啟動流程
  • Kbuild && Kconfig

    ??Kbuild && Kconfig 隸屬于 Linux Kernel Build System。在宏觀上,Kbuild && Kconfig 可以統稱為 Kbuild,從微觀上來說,Kbuild 指的是編譯的過程,而 Kconfig 指的在編譯之前對內核進行配置的過程(該過程中會編譯一些工具來實現配置過程)。關于詳細的可以查看 Linux Kernel 的官方文檔 The Linux Kernel Documentation 中的 Kernel Build System 章節的介紹。

  • 本文約定俗成的稱呼:構建 指的 Kbuild + Kconfig;配置 指的 Kconfig;編譯 指的 Kbuild。
  • https://www.kernel.org/doc/
  • ??Kbuild && Kconfig 這套構建系統一個顯著的特點就是每一級目錄都會有單獨的相關文件,然后會被上一級相同的文件引用。這樣就保證了每一級目錄都是相互獨立的。尤其是對于源碼的維護者來說,這個是至關重要。每個維護者可以只關心他所負責的代碼部分,任何更改只需要變更它自己的 Kbuild && Kconfig 相關文件即可。它本身主要包含以下幾類文件:

    • Makefile: Kbuild && Kconfig 這套構建系統本身屬于 make 功能的擴展,因此,整個工作過程就是一些列 Makefile 文件的調用。其中入口就是根目錄下的 Makefile 文件,Makefile 中會調用各種工具以實現不同的功能。
      ??注意,為了區分不同的功能,在源碼中對于 Makefile 的命名有時候會加一個后綴。例如,config.mk、Makefile.build、Makefile.clean 等這些都屬于 Makefile 文件。
      ??Makefile 文件無法在線調試,對于理解一個復雜的 Makefile 很不友好。一般我們可以使用 --debug 參數讓 make 打印詳細的信息來協助理解。或者是在 Makefile 中添加一些打印信息,常用打印方式有兩種:

    • 使用 $(info, xxxx$(xxx))、$(warning, xxxx$(xxx))、$(error, xxxx$(xxx)),其中,$(xxx) 表示某個變量。這三個命令可以加到 Makefile 的任意地方,注意 $(error, xxxx$(xxx)) 會終止 Make 過程。
    • 使用 @echo "xxxx $xx xxxx",其中,$(xxx) 表示某個變量。這個命令只能用在目標后邊,且前面是個TAB。這個就是標準 Makefile 語法中的一個命令。
    • 再順帶說一句 make 的工作的一些機制:

    • 如果給出了參數,則 make 優先去找匹配的規則(匹配規則:完整匹配 > 通配符半匹配 > 完全通配符匹配)去執行;如果沒有給出參數,make 會自動找到 Makefile 中第一個目標中沒有通配符的規則執行。
    • 如果中間遇到 include 其他文件,就會緊接著執行 include 的文件,完成后再繼續執行本文件。
    • make 總是從 Makefile 的開頭開始解析,并不是找到匹配目標之后僅執行匹配目標的命令。也就是說,在匹配之前,Make 可能已經解析了很多判斷條件。
    • 對于匹配的規則如果有依賴,優先解析依賴。注意,依賴的匹配也符合 1 中所說的規則。
    • 命令前面加了 @ 字符,則不顯示命令本身而只顯示它的結果。命令前面加了 - 號,即使這條命令出錯,make 也會繼續執行后續命令。
    • 如果 Makefile 中存在多條同名規則,則 make 程序會嘗試將他們合并。但是如果這些同名規則都有命令的話,make 會給出警告,并用后面的命令代替前面的命令。
    • Kconfig 文件: 這個文件就是 Kconfig 系統的菜單項,當我們使用命令:make menuconfig 時,Kconfig 系統讀取該文件,根據該文件的內容生成各級菜單。U-Boot 源碼根目錄下的 Kconfig 就是頂級的配置菜單,其中會在引入其他目錄下的 Kconfig 作為二級菜單,依次類推。

    • .config 文件: 這個文件記錄了我們菜單項中的配置的具體值,我們所有對于構建的配置的存放在這個文件中,我們在,Kconfig 系統菜單中的更改,最終都會改寫該文件。注意:該文件默認是個隱藏文件,可以使用 ls -al 查看。

    • xxxx_defconfig 文件: xxxx_defconfig 文件就為 Kconfig 系統的菜單項提供一個默認值。不過,Kconfig 系統不會直接讀取 xxxx_defconfig 文件,而是需要使用方式是通過 make xxx_deconfig 生成帶默認值的 .config。這樣,在加載 Kconfig 時,就可以同時加載 .config 以提供默認值。
      ??簡單來說,xxxx_defconfig 就是為了方便支持更多個性化配置,從而可以盡可能少的改動源代碼。

    • Kbuild 文件: 這個是 Kbuild 系統使用的文件,該文件用于定義一些源碼使用的需要根據編譯環境產生的中間文件。

    • config.mk 文件: 用來處理一些編譯過程中的環境變量。Linux Kernel 沒有這個文件,U-Boot 需要使用它。

    ??U-Boot 從 v2014.10 版本開始也引入 Kbuild && Kconfig 這套構建系統,相比于原來應該是復雜了不少。但是對于屬性 Linux Kernel 的人來說確實是一個好消息!今天我們就來學習一下 U-Boot 中這套系統的具體工作流程。

    ??Kbuild && Kconfig 這套構建系統中定義了很多命令,我們可以使用 make help 來進行查看(就在根目錄的 Makefile 文件中),其中經常用到命令如下圖所示:

    構建過程

    ??在 Kbuild && Kconfig 這套構建系統中,源碼中使用的有些文件是要靠 Kbuild && Kconfig 這套系統來生成的,直接在源碼中是找不到。這就要求我們必須要了解 Kbuild && Kconfig 是如何工作的,更重要的是要知道 Kbuild && Kconfig 會產生哪些源碼使用的文件。

    ??整個構建過程的這個入口就是源碼根目錄下的 Makefile 文件。下面我們先來整體看一下這個文件的總體結構,并且對其中的規則進行一下說明。其大體可以分為三部分:

    整個文件的前半部分就是定義一堆符號,檢測工作環境、處理各種參數,基本沒有實際與編譯源碼相關的命令。下面重點介紹一些(注意,由于我在其中添加了一些打印信息,導致行號與原文件有區別):

    • 給 HOST_ARCH 賦值。HOST_ARCH 代表我們當前指定的 主機 的類型。當我們沒有指定的時候,它就是我們的 PC 架構(例如我的 HOST_ARCH_X86_64),指定 交叉編譯器 后(例如,我們編譯時 CROSS_COMPILE=arm-none-eabi- ARCH=arm make -j4),他就是我們指定的架構(HOST_ARCH_ARM)。
    • 處理 make 參數:make V=1、make -s 等。這里導出了 quiet、Q、KBUILD_VERBOSE,用以指示編譯過程的顯示方式。
    • 處理編譯的當前目錄以及編譯輸出目錄。其中,我們可以使用環境變量 KBUILD_OUTPUT 或者 指定 make O=xxx 的方式指定輸出目錄。而編譯的源目錄 KBUILD_SRC 根據注釋僅用于在 OBJ 目錄時,而且一般不給使用者使用。代碼可以簡化為以下邏輯:if `KBUILD_SRC` 為空檢查 O=xxx 參數,如果有指定,則賦值給 `KBUILD_OUTPUT`定義偽目標_all ,且 _all 為空目標,避免后面include其余文件的時候尋找隱含的第一個目標。后面肯定還會定義 _all, 而且肯定不為空if `KBUILD_OUTPUT` 不為空`KBUILD_OUTPUT` = 創建并指定的目錄到 `KBUILD_OUTPUT` 繼續執行 make (其中需要過濾掉一些內容,防止無限嵌套)。因為 在 `KBUILD_OUTPUT` 中執行的 Makefile 就是當前這個 Makefileskip-makefile 賦值為 1endif endifif skip-makefile 為空。不空表示上面已經在 `KBUILD_OUTPUT` 中執行過了執行其他各種操作 endif整個makefie 結束 ??這里需要注意的就是,如果指定了輸出目錄,將轉到 輸出目錄中去執行 Makefile,本 Makefile 的執行就結束了。skip-makefile 被賦值為 1,此后只有在 skip-makefile 不為 1 時才會繼續執行。
    • 再接下來就是判斷 make C=x 參數以及處理是編譯整個 U-Boot 還是編譯的模塊(由環境變量 SUBDIRS 或 make M=xxx 執行),如果是模塊,賦值給 KBUILD_EXTMOD(賦值厚就不空)。

      ??前面有說過,開始定義了一個空的目標 _all,這里再次定義目標 _all。這里的 _all 根據 KBUILD_EXTMOD 的值依賴于 all 或者是 modules,但是命令還是為空。這里我們不關心模塊,重點關注 all。all 又依賴 .binman_stmp 和 inputs,如下圖所示:

      關于 all 后文會有詳細的介紹。
    • 繼續下來就是檢查編譯工具鏈。并做了一些重命名以統一編譯時的顯示。
    • 再繼續就是 kconfig 和 kbuild 共用的一些規則 scripts_basic、outputmakefile 的定義。然后檢查要執行的操作是否需要 .config 文件,最終出現以下邏輯:if 是多個目標(mixed-targets=1)一個一個處理 else if 配置(config-targets=1),即我們執行的 make xxxconfig 時的處理config: scripts_basic outputmakefile FORCE$(Q)$(MAKE) $(build)=scripts/kconfig $@%config: scripts_basic outputmakefile FORCE$(Q)$(MAKE) $(build)=scripts/kconfig $@ else 這里就是 編譯過程以及 非 config(例如 clean) 的處理了scripts: scripts_basic scripts_dtc include/config/auto.conf$(Q)$(MAKE) $(build)=$(@)if 需要 .confg 檢查 .confg 文件elseinclude/config/auto.conf: ;endifall 的定義(實際編譯文件等等)非 config(例如 clean、check)等的定義 endifMakefile 結束 也就是在此之前的內容,無論給出啥命令,都會被 make 解析,然后從這里開始分道揚鑣!

    ??至此,就開始根據給出的目標的不同開始區分具體操作類型了,后續我們單獨章節來介紹!***注意,由于我在 Makefile 中添加了一些打印信息,導致行號與原文件有區別!***下面是我大體整理的一個流程圖:

    Kconfig

    ??在 Kbuild && Kconfig 這套構建系統中,當我們使用 make xxxconfg 類似的命令時,就會執行 Kconfig 流程。例如,當執行 make menuconfig 時會出現一個配置界面,允許開發者通過類似于 UI 的方式來對內核進行配置,之所為我們可以看到這個類似于 UI 的界面,就是因為 Kconfig 從中產生了多個文件和工具來實現的。

    Kconfig 語法可以從 https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html 里來學習。

    ??當我們在 U-Boot 根目錄執行 make menuconfig 或者 make xxx_deconfig 時,make 命令便會讀取 U-Boot 根目錄下的 Makefile 文件,然后解析并匹配 Makefile 文件中的規則 。而 xxxconfig 就會匹配根目錄下 Makefile 文件中的如下圖示的規則(% 可以匹配任意非空字符串,所以 menuconfig、xxx_deconfig 都匹配):

    • Q 是否顯示信息信息,在 Makefile 前面有賦值為 @ 或 空
    • MAKE: 就是指的可執行程序 make
    • $(build): 定義在 ./scripts/Kbuild.include 中:181行

      那么將以上命令展開之后就是:make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig menuconfig 或者 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig xxx_defconfig
    • $(srctree): 在 Makefile 前面有賦值為 . 或 $(KBUILD_SRC)
    • scripts_basic: 就定義在 U-Boot 根目錄的 Makefile 中

      那么將以上命令第一句規則展開之后就是:make -f $(srctree)/scripts/Makefile.build obj=scripts/basic ,第二句規則沒啥可說的,就是移除個文件。
    • outputmakefile: 就定義在 U-Boot 根目錄的 Makefile 中,如下所示:

      從規則代碼可以看出只有當 KBUILD_SRC 不為空時才有效,而對于 KBUILD_SRC 一般都是空,非空的情況下一般也不使用。因此,這里的依賴 outputmakefile 這里就是空。對于具體見如下說明:
    • FORCE 是沒有規則和依賴的,所以每次都會重新生成 FORCE。當 FORCE 作為其他目標的依賴時,由于 FORCE 總是被更新過的,因此依賴所在的規則總是會執行的。

    ??經過上面的分析,最終由兩條語句 make -f $(srctree)/scripts/Makefile.build obj=scripts/basic 和 make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig menuconfig 或者 make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig xxx_defconfig 是我們需要進一步來解析的。接下來就要進入 /scripts/Makefile.build 這個文件了。

    Makefile.build

    ??對于 Makefile.build 文件,目前我們只需要關注下圖所示的兩部分(說明見注釋):

    接下就是進一步處理 scripts/basic/Makefile 或者 scripts/kconfig/Makefile 了。

    make xxx_deconfig

    ??經過上面的分析,當我執行 make xxx_defconfig 時(例如,我這里的 make stm32f769-disco_defconfig),最終會執行以下兩句:make -f $(srctree)/scripts/Makefile.build obj=scripts/basic 和 make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig xxx_defconfig 。

    • make -f $(srctree)/scripts/Makefile.build obj=scripts/basic 展開后是 cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -o scripts/basic/fixdep scripts/basic/fixdep.c 最終在 scripts/basic/ 目錄下生成了可執行工具 fixdep。
    • make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig xxx_defconfig 展開后是: cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -c -o scripts/kconfig/conf.o scripts/kconfig/conf.cbison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.yflex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.lcc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.ccc -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o scripts/kconfig/conf --defconfig=arch/../configs/stm32f769-eval_defconfig Kconfig 最終在 scripts/kconfig/ 目錄下生成了可執行工具 conf,緊接著使用剛生成的 scripts/kconfig/conf 工具根據我們指定的 stm32f769-eval_defconfig 生成 .config 文件。

    make menuconfig

    ??經過上面的分析,當我執行 make menuconfig 時,最終會執行以下兩句:make -f $(srctree)/scripts/Makefile.build obj=scripts/basic 和 make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig menuconfig 。

    • make -f $(srctree)/scripts/Makefile.build obj=scripts/basic 與 make xxx_deconfig 時的語句是一樣的。如果在執行 make menuconfig 之前沒有使用 make xxx_deconfig,那么這句就會和 make xxx_deconfig 時一樣去執行來生成 scripts/basic/fixdep。
    • make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig menuconfig 展開后是:make -f ./scripts/Makefile.build obj=scripts/basic rm -f .tmp_quiet_recordmcount make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig set -e; mkdir -p scripts/kconfig/; /bin/bash scripts/kconfig/mconf-cfg.sh < scripts/kconfig/mconf-cfg.sh > scripts/kconfig/.mconf-cfg.tmp; if [ -r scripts/kconfig/.mconf-cfg ] && cmp -s scripts/kconfig/.mconf-cfg scripts/kconfig/.mconf-cfg.tmp; then rm -f scripts/kconfig/.mconf-cfg.tmp; else : ' UPD scripts/kconfig/.mconf-cfg'; mv -f scripts/kconfig/.mconf-cfg.tmp scripts/kconfig/.mconf-cfg; ficc -Wp,-MD,scripts/kconfig/.mconf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/mconf.o scripts/kconfig/mconf.ccc -Wp,-MD,scripts/kconfig/lxdialog/.checklist.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/checklist.ccc -Wp,-MD,scripts/kconfig/lxdialog/.inputbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/inputbox.ccc -Wp,-MD,scripts/kconfig/lxdialog/.menubox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/menubox.ccc -Wp,-MD,scripts/kconfig/lxdialog/.textbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/textbox.ccc -Wp,-MD,scripts/kconfig/lxdialog/.util.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/util.ccc -Wp,-MD,scripts/kconfig/lxdialog/.yesno.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/yesno.o scripts/kconfig/lxdialog/yesno.ccc -o scripts/kconfig/mconf scripts/kconfig/mconf.o scripts/kconfig/zconf.tab.o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/yesno.o -Wl,-Bsymbolic-functions -lncursesw -ltinfo scripts/kconfig/mconf Kconfig 最終生成 scripts/kconfig/mconf,緊接著使用剛生成的 scripts/kconfig/mconf 工具讀取根目錄的 Kconfig 文件,隨之出現配置界面。

    ??make xxx_deconfig之后,Kconfig 系統會在 U-Boot 源碼根目錄下生成 .config 文件,當我們使用 make menuconfig 修改了相關配置之后,Kconfig 系統最終也是修改根目錄下的 .config 文件(注意,該文件默認是個隱藏文件,可使用 ls -al 查看),而 .config 文件就記錄了我們當前對于 U-Boot 的配置,后續構建時便會讀取該文件。

    Kbuild

    ??這里說的 Kbuild 是微觀上的 Kbuild,指的是編譯的過程。在經過上面 Kconfig 之后,接下來就是真正的編譯過程,這個過程采用的就是 Kbuild 系統。Linux 官方文檔地址:https://www.kernel.org/doc/html/latest/kbuild/index.html。

    ??編譯使用的命令是 CROSS_COMPILE=arm-none-eabi- ARCH=arm make -j8,當我們使用該命令之后,make 程序就會讀取 U-Boot 根目錄的 Makefile 文件,然后解析并匹配 Makefile 文件中的規則。由于這里沒有指明目標,Make 會自動找到 makefile 中第一個目標中沒有通配符的規則執行,這里就是 _all。

    ??注意,這里的 _all 并不是第一個定義的 _all。第一個定義的 _all 是個空命令目標,空命令行可以防止 make 在執行時試圖為重建這個目標去查找隱含命令(包括了使用隱含規則中的命令和“ .DEFAULT”指定的命令)。后面重新定義的 _all 才是最終生效的 _all

    ??如果 KBUILD_EXTMOD 為空的話 _all 依賴于 all。我們不編譯模塊(沒有指定 KBUILD_EXTMOD),所以 KBUILD_EXTMOD 就是空 ,_all 依賴于 all 的。 all 又依賴 .binman_stmp 和 inputs,如下圖所示:

    注意,如果使用的命令是 CROSS_COMPILE=arm-none-eabi- ARCH=arm make all -j8,則直接就會匹配到 all 這條規則,就不會有 _all 啥事了!

    ??.binman_stamp這個比較簡單,就是通過使用 touch 命令更新 .binman_stamp 文件(不存在時會新建)的時間戳保證 binman 總是會被執行。然后檢查一些定義,給出提示。

    ??重點就在 inputs,而 inputs 又是依賴于 $(INPUTS-y)。通過將 $(INPUTS-y) 展開后就是 checkarmreloc u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check spl/u-boot-spl.bin u-boot.img u-boot.dtb u-boot-dtb.img 再進一步就是展開及處理各個依賴項了,下面我們重點來介紹一下 checkarmreloc 和 u-boot.srec,其他的大家自行解析。

    • checkarmreloc

      將 u-boot 的各項依賴展開就是:u-boot: arch/arm/cpu/armv7m/start.o arch/arm/cpu/built-in.o arch/arm/cpu/armv7m/built-in.o arch/arm/lib/built-in.o arch/arm/mach-stm32/built-in.o board/st/common/built-in.o board/st/stm32f769-eval/built-in.o cmd/built-in.o common/built-in.o disk/built-in.o drivers/built-in.o drivers/dma/built-in.o drivers/gpio/built-in.o drivers/net/built-in.o drivers/net/phy/built-in.o drivers/power/built-in.o drivers/power/battery/built-in.o drivers/power/domain/built-in.o drivers/power/fuel_gauge/built-in.o drivers/power/mfd/built-in.o drivers/power/pmic/built-in.o drivers/power/regulator/built-in.o drivers/serial/built-in.o drivers/spi/built-in.o drivers/usb/cdns3/built-in.o drivers/usb/common/built-in.o drivers/usb/dwc3/built-in.o drivers/usb/emul/built-in.o drivers/usb/eth/built-in.o drivers/usb/host/built-in.o drivers/usb/mtu3/built-in.o drivers/usb/musb-new/built-in.o drivers/usb/musb/built-in.o drivers/usb/phy/built-in.o drivers/usb/ulpi/built-in.o env/built-in.o fs/built-in.o lib/built-in.o net/built-in.o u-boot.lds FORCE,其中:

      • $(u-boot-init):arch/arm/cpu/armv7m/start.o
      • $(u-boot-main):后面一大串 built-in.o
      • $(u-boot-keep-syms-lto):空,不包含任何內容

      因此,我們需要重點來關注 u-boot.lds 這個依賴:

      其中,$(LDSCRIPT) 就是我們使用的鏈接腳本文件,這里就是 ./arch/arm/cpu/u-boot.lds。而 prepare 的內容就比價多了,如下圖所示:

      中間各種依賴,最終會到 include/config/%.conf: 這條規則。

    • u-boot.srec 這個比較簡單,至于它依賴的 u-boot 在上面已經說了。

    其實到這里基本就可以了,解析來就不繼續深入了!下面來一張圖:

    clean、mrproper、distclean

    ??介紹了以上的工作過程之后,我們再介紹一下三個與清理相關的命令:clean、mrproper、distclean。至于支持的其他命令基本都差不多,大家感興趣可以自己分析即可。這三個命令的清理程度是逐漸增加,后者包含前者,如下圖所示:

    我們就以 distclean 為例來說明。當我們執行 make distclean 這條命令時,make 讀取根目錄的 Makefile,然后開始解析,最終匹配到規則 distclean: mrproper,如下所示:

    • 命令部分:第一個 find 命令查找上面指定的文件并刪除。其中的 “|” 表示管道,即左邊的輸出作為右邊的輸入。rm 命令刪除 boards.cfg 和 CHANGELOG。

      關于 find 命令:https://www.cnblogs.com/shenqidu/p/10615593.html
      關于 xargs 命令:https://www.runoob.com/linux/linux-comm-xargs.html

    • 依賴 mrproper:接下來重點看他的依賴 mrproper,由于 mrproper 也有依賴,我把它們整理到一個圖中,如下所示:

      從中可以看出,mrproper 先執行了 clean,然后執行 $(mrproper-dirs)。綜合來看,clean和 mrproper 結構基本一致,我們將里面各變量展開,其中:

    • 先看 clean:

      • 依賴 rm-dirs:展開后就是 .tmp_versions、spl/*
      • 依賴 rm-files:展開后就是include/bmp_logo.h include/bmp_logo_data.h tools/version.h boot* u-boot* MLO* SPL System.map fit-dtb.blob* u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* idbloader.img flash.bin flash.log defconfig keep-syms-lto.c
      • 依賴 $(clean-dirs):
        • $(clean):定義在 Kbuild.include 文件中: clean := -f $(srctree)/scripts/Makefile.clean obj
        • cmd:定義在 Kbuild.include 文件中: cmd = @$(echo-cmd) $(cmd_$(1)),進一步 $(echo-cmd)就在之上:echo-cmd = $(if $($(quiet)cmd_$(1)),echo ' $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
      • 命令部分:
        • $(call cmd,rmdirs):
        • $(call cmd,rmfiles):
        • find xxx | xargs rm -f:在以上清理的基礎上再清理一些符號文件,臨時文件、腳本文件等
    • mrproper:

      • 依賴 rm-dirs:include/config、include/generated spl
      • 依賴 rm-files:.config、.config.old、include/autoconf.mk、include/autoconf.mk.dep、include/config.h
      • 依賴 clean:就是上面的 clean
      • 依賴 $(mrproper-dirs):
      • 命令部分:
        • $(clean):同上
        • cmd:同上

    參考

  • https://loee.xyz/2021/04/27/uboot-%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90/
  • https://www.cnblogs.com/humaoxiao/p/4189411.html
  • https://github.com/zhaojh329/U-boot-1/blob/master/%E7%AC%AC9%E7%AB%A0-U-boot%E7%BC%96%E8%AF%91%E4%B9%8B%E4%B8%80%E9%85%8D%E7%BD%AE%E8%BF%87%E7%A8%8B.md
  • https://blog.csdn.net/guyongqiangx/article/details/52558087
  • https://yunyanan.github.io/exploring_kbuild/
  • https://opensource.com/article/18/10/kbuild-and-kconfig
  • https://www.cnblogs.com/syyxy/p/9350999.html
  • https://blog.csdn.net/q_z_r_s/article/details/80783631
  • https://blog.csdn.net/linuxweiyh/article/details/100528718
  • 總結

    以上是生活随笔為你收集整理的U-Boot 之四 构建过程(Kconfig 配置 + Kbuild 编译)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    国产精品18久久久久久久久 | 天天干天天看 | 99精品美女| av在线日韩 | 久久大片| 亚洲成人国产精品 | 国产一二三四在线视频 | 久久久国产精品网站 | 欧美日韩亚洲在线 | 91在线免费视频 | 天天射天天干 | 免费视频国产 | 97超碰人人看| 成年人免费电影 | 奇人奇案qvod | 免费人成在线观看 | 天天在线视频色 | 亚洲三级黄色 | 国产99精品 | 国产原创在线观看 | 一区二区三区四区久久 | 国产成人一区二区三区在线观看 | 激情开心| 粉嫩av一区二区三区四区 | 亚在线播放中文视频 | 成人免费电影 | 久草视频一区 | 超碰资源在线 | 久久五月婷婷丁香 | 午夜视频在线观看网站 | 青草视频网 | av观看在线观看 | 国产韩国精品一区二区三区 | 久久免费片 | 国产午夜精品一区二区三区嫩草 | 国产一级特黄毛片在线毛片 | 国产成人在线播放 | 亚洲欧洲精品一区 | 特及黄色片| 国产午夜精品理论片在线 | av黄色在线| av成人动漫| 狠狠色伊人亚洲综合成人 | 黄色免费在线看 | 精品亚洲视频在线 | 日本在线观看一区 | 精品视频免费 | 九九九九免费视频 | 一区二区中文字幕在线观看 | 久久美女视频 | 久久夜色精品国产欧美乱极品 | 亚洲aⅴ乱码精品成人区 | 97香蕉久久超级碰碰高清版 | 久久av在线 | 亚洲国产精品日韩 | 久久草 | 96看片| 在线免费观看视频一区 | 国产成人在线观看免费 | 激情综合电影网 | 久久在线精品视频 | 国产超碰在线观看 | 综合久久2023 | 色的网站在线观看 | 91爱爱视频| 高清不卡一区二区三区 | 91在线视频免费观看 | 特级xxxxx欧美 | 免费看在线看www777 | 最新99热 | 亚洲午夜小视频 | 成人av免费网站 | 久久综合毛片 | 午夜视频99 | 欧美作爱视频 | 色在线视频 | 亚洲精品1234区 | 日韩精品一区二区三区电影 | 中文字幕免费一区 | 成人午夜电影在线播放 | 日日操天天爽 | 亚洲在线a | 日韩午夜大片 | 久久精品亚洲国产 | 亚洲精品乱码久久久久久蜜桃91 | 91久久久久久国产精品 | av在线免费网 | 亚洲天堂网在线视频 | 精品免费在线视频 | 黄色日批网站 | 欧美日韩视频在线观看免费 | 99精品欧美一区二区 | 国产亚洲欧美精品久久久久久 | 1024手机看片国产 | www.大网伊人| 波多野结依在线观看 | 天天草天天草 | 91激情视频在线 | 日韩精选在线 | 日韩理论在线播放 | 在线中文字幕观看 | 69视频永久免费观看 | 国产又粗又猛又爽又黄的视频免费 | 久久女同性恋中文字幕 | 欧美日韩视频免费看 | 天天操天天操天天操天天操天天操天天操 | 亚洲免费精品一区二区 | av中文字幕在线播放 | 国产一区 在线播放 | 三级黄色片子 | 国产精品99爱 | 亚洲视频免费在线观看 | 丁香久久久 | 国产精品系列在线 | 麻豆国产精品视频 | 亚洲国内精品 | 久久视频6 | 色婷婷免费视频 | 国产伦精品一区二区三区在线 | 国产精品久久久久久高潮 | 日韩精品一区二区三区不卡 | 草莓视频在线观看免费观看 | 成人三级黄色 | 在线观看视频中文字幕 | 99热国产在线观看 | 日本中文在线 | av九九| 中文字幕一区av | 国产69久久精品成人看 | 成年人黄色免费网站 | 国产成人一区二区三区在线观看 | 999久久久精品视频 日韩高清www | 日产av在线播放 | 午夜123 | 97成人资源 | 精品福利视频在线观看 | 少妇bbbb搡bbbb桶 | 成年人av在线播放 | 久久三级毛片 | 久久久久免费 | 狠狠天天| 亚州精品天堂中文字幕 | 免费在线播放 | 免费在线观看成人 | 久久ww| 成人精品99 | 丁香六月婷婷开心婷婷网 | 亚洲国产手机在线 | 亚洲国产小视频在线观看 | 永久免费av在线播放 | 国产欧美精品在线观看 | 国产高清在线视频 | 久久精品99国产精品日本 | 蜜臀av性久久久久av蜜臀三区 | 园产精品久久久久久久7电影 | 亚洲精品久久久蜜臀下载官网 | 日本韩国在线不卡 | 欧美性色综合网站 | 国产日韩欧美在线一区 | 欧美做受高潮电影o | 成人黄大片视频在线观看 | 夜色在线资源 | 人人爽人人爽人人爽学生一级 | 日韩久久久久久久久久久久 | 日韩av一区二区三区四区 | 国产色妞影院wwwxxx | 在线国产福利 | 伊人影院得得 | 激情文学综合丁香 | 黄色小视频在线观看免费 | 婷婷五天天在线视频 | 色婷婷丁香 | 欧美一级久久 | 91成人在线观看喷潮 | 国产精品乱码高清在线看 | 91亚·色 | 国产成人一区二区精品非洲 | 91大神dom调教在线观看 | 一区二区视频免费在线观看 | 久久精品这里精品 | 中文乱码视频在线观看 | www.一区二区三区 | 色吊丝av中文字幕 | 99这里只有久久精品视频 | 九九热精品视频在线播放 | 在线观看精品视频 | 欧美精品久久99 | 99re6热在线精品视频 | 天天干天天玩天天操 | 亚洲免费精品一区二区 | 免费污片 | 亚洲五月婷婷 | 亚洲乱亚洲乱妇 | 亚洲高清视频在线观看免费 | 亚洲在线视频网站 | www激情久久 | 一本一本久久a久久精品综合小说 | 欧美精品网站 | 9在线观看免费高清完整版在线观看明 | 国产淫a| 天天操天天操天天操天天 | 久久精品美女视频 | 欧美福利在线播放 | 美女很黄免费网站 | 国产精品成人久久久 | 国产成人av网址 | 天堂资源在线观看视频 | 综合网天天射 | 国产日韩精品一区二区在线观看播放 | 国内精品久久久久久久久久 | 精品一区精品二区高清 | 在线观看你懂的网站 | a黄色| 99精品国产免费久久 | 日韩av午夜在线观看 | 在线观看你懂的网址 | h动漫中文字幕 | 又大又硬又黄又爽视频在线观看 | www.久久免费视频 | 又黄又爽又刺激 | 又湿又紧又大又爽a视频国产 | 亚洲艳情 | 久久免费精品国产 | 91在线视频在线观看 | 日韩专区在线播放 | 一区二区三区在线观看免费 | 超碰在线观看99 | 亚洲尺码电影av久久 | 色婷婷一| 国产精品麻豆99久久久久久 | 99精品视频精品精品视频 | 婷婷激情五月综合 | 夜夜干天天操 | 亚洲国产精品推荐 | 国产精品久久久久久久免费大片 | 久操中文字幕在线观看 | 日韩欧美在线中文字幕 | 三级av在线免费观看 | 狠狠躁夜夜躁人人爽视频 | 天天天天色综合 | 99热最新 | 久久久久久久久久久电影 | 欧美日本一二三 | 激情图片久久 | 国产最新在线观看 | 久久a v视频 | 91漂亮少妇露脸在线播放 | 91色国产在线 | 中文字幕在线日本 | 亚洲黄网站 | 五月天最新网址 | 一区二区 不卡 | 免费av电影网站 | 91看片淫黄大片91 | 色人久久 | 在线观看亚洲国产精品 | 日日爱999 | 69国产在线观看 | 亚洲成人精品在线 | av电影 一区二区 | 国内揄拍国产精品 | 色综合网在线 | 夜夜爱av | 91免费版在线观看 | 日韩午夜在线播放 | 国产91综合一区在线观看 | 免费成人黄色 | 五月天电影免费在线观看一区 | 日本亚洲国产 | 麻豆免费精品视频 | 91最新国产 | 精品久久久久久亚洲综合网站 | 国产香蕉视频 | 少妇自拍av| 操处女逼 | 日韩av视屏 | 在线观看激情av | 国产成人a v电影 | 亚洲人视频在线 | 综合色站| 日本h在线播放 | 久久久久久免费毛片精品 | 国产一级免费观看 | 91av在线免费看 | 日日草天天干 | 精品国产一二三 | 天天摸天天干天天操天天射 | 久久久成人精品 | 国产尤物在线 | 天天弄天天操 | 国产精品日韩欧美 | 亚洲国产欧美一区二区三区丁香婷 | 国产成人精品av在线观 | 国产精品乱码久久久 | 国产精品美女久久久久久久久 | 婷婷丁香综合 | 亚洲成人av在线播放 | 91麻豆网 | 综合国产在线 | 精品国产诱惑 | 91视频在线免费看 | 亚洲精品中文在线 | 日韩欧美在线高清 | 五月婷婷.com | 久久国产精品成人免费浪潮 | 色噜噜狠狠色综合中国 | 99婷婷狠狠成为人免费视频 | 日韩一级黄色大片 | 欧美一级激情 | 久久久久一区二区三区 | 少妇bbw揉bbb欧美 | 免费在线一区二区 | 日本黄色a级大片 | 91精品一区二区三区蜜臀 | 国产国语在线 | 中文字幕你懂的 | 日韩在线激情 | 丁香六月激情婷婷 | 俺要去色综合狠狠 | 91在线亚洲| 欧美综合在线视频 | 波多野结衣在线视频免费观看 | 亚洲国产精品成人女人久久 | 国产98色在线 | 日韩 | 超碰97公开| 亚洲婷婷丁香 | 亚洲一级在线观看 | 在线性视频日韩欧美 | 啪啪凸凸 | 久久av免费 | 免费a v在线 | 久色婷婷| 国产又粗又硬又爽视频 | 国产伦精品一区二区三区高清 | 国产精品一区二区三区四区在线观看 | 欧美va天堂va视频va在线 | 美女网站视频免费都是黄 | 99免费在线观看视频 | 久久综合9988久久爱 | 日韩有码网站 | 国产高清免费 | 日韩精品一区二区不卡 | av不卡中文字幕 | 久久久久久电影 | 日韩中文字幕亚洲一区二区va在线 | 婷婷色 亚洲 | 久久精品视频在线观看免费 | 色狠狠狠| 九九热精品视频在线观看 | 狠狠躁夜夜a产精品视频 | 国产精品爽爽爽 | 九草视频在线 | 国产美女黄网站免费 | 五月婷婷激情六月 | 国产小视频国产精品 | 国产无遮挡又黄又爽馒头漫画 | 2019中文最近的2019中文在线 | 久久精品国产一区二区 | 久久成人久久 | 久久综合久久综合九色 | 国产免费专区 | 亚洲天堂毛片 | 97视频免费观看2区 亚洲视屏 | 亚洲免费在线观看视频 | 午夜精品电影一区二区在线 | 婷婷干五月 | 91精品国产成人观看 | 亚洲综合色婷婷 | 91久久爱热色涩涩 | 免费h在线观看 | 在线观看视频日韩 | 丝袜美女在线观看 | 99re6热在线精品视频 | 91丨九色丨91啦蝌蚪老版 | 97碰碰碰| 91免费网站在线观看 | 久久99免费 | 91免费观看国产 | 黄色片视频免费 | 欧美在一区| 成人久久电影 | 91精品国自产拍天天拍 | 又黄又爽又刺激 | 中文字幕一区二区三区乱码不卡 | 97电影院在线观看 | 久久少妇| 日本mv大片欧洲mv大片 | 久久免费av电影 | 日韩在线免费观看视频 | www.夜夜操.com | 色五月成人 | 成人久久18免费 | 亚洲永久字幕 | 午夜精品久久久久久久99无限制 | 欧美日韩一二三四区 | 毛片888 | 中文字幕亚洲不卡 | 91视频88av| 免费久久精品视频 | 久久超级碰 | 中文字幕在线免费看线人 | 日日干av | 色在线国产 | 欧美亚洲精品一区 | 国产在线91在线电影 | 国产精品一区久久久久 | 在线国产激情视频 | 九九九九免费视频 | 免费亚洲片 | 久久夜色精品国产欧美乱极品 | 亚洲国产资源 | 国产视频在线看 | 国产精品视频资源 | av在线免费在线 | 婷婷丁香狠狠爱 | 九九九热精品 | 免费精品视频 | 99久久这里有精品 | 91黄色小视频 | 九九综合久久 | 96精品视频 | 亚洲成人av片在线观看 | 国产美女免费视频 | 91久久国产自产拍夜夜嗨 | 黄色av网站在线免费观看 | 射九九| 黄色的视频 | 天天干 夜夜操 | 热久久这里只有精品 | 国产91精品一区二区绿帽 | 69绿帽绿奴3pvideos | 色播五月激情五月 | 黄色大片中国 | 在线综合 亚洲 欧美在线视频 | 中文字幕中文字幕中文字幕 | 五月天婷亚洲天综合网鲁鲁鲁 | 7777精品伊人久久久大香线蕉 | av天天在线观看 | 国产在线观看免费 | 国产成人一区二区精品非洲 | av在线看片| 在线 视频 一区二区 | 国产精品久久电影网 | 一区二区三区在线免费播放 | 一区二区三区高清在线 | 97色国产 | 日本久久精品视频 | 一区二区三区影院 | 一区二区三区高清不卡 | 国产无遮挡又黄又爽馒头漫画 | 99免费看片 | 欧美日视频 | 又色又爽的网站 | 国产美女精品人人做人人爽 | 久久人人干| 久草电影在线观看 | 午夜精品久久久久 | 久久综合九色欧美综合狠狠 | 久久国产网 | 国产精品麻豆99久久久久久 | 天天伊人狠狠 | 青青久草在线视频 | 免费高清影视 | 黄色特级一级片 | 99一级片 | 亚洲激情综合 | 国产专区精品 | 91麻豆精品国产91久久久久 | 91黄站| 一区二区欧美激情 | 97免费视频在线播放 | 青青草国产在线 | 99av在线视频 | 九九热国产| 国产午夜精品一区二区三区嫩草 | 麻豆视频国产在线观看 | 国产日本亚洲高清 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 欧美一级性生活 | 亚洲午夜在线视频 | 激情丁香月 | 在线中文字幕观看 | 国产手机在线精品 | 久久精品视频2 | 最新av免费在线观看 | 日韩欧美在线一区二区 | 色婷婷视频在线观看 | 99精品在线视频播放 | 91麻豆精品一区二区三区 | 日韩精品免费一区二区三区 | 久久免费在线观看视频 | 欧美一二三区在线观看 | 欧美日韩国产色综合一二三四 | 2021国产在线视频 | 中文资源在线播放 | 成人精品视频久久久久 | 午夜18视频在线观看 | 91污污视频在线观看 | 成人久久久久久久久 | 在线一区观看 | 美女福利视频在线 | 欧美极品少妇xbxb性爽爽视频 | 国产精品自在欧美一区 | 欧美精品免费视频 | 99久久精品久久久久久清纯 | 国产综合激情 | 婷婷色网站 | 丰满少妇高潮在线观看 | 久久久久国产精品一区 | 久久久高清一区二区三区 | 日韩av中文字幕在线 | 亚洲国产精品99久久久久久久久 | 欧美日韩一区二区三区不卡 | 日韩免费网站 | 欧美一级视频在线观看 | 中文字幕高清免费日韩视频在线 | 99热在线观看 | 亚洲一级免费电影 | 麻豆视频网址 | 黄色av电影一级片 | 国产一区二区精品91 | 国产精品久久伊人 | 精品在线观 | 国产精品久久久一区二区 | 国产一区二区在线免费播放 | 91精品爽啪蜜夜国产在线播放 | 日韩欧美高清免费 | 国产午夜激情视频 | 色婷婷播放 | 国产 一区二区三区 在线 | 9999精品免费视频 | 天天躁天天躁天天躁婷 | 一本大道久久精品懂色aⅴ 五月婷社区 | 亚洲欧洲xxxx | 国产色拍 | 国产精品亚洲视频 | 97偷拍视频 | 亚洲色图22p | 999毛片| 日韩在线高清免费视频 | 亚洲精品午夜久久久 | 精品国产电影一区 | 免费av看片| 久久精品五月 | 亚洲一级久久 | 最新婷婷色 | 美女黄久久 | 国内揄拍国内精品 | 国产乱码精品一区二区三区介绍 | 成人av一二三区 | 在线免费观看黄 | 久久免费的精品国产v∧ | 色永久免费视频 | 在线成人中文字幕 | 亚洲美女视频在线观看 | 天天干,天天射,天天操,天天摸 | 久久久久国产一区二区 | 99精品国产aⅴ | 波多野结衣动态图 | 婷色在线 | 免费a现在观看 | 亚洲一区二区三区在线看 | 久久精品精品电影网 | 免费网站v | 亚洲欧美视频在线播放 | 日本中文字幕网站 | 国产不卡在线看 | 亚洲综合激情 | 国产免费观看高清完整版 | 国产一级二级在线观看 | 久久国产精品一区二区三区 | 日韩欧美专区 | 久久久久一区二区三区 | 日韩精品黄 | 96精品高清视频在线观看软件特色 | 久久精品96| 国产999精品久久久久久 | 国产精品成久久久久三级 | 天天操天天干天天操天天干 | 精品久久亚洲 | 99久久电影 | 久操视频在线观看 | 久久综合九色综合网站 | 在线看成人片 | 久久艹影院| 久久免费在线观看 | 又色又爽又黄高潮的免费视频 | 久久久亚洲麻豆日韩精品一区三区 | 国内精品久久久久久久影视简单 | 特级a老妇做爰全过程 | 日韩精品极品视频 | 99在线热播精品免费 | 国产精品国产三级国产 | 又爽又黄又无遮挡网站动态图 | 中文字幕在线免费观看 | 婷婷综合伊人 | 日韩另类在线 | 欧美成人a在线 | 夜色成人网 | 欧洲一区精品 | 国产精品亚州 | 99九九99九九九视频精品 | 国产在线精品区 | 日韩久久精品一区二区三区 | 狠狠的操狠狠的干 | 国产免费叼嘿网站免费 | 成人免费网视频 | 久久久久久久久福利 | 手机av在线网站 | 日韩视频中文 | 中国一区二区视频 | 五月天丁香亚洲 | 午夜a区| 成年人在线视频观看 | 亚洲综合视频网 | 精品久久久999 | 国产精品欧美日韩 | 欧美性色黄 | 伊人五月天.com | 久久久av免费 | 国产黄色av网站 | 欧美精品久久久久久久免费 | 成人中心免费视频 | 亚洲伦理中文字幕 | 国产精品亚洲人在线观看 | 免费色网 | 欧美久久久久久久久久久 | 一级黄色片在线播放 | 久久综合狠狠综合 | 精品视频中文字幕 | 天天操天天摸天天干 | 国产中文字幕在线免费观看 | 午夜精品视频一区二区三区在线看 | 天天综合网天天综合色 | 麻豆小视频在线观看 | 美女福利视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产香蕉97碰碰碰视频在线观看 | 久久国产精品99久久久久久丝袜 | 国产精品大片免费观看 | 免费电影播放 | 超碰在线最新地址 | 天天天天综合 | 欧美精品在线观看免费 | 久操久 | 久久精品人人做人人综合老师 | 色综合久久88色综合天天人守婷 | 日韩黄色中文字幕 | 欧美一级日韩免费不卡 | 国产主播大尺度精品福利免费 | 精品国产乱码久久 | 97碰在线| 国产在线日韩 | 国产精品毛片久久蜜 | 午夜精品久久久久久久99热影院 | 狠狠色狠狠综合久久 | a级国产乱理伦片在线播放 久久久久国产精品一区 | av亚洲产国偷v产偷v自拍小说 | 在线a视频免费观看 | 亚洲色图美腿丝袜 | 西西人体www444 | 99中文字幕在线观看 | 毛片在线播放网址 | 中文字幕91视频 | 久草在线资源免费 | 人人干人人超 | 欧美在线一 | 黄色片毛片 | 国产精品成人一区二区 | 色视频国产直接看 | 欧洲不卡av| 国产婷婷一区二区 | 免费高清在线观看成人 | 亚洲精品中文字幕视频 | 丁香影院在线 | 一区二区精品在线观看 | 国产欧美精品一区二区三区 | 亚洲日本一区二区在线 | 91亚洲精品久久久中文字幕 | 中文在线免费看视频 | 国产99中文字幕 | 色婷婷在线视频 | 五月婷婷电影网 | 国产亚洲综合在线 | 五月天激情婷婷 | 国产精品久久 | 日韩精品一区不卡 | 日韩精品一区二区三区外面 | 韩国精品一区二区三区六区色诱 | 91在线视频免费观看 | 久久久电影 | 日本久久高清视频 | 日韩成人邪恶影片 | 国产伦理久久精品久久久久_ | 国产精品久久久久久久av大片 | 欧美综合久久久 | 欧美一级黄色视屏 | 欧美日产一区 | 波多野结衣一区三区 | 天天干天天插伊人网 | 亚洲成人av在线电影 | 亚洲精品乱码久久 | 激情欧美丁香 | 少妇bbr搡bbb搡bbb| 国产精品麻豆91 | 亚洲精品国产第一综合99久久 | 91在线免费公开视频 | 狠狠狠狠干 | 国产中出在线观看 | 日本爱爱免费视频 | 99婷婷| 久久影院一区 | 国产在线久久久 | 99久久er热在这里只有精品66 | av免费观看在线 | 97av视频| 国外av在线 | 91在线免费观看网站 | 欧美在线视频一区二区三区 | 国产精品观看视频 | 超碰在线9 | 天堂中文在线视频 | 国产午夜精品理论片在线 | 操夜夜操 | 国产日女人| 91麻豆精品国产91久久久使用方法 | 天天射天天爱天天干 | 欧美尹人 | 婷婷丁香综合 | 国产乱对白刺激视频不卡 | 日韩电影在线一区二区 | 9ⅰ精品久久久久久久久中文字幕 | 亚洲黄色成人av | 黄网站免费看 | 91精品国产欧美一区二区成人 | 国产一级特黄毛片在线毛片 | 日日躁天天躁 | 午夜国产一区二区 | 国产精品免费在线 | 日本精品视频一区 | 六月激情久久 | 国产永久免费高清在线观看视频 | 在线观看免费高清视频大全追剧 | 久久成人高清视频 | 在线观看一区 | 狠狠色丁香婷婷综合欧美 | 免费在线观看污 | 日本中文字幕在线电影 | 欧美在线一二 | 精品主播网红福利资源观看 | 人人澡人人添人人爽一区二区 | 国产a级免费 | 精品免费久久久久久 | 成人免费视频观看 | 久久99深爱久久99精品 | 爱爱av网站 | 香蕉精品视频在线观看 | 中文字幕免费高清在线观看 | 一本一本久久a久久精品综合小说 | 97精品久久人人爽人人爽 | 91成人在线视频 | 天天插天天干天天操 | 免费91在线观看 | 日韩中文字幕免费视频 | 永久免费在线 | 久久久久久久久精 | av大片免费看 | 97免费在线观看视频 | www.色午夜.com | 在线精品在线 | 日韩视频免费在线观看 | 久久免费黄色大片 | 婷婷综合伊人 | 精品自拍网 | 美女网站黄在线观看 | 麻豆果冻剧传媒在线播放 | 欧美日韩性| 欧美精品免费在线 | www.com黄色| 久视频在线播放 | 丁香六月在线观看 | 国产成人av一区二区三区在线观看 | 成年人在线观看免费视频 | 国产偷在线 | 在线观看视频在线观看 | 亚洲成人资源 | 亚洲精品在线电影 | 国产色婷婷在线 | 久久久久久久免费观看 | 特黄特黄的视频 | 免费性网站 | 欧美一二三在线 | 亚洲撸撸 | .国产精品成人自产拍在线观看6 | 欧美国产日韩久久 | 免费看黄色91 | 少妇视频一区 | 在线观看免费黄视频 | av三级在线看 | 国产成视频在线观看 | av中文字幕网站 | 一级做a爱片性色毛片www | 在线看国产一区 | a级国产片 | 成 人 黄 色视频免费播放 | 中文字幕日韩无 | 丁香婷婷综合激情五月色 | 午夜美女av | 成人av网站在线播放 | 在线探花| 日韩成人中文字幕 | 开心丁香婷婷深爱五月 | 精品黄色视 | 欧美激情视频一区二区三区 | 国产成人精品区 | 久久欧洲视频 | 丝袜少妇在线 | 在线亚洲欧美日韩 | 久久99亚洲精品久久久久 | 国产精品久久久久久a | 国产xxxxx在线观看 | 免费av一级电影 | 狠狠狠色丁香综合久久天下网 | 黄色高清视频在线观看 | 中文字幕国产一区 | 国精产品满18岁在线 | 在线免费观看成人 | 99久久日韩精品视频免费在线观看 | 射射射av| 国产精品久久久久三级 | 在线视频福利 | 久久久久久久久久久免费视频 | 蜜臀av网址 | 特黄特色特刺激视频免费播放 | 国产精品自产拍在线观看网站 | 久久精品网址 | 国产黄色精品在线 | 综合色综合 | 人人爽人人澡 | 婷婷天天色 | 久久视精品 | 亚洲精品五月 | 国产精品久久久久久999 | 人人爱人人做人人爽 | 久久免费视频在线观看 | 一个色综合网站 | 国产视频精品免费 | 91视频免费网址 | av成人免费 | 爱爱av网站 | 亚洲国产美女精品久久久久∴ | 久久黄色网页 | aaa毛片视频| 成人午夜久久 | 日韩高清免费在线观看 | 日韩激情视频 | 欧洲一区二区在线观看 | 国产视频一区二区在线 | 五月天婷婷在线观看视频 | 激情五月av | 亚洲高清精品在线 | 精品少妇一区二区三区在线 | 国产成人亚洲在线电影 | 国产成人精品免费在线观看 | 久久久午夜精品理论片中文字幕 | 激情久久综合网 | 久久久免费精品国产一区二区 | 久久精品久久久久电影 | 亚洲国产日韩精品 | 国色综合 | 国产中文字幕在线免费观看 | 免费在线黄色av | 欧美精品一区在线 | 亚洲精品综合欧美二区变态 | 欧美国产日韩在线观看 | 国产亚洲欧美在线视频 | 久久国产a | 麻豆视频一区二区 | av动态图片 | 成人精品一区二区三区电影免费 | 中文字幕韩在线第一页 | 婷婷综合导航 | 精品在线视频播放 | 337p日本欧洲亚洲大胆裸体艺术 | 国产成人精品亚洲 | 婷婷亚洲激情 | 久久久久久草 | 人人超在线公开视频 | 中文字幕一区二区在线观看 | 91色视频 | 2023年中文无字幕文字 | av网站有哪些 | 亚洲综合一区二区精品导航 | 欧美日本不卡视频 | 中文字幕免费高清 | 91精品视频免费看 | 99riav1国产精品视频 | 亚洲免费在线视频 | 日韩精品一区二区三区在线视频 | 国产黄色精品在线观看 | 国产精品久久久 | 五月激情站 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 色av色av色av| 日韩高清免费无专码区 | 成人一级在线 | 激情开心站 | 91福利区一区二区三区 | 97夜夜澡人人双人人人喊 | 99热在线国产精品 | 97热久久免费频精品99 | 亚洲欧美视频一区二区三区 | 99看视频在线观看 | www.色午夜,com | 日本中文字幕在线电影 | 国产精品福利午夜在线观看 | 欧美精品999 | 久久毛片网 | 又黄又爽又无遮挡的视频 | 久在线 | 18国产精品白浆在线观看免费 | 久久国产视频网站 | 色av男人的天堂免费在线 | 久久精品91视频 | 免费看一级特黄a大片 | 欧美日韩中文字幕综合视频 | 国产精品欧美日韩 | 国产一区二区三区免费视频 | 久久久久久久毛片 | 九九涩涩av台湾日本热热 | 在线观看欧美成人 | 欧美亚洲一区二区在线 | 黄色日本免费 | 美女视频是黄的免费观看 | 久久av网 | 国产一级二级av | 免费国产在线观看 | 天天操天天是 | 天天操天天干天天 | 日韩一级电影在线 | 日韩电影在线观看一区二区三区 | 99 国产精品 | 免费69视频 | 激情六月婷婷久久 | 成人福利在线播放 | av成人资源 | 99热在线精品观看 | 狠狠艹夜夜干 | 久久免费视频国产 | 香蕉视频亚洲 | 午夜精品久久久久久久久久久久久久 | 国产成人精品免费在线观看 | 国产高清99 | 91av电影网 | 国模视频一区二区三区 | 在线观看日韩一区 | 国产原创在线视频 | 99色免费 | 国产日韩精品在线观看 | 欧美永久视频 | 日日弄天天弄美女bbbb | 成人蜜桃视频 | 西西44人体做爰大胆视频 | 欧美在线aaa | 午夜视频色 | 日日日网| 在线观看www. | 久操视频在线观看 | 亚洲手机天堂 | 欧美色伊人| www操操 | 亚洲人在线| 日韩免费观看一区二区三区 | 久久艹久久 | 国产精品免费久久久久久久久久中文 | 免费在线黄色av | www..com黄色片 | 九九免费在线视频 | 国产精品成人一区二区三区 | 99麻豆视频 | 成人v| 99在线精品视频在线观看 | 女人高潮特级毛片 | 精品久久网| 欧美日韩国产精品久久 | 正在播放一区二区 | 成人午夜电影在线观看 | 丁香午夜婷婷 | 国产精品资源在线 | 国产一级电影免费观看 | 五月婷亚洲 | 日韩三级免费观看 | 久久视频在线看 | 国产精品白浆 | 欧美 日韩 视频 | 日韩欧美观看 | 欧美aa级 | 91中文字幕视频 |