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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

uboot-spl编译流程

發(fā)布時(shí)間:2025/3/21 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uboot-spl编译流程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
[uboot] (第二章)uboot流程——uboot-spl編譯流程
2016年10月27日 20:40:47閱讀數(shù):2675

以下例子都以project X項(xiàng)目tiny210(s5pv210平臺(tái),armv7架構(gòu))為例

[uboot] uboot流程系列:?
[project X] tiny210(s5pv210)上電啟動(dòng)流程(BL0-BL2)

建議先看《[project X] tiny210(s5pv210)上電啟動(dòng)流程(BL0-BL2)》,根據(jù)例子了解一下上電之后的BL0\BL1\BL2階段,以及各個(gè)階段的運(yùn)行位置,功能。

=================================================================================

一、uboot-spl編譯和生成文件

spl的編譯是編譯uboot的一部分,和uboot.bin走的是兩條編譯流程,這個(gè)要重點(diǎn)注意。?
正常來(lái)說(shuō),會(huì)先編譯主體uboot,也就是uboot.bin.再編譯uboot-spl,也就是uboot-spl.bin,雖然編譯命令是一起的,但是編譯流程是分開(kāi)的。

1、編譯方法

在project X項(xiàng)目中,所有鏡像,包括uboot、kernel、rootfs都是放在build目錄下進(jìn)行編譯的。具體去參考該項(xiàng)目build的Makefile的實(shí)現(xiàn)。?
假設(shè)config已經(jīng)配置完成,在build編譯命令如下:

make uboot
  • 1

Makefile中對(duì)應(yīng)的命令如下:

BUILD_DIR=$(shell pwd) OUT_DIR=$(BUILD_DIR)/out UBOOT_OUT_DIR=$(OUT_DIR)/u-boot UBOOT_DIR=$(BUILD_DIR)/../u-boot uboot:mkdir -p $(UBOOT_OUT_DIR)make -C $(UBOOT_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(UBOOT_OUT_DIR) $(BOARD_NAME)_defconfigmake -C $(UBOOT_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(UBOOT_OUT_DIR) ## -C $(UBOOT_DIR) 指定了要在../uboot,也就是uboot的代碼根目錄下執(zhí)行make ## CROSS_COMPILE=$(CROSS_COMPILE) 指定了交叉編譯器 ## KBUILD_OUTPUT=$(UBOOT_OUT_DIR) 指定了最終編譯的輸出目錄是build/out/u-boot.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

最終,相當(dāng)于進(jìn)入了uboot目錄執(zhí)行了make動(dòng)作。?
也就是說(shuō)spl的編譯是編譯uboot的一部分,和uboot.bin走的是兩條編譯流程,這個(gè)要重點(diǎn)注意。?
正常來(lái)說(shuō),會(huì)先編譯主體uboot,也就是uboot.bin.再編譯uboot-spl,也就是uboot-spl.bin,雖然編譯命令是一起的,但是編譯流程是分開(kāi)的。

2、生成文件?
最終編譯完成之后,會(huì)在project-x/build/out/u-boot/spl下生成如下文件:

arch common dts include u-boot-spl u-boot-spl.cfg u-boot-spl.map board drivers fs tiny210-spl.bin u-boot-spl.bin u-boot-spl.lds u-boot-spl-nodtb.bin
  • 1
  • 2

其中,arch、common、dts、include、board、drivers、fs是對(duì)應(yīng)代碼的編譯目錄,各個(gè)目錄下都會(huì)生成相應(yīng)的built.o,是由同目錄下的目標(biāo)文件連接而成。?
重點(diǎn)說(shuō)一下以下幾個(gè)文件:

文件說(shuō)明
u-boot-spl初步鏈接后得到的spl文件
u-boot-spl-nodtb.bin在u-boot-spl的基礎(chǔ)上,經(jīng)過(guò)objcopy去除符號(hào)表信息之后的可執(zhí)行程序
u-boot-spl.bin在不需要dtb的情況下,直接由u-boot-spl-nodtb.bin復(fù)制而來(lái),也就是編譯spl的最終目標(biāo)
tiny210-spl.bin由s5pv210平臺(tái)決定,需要在u-boot-spl.bin的基礎(chǔ)上加上16B的header用作校驗(yàn)
u-boot-spl.ldsspl的連接腳本
u-boot-spl.map連接之后的符號(hào)表文件
u-boot-spl.cfg由spl配置生成的文件

二、uboot-spl編譯流程

1、編譯整體流程

根據(jù)零、2生成的文件說(shuō)明可知簡(jiǎn)單流程如下:?
(1)各目錄下built-in.o的生成

源文件、代碼文件編譯、匯編目標(biāo)文件同目錄目標(biāo)文件連接built-in目標(biāo)文件

對(duì)應(yīng)二、2(5)的實(shí)現(xiàn)?
(2)由所有built-in.o以u(píng)-boot-spl.lds為連接腳本通過(guò)連接來(lái)生成u-boot-spl

built-in目標(biāo)文件以u(píng)-boot-spl.lds為連接腳本進(jìn)行統(tǒng)一連接u-boot-spl

對(duì)應(yīng)二、2(4)的實(shí)現(xiàn)?
(3)由u-boot-spl生成u-boot-spl-nodtb.bin

u-boot-splobjcopy動(dòng)作去掉符號(hào)信息表u-boot-spl-nodtb.bin

對(duì)應(yīng)二、2(3)的實(shí)現(xiàn)?
(4)由u-boot-spl-nodtb.bin生成u-boot-spl.bin,也就是spl的bin文件

u-boot-spl-nodtb.bin在不需要dtb的情況下,復(fù)制u-boot-spl.bin

對(duì)應(yīng)二、2(2)的實(shí)現(xiàn)

后續(xù)的編譯的核心過(guò)程就是按照上述的四個(gè)編譯流程就是按照上述四個(gè)步驟來(lái)的。


2、具體編譯流程分析

我們直接從make uboot命令分析,也就是從uboot下的Makefile的依賴(lài)關(guān)系來(lái)分析整個(gè)編譯流程。?
注意,這個(gè)分析順序和上述的整體編譯流程的順序是反著的。

  • (1)入口分析?
    在project-x/u-boot/Makefile中
all: $(ALL-y)ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin ## 當(dāng)配置了CONFIG_SPL,make的時(shí)候就會(huì)執(zhí)行spl/u-boot-spl.bin這個(gè)目標(biāo)spl/u-boot-spl.bin: spl/u-boot-spl@: spl/u-boot-spl: tools prepare $(if $(CONFIG_OF_SEPARATE),dts/dt.dtb)$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all ## obj=spl 會(huì)在out/u-boot目錄下生成spl目錄 ## -f $(srctree)/scripts/Makefile.spl 說(shuō)明執(zhí)行的Makefile文件是scripts/Makefile.spl ## $(MAKE) all 相當(dāng)于make的目標(biāo)是all
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

綜上,由CONFIG_SPL來(lái)決定是否需要編譯出spl文件,也就是BL1。?
后續(xù)相當(dāng)于執(zhí)行了?“make -f u-boot/scripts/Makefile.spl obj=spl all”?命令。?
在project-x/u-boot/scripts/Makefile.spl中,

SPL_BIN := u-boot-spl ALL-y += $(obj)/$(SPL_BIN).bin $(obj)/$(SPL_BIN).cfg ## 所以最終目標(biāo)是spl/u-boot-spl.bin和spl/u-boot-spl.cfg
  • 1
  • 2
  • 3

在project-x/u-boot/scripts/Makefile.spl中建立了spl/u-boot-spl.bin的依賴(lài)關(guān)系,后續(xù)make過(guò)程的主體都是在Makefile.spl中。


  • (2)spl/u-boot-spl.bin的依賴(lài)關(guān)系

在project-x/u-boot/scripts/Makefile.spl中

$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-nodtb.bin FORCE$(call if_changed,copy) ## $(obj)/$(SPL_BIN).bin依賴(lài)于$(obj)/$(SPL_BIN)-nodtb.bin。 ## $(call if_changed,copy)表示當(dāng)依賴(lài)文件發(fā)生變化時(shí),直接把依賴(lài)文件復(fù)制為目標(biāo)文件,即直接把$(obj)/$(SPL_BIN)-nodtb.bin復(fù)制為$(obj)/$(SPL_BIN).bin
  • 1
  • 2
  • 3
  • 4

如上述Makefile代碼spl/u-boot-spl.bin依賴(lài)于spl/u-boot-spl-nodtb.bin,并且由spl/u-boot-spl-nodtb.bin復(fù)制而成。?
對(duì)應(yīng)于上述二、1(4)流程。


  • (3)spl/u-boot-spl-nodtb.bin的依賴(lài)關(guān)系?
    在project-x/u-boot/scripts/Makefile.spl中
$(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE$(call if_changed,objcopy) $(obj)/$(SPL_BIN)-nodtb.bin依賴(lài)于$(obj)/$(SPL_BIN)。也就是spl/u-boot-spl-nodtb.bin依賴(lài)于spl/u-boot-spl. ## $(call if_changed,objcopy)表示當(dāng)依賴(lài)文件發(fā)生變化時(shí),將依賴(lài)文件經(jīng)過(guò)objcopy處理之后得到目標(biāo)文件。 ## 也就是通過(guò)objcopy把spl/u-boot-spl的符號(hào)信息以及一些無(wú)用信息去掉之后,得到了spl/u-boot-spl-nodtb.bin。
  • 1
  • 2
  • 3
  • 4
  • 5

如上述Makefile代碼spl/u-boot-spl-nodtb.bin依賴(lài)于spl/u-boot-spl,并且由spl/u-boot-spl經(jīng)過(guò)objcopy操作之后得到。?
對(duì)應(yīng)于上述二、1(3)流程。


  • (4)spl/u-boot-spl的依賴(lài)關(guān)系?
    在project-x/u-boot/scripts/Makefile.spl中
$(obj)/$(SPL_BIN): $(u-boot-spl-init) $(u-boot-spl-main) $(obj)/u-boot-spl.lds FORCE$(call if_changed,u-boot-spl) ## $(call if_changed,u-boot-spl)來(lái)生成目標(biāo) ## $(call if_changed,u-boot-spl)對(duì)應(yīng)cmd_u-boot-spl命令
  • 1
  • 2
  • 3
  • 4

如上,spl/u-boot-spl依賴(lài)于$(u-boot-spl-init) 、$(u-boot-spl-main)和spl/u-boot-spl.ld,并且最終會(huì)調(diào)用cmd_u-boot-spl來(lái)生成spl/u-boot-spl。?
cmd_u-boot-spl實(shí)現(xiàn)如下:

quiet_cmd_u-boot-spl = LD $@cmd_u-boot-spl = (cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \$(patsubst $(obj)/%,%,$(u-boot-spl-init)) --start-group \$(patsubst $(obj)/%,%,$(u-boot-spl-main)) --end-group \$(PLATFORM_LIBS) -Map $(SPL_BIN).map -o $(SPL_BIN))
  • 1
  • 2
  • 3
  • 4
  • 5

將cmd_u-boot-spl通過(guò)echo命令打印出來(lái)之后得到如下(拆分出來(lái)看的):

cmd_u-boot-spl=( cd spl && /build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi-ld -T u-boot-spl.lds --gc-sections -Bstatic --gc-sections arch/arm/cpu/armv7/start.o --start-group arch/arm/mach-s5pc1xx/built-in.o arch/arm/cpu/armv7/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o board/samsung/tiny210/built-in.o board/samsung/common/built-in.o common/init/built-in.o drivers/built-in.o dts/built-in.o fs/built-in.o --end-group arch/arm/lib/eabi_compat.o -L /home/disk3/xys/temp/project-x/build/arm-none-linux-gnueabi-4.8/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3 -lgcc -Map u-boot-spl.map -o u-boot-spl)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

可以看出上述是一條連接命令,以spl/u-boot-spl.ld為鏈接腳本,把$(u-boot-spl-init) 、$(u-boot-spl-main)的指定的目標(biāo)文件連接到u-boot-spl中。?
連接很重要的東西就是連接標(biāo)識(shí),也就是?$(LD)?$(LDFLAGS)?$(LDFLAGS_$(@F)的定義。?
嘗試把$(LD) \$(LDFLAGS) \$(LDFLAGS_\$(@F)) 打印出來(lái),結(jié)果如下:

LD=/home/disk3/xys/temp/project-x/build/arm-none-linux-gnueabi-4.8/bin/arm-none-linux-gnueabi-ld LDFLAGS= LDFLAGS_u-boot-spl=-T u-boot-spl.lds --gc-sections -Bstatic --gc-sections ## $(LDFLAGS_$(@F)對(duì)應(yīng)于LDFLAGS_u-boot-spl
  • 1
  • 2
  • 3
  • 4

也就是說(shuō)在LDFLAGS_u-boot-spl中指定了鏈接腳本。?
重點(diǎn)關(guān)注$(LDFLAGS_$(@F))的由來(lái)

## @F是一個(gè)自動(dòng)化變量,提取目標(biāo)的文件名,比如目標(biāo)是$(obj)/$(SPL_BIN),也就是spl/u-boot-spl,那么@F就是u-boot-spl。 ## 所以LDFLAGS_$(@F)就是LDFLAGS_u-boot-spl ## 定義如下 LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL) ifneq ($(CONFIG_SPL_TEXT_BASE),) LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE) endif ## 當(dāng)指定CONFIG_SPL_TEXT_BASE時(shí),會(huì)配置連接地址。在tiny210項(xiàng)目中,因?yàn)閟pl是地址無(wú)關(guān)代碼設(shè)計(jì),故沒(méi)有設(shè)置連接地址。## $(LDFLAGS_FINAL)在如下幾個(gè)地方定義了 ## ./config.mk:19:LDFLAGS_FINAL := ## ./config.mk:80:LDFLAGS_FINAL += -Bstatic ## ./arch/arm/config.mk:16:LDFLAGS_FINAL += --gc-sections ## ./scripts/Makefile.spl:43:LDFLAGS_FINAL += --gc-sections ## 綜上:最后LDFLAGS_u-boot-spl=-T u-boot-spl.lds --gc-sections -Bstatic --gc-sections就可以理解了。 ## 對(duì)應(yīng)于上述二、1(2)流程。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

  • (5)u-boot-spl-init & u-boot-spl-main依賴(lài)關(guān)系(代碼是如何被編譯的)?
    先看一下這兩個(gè)值打印出來(lái)的
u-boot-spl-init=spl/arch/arm/cpu/armv7/start.ou-boot-spl-main= spl/arch/arm/mach-s5pc1xx/built-in.o spl/arch/arm/cpu/armv7/built-in.o spl/arch/arm/cpu/built-in.o spl/arch/arm/lib/built-in.o spl/board/samsung/tiny210/built-in.o spl/board/samsung/common/built-in.o spl/common/init/built-in.o spl/drivers/built-in.o spl/dts/built-in.o spl/fs/built-in.o
  • 1
  • 2
  • 3

可以觀察到是一堆目標(biāo)文件的路徑。這些目標(biāo)文件最終都要被連接到u-boot-spl中。?
u-boot-spl-init & u-boot-spl-main的定義如下代碼:?
project-x/u-boot/scripts/Makefile.spl

u-boot-spl-init := $(head-y) head-y := $(addprefix $(obj)/,$(head-y)) ## 加spl路徑 ## ./arch/arm/Makefile定義了如下: ## head-y := arch/arm/cpu/$(CPU)/start.ou-boot-spl-main := $(libs-y) libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/) libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ libs-$(CONFIG_SPL_FRAMEWORK) += common/spl/ libs-y += common/init/ libs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ cmd/ libs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/ libs-y += drivers/ libs-y += dts/ libs-y += fs/ libs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/ libs-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/ libs-$(CONFIG_SPL_NET_SUPPORT) += net/ libs-y := $(addprefix $(obj)/,$(libs-y)) ## 加spl路徑 u-boot-spl-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) ## 這里注意一下,u-boot-spl-dir是libs-y沒(méi)有加built-in.o后綴的時(shí)候被定義的。 libs-y := $(patsubst %/, %/built-in.o, $(libs-y)) ## 加built-in.o文件后綴
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

那么u-boot-spl-init & u-boot-spl-main是如何生成的呢??
需要看一下對(duì)應(yīng)的依賴(lài)如下:

$(sort $(u-boot-spl-init) $(u-boot-spl-main)): $(u-boot-spl-dirs) ; ## 也就是說(shuō)$(u-boot-spl-init) $(u-boot-spl-main)依賴(lài)于$(u-boot-spl-dirs) ## sort函數(shù)根據(jù)首字母進(jìn)行排序并去除掉重復(fù)的。 ## u-boot-spl-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) ## $(filter %/, $(libs-y)過(guò)濾出'/'結(jié)尾的字符串,注意,此時(shí)$(libs-y)的內(nèi)容還沒(méi)有加上built-in.o文件后綴 ## patsubst去掉字符串中最后的'/'的字符。 ## 最后u-boot-spl-dirs打印出來(lái)如下: ## u-boot-spl-dirs=spl/arch/arm/mach-s5pc1xx spl/arch/arm/cpu/armv7 spl/arch/arm/cpu spl/arch/arm/lib spl/board/samsung/tiny210 spl/board/samsung/common spl/common/init spl/drivers spl/dts spl/fs ## 也就是從libs-y改造而來(lái)的。## $(u-boot-spl-dirs) 的依賴(lài)規(guī)則如下: $(u-boot-spl-dirs):$(Q)$(MAKE) $(build)=$@
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

也就是會(huì)對(duì)每一個(gè)目標(biāo)文件依次執(zhí)行make?$(build)=目標(biāo)文件?
$(build)定義如下:?
project-x/u-boot/scripts/Kbuild.include

build := -f $(srctree)/scripts/Makefile.build obj
  • 1

以arch/arm/mach-s5pc1xx為例?
“$(MAKE)?$(build)=$@”展開(kāi)后格式如下?
make -f ~/code/temp/project-x/u-boot/scripts/Makefile.build obj=spl/arch/arm/mach-s5pc1xx。

Makefile.build定義built-in.o、.lib以及目標(biāo)文件.o的生成規(guī)則。這個(gè)Makefile文件生成了子目錄的.lib、built-in.o以及目標(biāo)文件.o。?
Makefile.build第一個(gè)編譯目標(biāo)是__build,如下

PHONY := __build __build: ## 所以會(huì)直接編譯執(zhí)行__build這個(gè)目標(biāo),其依賴(lài)如下 __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \$(subdir-ym) $(always)@: ## 和built-in.o相關(guān)的是依賴(lài)builtin-target。下面來(lái)看這個(gè)依賴(lài)。builtin-target := $(obj)/built-in.o ## 以obj=spl/arch/arm/mach-s5pc1xx為例,那么builtin-target就是spl/arch/arm/mach-s5pc1xx/built-in.o.## 依賴(lài)關(guān)系如下: $(builtin-target): $(obj-y) FORCE$(call if_changed,link_o_target) ## $(call if_changed,link_o_target)將所有依賴(lài)連接到$(builtin-target),也就是相應(yīng)的built-in.o中了。 ## 具體實(shí)現(xiàn)可以查看cmd_link_o_target的實(shí)現(xiàn),這里不詳細(xì)說(shuō)明了。## 那么$(obj-y)是從哪里來(lái)的呢?是從相應(yīng)目錄下的Makefile中include得到的。 # The filename Kbuild has precedence over Makefile kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) include $(kbuild-file) ## 當(dāng)obj=spl/arch/arm/mach-s5pc1xx時(shí),得到對(duì)應(yīng)的kbuild-file=u-boot/arch/arm/mach-s5pc1xx/Makefile ## 而在u-boot/arch/arm/mach-s5pc1xx/Makefile中定義了obj-y如下: ## obj-y = cache.o ## obj-y += reset.o ## obj-y += clock.o ## 對(duì)應(yīng)obj-y對(duì)應(yīng)一些目標(biāo)文件,由C文件編譯而來(lái),這里就不說(shuō)明了。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

對(duì)應(yīng)于上述二、1(1)流程。


  • (6)spl/u-boot-spl.lds依賴(lài)關(guān)系?
    這里主要是為了找到一個(gè)匹配的連接文件。
$(obj)/u-boot-spl.lds $(obj)/u-boot-spl.lds: $(LDSCRIPT) FORCE$(call if_changed_dep,cpp_lds) ## 依賴(lài)于$(LDSCRIPT),$(LDSCRIPT)定義了連接腳本所在的位置, ## 然后把鏈接腳本經(jīng)過(guò)cpp_lds處理之后復(fù)制到$(obj)/u-boot-spl.lds中,也就是spl/u-boot-spl.lds中。 ## cpp_lds處理具體實(shí)現(xiàn)看cmd_cpu_lds定義,具體是對(duì)應(yīng)連接腳本里面的宏定義進(jìn)行展開(kāi)。## $(LDSCRIPT)定義如下 ifeq ($(wildcard $(LDSCRIPT)),)LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot-spl.lds endif ifeq ($(wildcard $(LDSCRIPT)),)LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot-spl.lds endif ifeq ($(wildcard $(LDSCRIPT)),)LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot-spl.lds endif ifeq ($(wildcard $(LDSCRIPT)),) $(error could not find linker script) endif ## 也就是說(shuō)依次從board/板級(jí)目錄、cpudir目錄、arch/架構(gòu)/cpu/目錄下去搜索u-boot-spl.lds文件。 ## 例如,tiny210(s5vp210 armv7)最終會(huì)在./arch/arm/cpu/下搜索到u-boot-spl.lds
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

綜上,最終指定了project-X/u-boot/arch/arm/cpu/u-boot-spl.lds作為連接腳本。


三、一些重點(diǎn)定義

  • 1、CONFIG_SPL?
    在二、2(1)中說(shuō)明。?
    用于指定是否需要編譯SPL,也就是是否需要編譯出uboot-spl.bin文件

  • 2、連接腳本的位置?
    在二、2(6)中說(shuō)明。?
    對(duì)于tiny210(s5pv210 armv7)來(lái)說(shuō),連接腳本的位置在?
    project-x/u-boot/arch/arm/cpu/u-boot-spl.lds

  • 3、CONFIG_SPL_TEXT_BASE?
    在二、2(4)中說(shuō)明。?
    用于指定SPL的連接地址,可以定義在板子對(duì)應(yīng)的config文件中。

  • 4、CONFIG_SPL_BUILD?
    在編譯spl過(guò)程中,會(huì)配置?
    project-x/scripts/Makefile.spl中定義了如下

KBUILD_CPPFLAGS += -DCONFIG_SPL_BUILD
  • 1

也就是說(shuō)在編譯uboot-spl.bin的過(guò)程中,CONFIG_SPL_BUILD這個(gè)宏是被定義的。

四、uboot-spl鏈接腳本說(shuō)明

1、連接腳本整體分析

相對(duì)比較簡(jiǎn)單,直接看連接腳本的內(nèi)容project-x/u-boot/arch/arm/cpu/u-boot-spl.lds?
前面有一篇分析連接腳本的文章了《[kernel 啟動(dòng)流程] 前篇——vmlinux.lds分析》,可以參考一下。

ENTRY(_start) //定義了地址為_(kāi)start的地址,所以我們分析代碼就是從這個(gè)函數(shù)開(kāi)始分析的!!! SECTIONS {. = 0x00000000;//以下定義文本段. = ALIGN(4);.text :{__image_copy_start = .; //定義__image_copy_start這個(gè)標(biāo)號(hào)地址為當(dāng)前地址*(.vectors) //所有目標(biāo)文件的vectors段,也就是中斷向量表連接到這里來(lái)CPUDIR/start.o (.text*) //start.o文件的.text段鏈接到這里來(lái)*(.text*) //所有目標(biāo)文件的.text段鏈接到這里來(lái)}//以下定義只讀數(shù)據(jù)段. = ALIGN(4);.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }//以下定義數(shù)據(jù)段. = ALIGN(4);.data : {*(.data*) //所有目標(biāo)文件的.data段鏈接到這里來(lái)}//以下定義u_boot_list段,具體功能未知. = ALIGN(4);.u_boot_list : {KEEP(*(SORT(.u_boot_list*)));}. = ALIGN(4);__image_copy_end = .; //定義__image_copy_end符號(hào)的地址為當(dāng)前地址 //從__image_copy_start 到__image_copy_end的區(qū)間,包含了代碼段和數(shù)據(jù)段。//以下定義rel.dyn段,這個(gè)段用于uboot資源重定向的時(shí)候使用,后面會(huì)說(shuō)明.rel.dyn : {__rel_dyn_start = .; //定義__rel_dyn_start 符號(hào)的地址為當(dāng)前地址,后續(xù)在代碼中會(huì)使用到*(.rel*)__rel_dyn_end = .; //定義__rel_dyn_end 符號(hào)的地址為當(dāng)前地址,后續(xù)在代碼中會(huì)使用到 //從__rel_dyn_start 到__rel_dyn_end 的區(qū)間,應(yīng)該是在代碼重定向的過(guò)程中會(huì)使用到,后續(xù)遇到再說(shuō)明。}.end :{*(.__end)}_image_binary_end = .; //定義_image_binary_end 符號(hào)的地址為當(dāng)前地址//以下定義bss段.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*) } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

2、符號(hào)表中需要注意的符號(hào)

project-x/build/out/u-boot/spl/u-boot-spl.map

Linker script and memory map .text 0x00000000 0xd100x00000000 __image_copy_start = . *(.vectors)0x00000000 _start0x00000020 _undefined_instruction0x00000024 _software_interrupt0x00000028 _prefetch_abort0x0000002c _data_abort0x00000030 _not_used0x00000034 _irq0x00000038 _fiq ...0x00000d10 __image_copy_end = . .rel.dyn 0x00000d10 0x00x00000d10 __rel_dyn_start = .*(.rel*).rel.iplt 0x00000000 0x0 arch/arm/cpu/armv7/start.o0x00000d10 __rel_dyn_end = . .end*(.__end)0x00000d10 _image_binary_end = ..bss 0x00000d10 0x00x00000d10 __bss_start = .*(.bss*)0x00000d10 . = ALIGN (0x4)0x00000d10 __bss_end = .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

重點(diǎn)關(guān)注?
* __image_copy_start & __image_copy_end?
界定了代碼的位置,用于重定向代碼的時(shí)候使用,后面碰到了再分析。?
* _start?
在u-boot-spl.lds中ENTRY(_start),也就規(guī)定了代碼的入口函數(shù)是_start。所以后續(xù)分析代碼的時(shí)候就是從這里開(kāi)始分析。?
* __rel_dyn_start & __rel_dyn_end?
* _image_binary_end

五、tiny210(s5pv210)的額外操作

1、為什么tiny210的spl需要額外操作?需要什么額外操作?

建議先參考《[project X] tiny210(s5pv210)上電啟動(dòng)流程(BL0-BL2)》一文。?
tiny210只支持SD啟動(dòng)的方式和NAND FLASH啟動(dòng)的方式。?
從《[project X] tiny210(s5pv210)上電啟動(dòng)流程(BL0-BL2)》一文中,我們已經(jīng)得知了當(dāng)使用SD啟動(dòng)的方式和NAND FLASH啟動(dòng)的方式,也就是BL1鏡像存放在SD上或者nand flash上時(shí),s5pv210中固化的BL0,都需要對(duì)BL1的前16B的header做校驗(yàn)。BL1就是我們所說(shuō)的uboot-spl.bin,但是默認(rèn)編譯出來(lái)的uboot-spl.bin就是一個(gè)純粹的可執(zhí)行文件,并沒(méi)有加上特別的header。?
因此,我們需要在生成uboot-spl.bin之后,再為其加上16B的header后生成tiny210-spl.bin。?
16B的header格式如下:

地址數(shù)據(jù)
0xD002_0000BL1鏡像包括header的長(zhǎng)度
0xD002_0004保留,設(shè)置為0
0xD002_0008BL1鏡像除去header的校驗(yàn)和
0xD002_000c保留,設(shè)置為0

2、如何生成header?(如何生成tiny210-spl.bin)

project-x/u-boot/scripts/Makefile.spl

ifdef CONFIG_SAMSUNG ALL-y += $(obj)/$(BOARD)-spl.bin endif ## 當(dāng)平臺(tái)是SAMSUNG平臺(tái)的時(shí)候,也就是CONFIG_SAMSUNG被定義的時(shí)候,就需要生成對(duì)應(yīng)的板級(jí)spl.bin文件,例如tiny210的話,就應(yīng)該生成對(duì)應(yīng)的spl/tiny210-spl.bin文件。ifdef CONFIG_S5PC110 $(obj)/$(BOARD)-spl.bin: $(obj)/u-boot-spl.bin$(objtree)/tools/mks5pc1xxspl $< $@ ## 如果是S5PC110系列的cpu的話,則使用如上方法打上header。tiny210的cpu是s5pv210的,屬于S5PC110系列,所以走的是這路。 ## $(objtree)/tools/mks5pc1xxspl對(duì)應(yīng)于編譯uboot時(shí)生成的build/out/u-boot/tools/mks5pc1xxspl ## 其代碼路徑位于u-boot/tools/mks5pc1xxspl.c,會(huì)根據(jù)s5pc1xx系列的header規(guī)則為輸入bin文件加上16B的header,具體參考代碼。 ## 這里就構(gòu)成了u-boot-spl.bin到tiny210-spl.bin的過(guò)程了。 else $(obj)/$(BOARD)-spl.bin: $(obj)/u-boot-spl.bin$(if $(wildcard $(objtree)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl),\$(objtree)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl,\$(objtree)/tools/mkexynosspl) $(VAR_SIZE_PARAM) $< $@ endif endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

這里就構(gòu)成了u-boot-spl.bin到tiny210-spl.bin的過(guò)程了。

綜上,spl的編譯就完成了。

總結(jié)

以上是生活随笔為你收集整理的uboot-spl编译流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

91麻豆精品国产91久久久无需广告 | 精品在线免费视频 | 在线观看中文字幕dvd播放 | 91日本在线播放 | 国产糖心vlog在线观看 | 国产日韩视频在线播放 | 夜夜操网 | 久久综合狠狠综合久久综合88 | 96精品高清视频在线观看软件特色 | 香蕉视频久久 | 99视频 | 精品国产资源 | 99精品热视频只有精品10 | 国产精品麻豆三级一区视频 | 欧美大片www | 99自拍视频在线观看 | 久久久国产精品麻豆 | 国产黄色片在线免费观看 | 婷婷午夜| 最新婷婷色| 99久久久国产精品免费99 | 91一区二区三区久久久久国产乱 | 天天草天天草 | 91丨九色丨勾搭 | 热久久免费视频 | 国产又黄又爽又猛视频日本 | 91在线视频免费观看 | 日韩啪啪小视频 | www.伊人网| 日韩在线一二三区 | 日韩在线观看一区二区 | 狠狠做深爱婷婷综合一区 | 国产成人高清av | 久久久久久国产精品久久 | 欧美伦理一区 | 亚洲精品综合久久 | 国产精品亚州 | 久久久免费播放 | 探花视频在线版播放免费观看 | 在线看黄色av | 麻豆视频入口 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产第一页在线播放 | 国产综合视频在线观看 | 精品久久中文 | 日本69hd| 五月激情综合婷婷 | 在线观看免费色 | 国产精彩视频 | 天天爽夜夜爽人人爽一区二区 | www激情久久| 久久久久久久福利 | 日韩精品视频网站 | www.成人精品 | 欧美日韩二区三区 | japanesexxxxfreehd乱熟 | 超碰在线97免费 | 国产又黄又爽又猛视频日本 | 欧美激情视频在线观看免费 | 亚洲精品在线视频 | 免费一级片久久 | 色99色 | 欧美一级激情 | 91av视频在线观看免费 | 91精品国产乱码久久桃 | 国产精彩在线视频 | 欧美a级在线免费观看 | 色综合色综合久久综合频道88 | 亚洲影院国产 | 欧美91视频 | 91亚洲精品久久久 | 欧美日韩国产欧美 | 色狠狠综合天天综合综合 | 天天综合网在线观看 | 久久久国产一区二区三区四区小说 | 人人超在线公开视频 | 日韩久久精品一区二区 | 国产午夜不卡 | 国偷自产中文字幕亚洲手机在线 | 国产精品毛片一区二区三区 | av一级二级 | 国产高清视频在线播放 | 97精品伊人 | 午夜久久福利 | 日韩av视屏在线观看 | 国产又粗又猛又黄又爽的视频 | 欧美精品久久久久久久亚洲调教 | 久久理论电影网 | 国产色网站 | 免费a现在观看 | 久久色在线观看 | 国产精品久久久久久久久免费看 | 99欧美| 欧美一区三区四区 | 久久成人高清 | 精品久久久久久综合日本 | 久久久久国产成人免费精品免费 | 精品一二三四视频 | 欧美一区二区精美视频 | 九九99视频 | 日韩经典一区二区三区 | 色偷偷人人澡久久超碰69 | 欧美日韩视频在线观看一区二区 | 91精品在线免费视频 | 狠狠久久综合 | 国内精品久久久久影院优 | 久久精品国产第一区二区三区 | 成人久久免费 | 99久久精品国产一区二区成人 | 在线精品一区二区 | 91免费视频黄 | 精品一区二区在线播放 | 免费福利在线视频 | 2022久久国产露脸精品国产 | 国产高清日韩 | 在线免费观看黄网站 | 久久精品79国产精品 | 国内精品久久久久久久久久 | 亚洲乱码精品久久久久 | 欧美片一区二区三区 | 中文字幕资源网在线观看 | 伊人国产在线观看 | 视频国产在线 | 黄色免费视频在线观看 | 国产特级毛片aaaaaa | 国产在线欧美在线 | 九九热精品国产 | 人人澡人人添人人爽一区二区 | 五月综合网 | 天天综合在线观看 | 激情黄色一级片 | 成人免费观看视频网站 | 国产精品久久久久高潮 | 99久久婷婷国产一区二区三区 | 亚洲动漫在线观看 | 日本精品久久久久 | 亚洲人在线7777777精品 | 免费的国产精品 | 亚洲aaa毛片| 97在线视频免费看 | 日本精品一区二区在线观看 | 国产成人一二片 | 国内外成人在线 | 免费看国产一级片 | 久久久精品欧美一区二区免费 | 亚洲精品久久久久久久蜜桃 | 欧美视频在线二区 | 亚洲精品久久久久久中文传媒 | 视频 国产区 | 97狠狠干 | 激情婷婷欧美 | 午夜国产一区二区 | 久久国产精品99国产精 | 亚洲精品国产精品乱码不99热 | 日韩黄色大片在线观看 | 国产性xxxx | 久久久久久久影院 | 最新av在线免费观看 | 精品久久亚洲 | 成人亚洲精品国产www | 国产美女无遮挡永久免费 | 国产这里只有精品 | 超碰激情在线 | 亚洲国产伊人 | 国产精品久久久久久一二三四五 | 91免费观看网站 | 国产午夜三级一二三区 | 黄网站免费看 | 小草av在线播放 | 色 免费观看 | 在线观看视频中文字幕 | 男女拍拍免费视频 | 中文不卡视频在线 | 亚洲综合国产精品 | 免费视频久久久久久久 | 碰超在线 | www99精品| 免费麻豆视频 | 麻豆视频成人 | 国产精品久久一区二区无卡 | 亚州国产视频 | 精品国产激情 | 在线亚洲天堂网 | 337p日本大胆噜噜噜噜 | 亚洲97在线| 国产亚洲在 | 五月天中文字幕 | 国产福利一区二区三区视频 | 免费一级特黄毛大片 | 久久精品国产精品亚洲精品 | 日韩视频在线不卡 | 国产成人免费精品 | 日韩av偷拍 | 国产很黄很色的视频 | 五月花婷婷 | 黄网站免费大全入口 | 久久久国际精品 | 国产精品久久久久久电影 | avove黑丝 | 日本精品视频在线观看 | 国产99久久久精品 | 国产精品美女免费视频 | 99久久国产免费看 | 久久久久麻豆v国产 | se婷婷 | 999久久国精品免费观看网站 | 欧美人人 | 久草在线在线视频 | 亚洲综合欧美激情 | 一级性视频 | 国产免费一区二区三区网站免费 | 人人爽人人爽人人爽人人爽 | 五月天电影免费在线观看一区 | 精品国产成人av | 黄污视频网站大全 | 色网站国产精品 | 亚洲国产伊人 | 在线观看一级片 | 99se视频在线观看 | 色偷偷88888欧美精品久久 | 亚洲国产精品va在线看黑人动漫 | 亚洲天堂精品视频 | 色综合久久88| 黄色免费电影网站 | 99精品网站| 免费国产一区二区视频 | 欧美巨大 | 久久天天躁狠狠躁亚洲综合公司 | av中文字幕av | 91免费在线看片 | 中文字幕电影高清在线观看 | 韩国av在线播放 | 国产免费又黄又爽 | 国产97视频在线 | 久久久久国产精品免费免费搜索 | 波多野结衣精品在线 | 91麻豆看国产在线紧急地址 | 久久新视频 | 91中文字幕在线视频 | 色噜噜日韩精品欧美一区二区 | 日韩黄色大片在线观看 | 免费看网站在线 | 久久超级碰视频 | 免费日韩一区二区三区 | 亚洲a在线观看 | 91精品办公室少妇高潮对白 | 国产成人在线综合 | 国产高清av免费在线观看 | 国产精品国产亚洲精品看不卡15 | 成人影视免费看 | 国产手机在线观看视频 | 中文资源在线播放 | 992tv成人免费看片 | 久久久亚洲国产精品麻豆综合天堂 | 中文一区在线观看 | 婷婷成人亚洲综合国产xv88 | 天天天干夜夜夜操 | 国产在线专区 | av免费网站在线观看 | 亚洲一区二区三区四区在线视频 | 亚洲va综合va国产va中文 | 97超碰在线久草超碰在线观看 | 久久久久免费网 | 中文字幕第一页在线 | 丁香色天天 | 成人免费色 | 四虎在线影视 | 色美女在线| 一级片免费观看视频 | 国产手机精品视频 | 亚洲精品美女久久17c | 在线观看 国产 | 在线视频中文字幕一区 | 精品av在线播放 | 欧美激情第八页 | 一级黄色片在线播放 | 成年人在线 | 欧美日本高清视频 | 九九久久精品 | 国产精品嫩草影院9 | 久久av免费 | 国产精品 欧美 日韩 | 国产精品第三页 | 一级性av| 久久久久免费视频 | 久久精品一二区 | 天天天天天天天天操 | 五月婷婷久久综合 | 久久美女精品 | 天天干天天做天天操 | 天天爽综合网 | 国产高清av免费在线观看 | 国产精品精品久久久久久 | 日韩在线播放av | 黄色官网在线观看 | 国产成人精品一区二区 | 九九av| 成人欧美一区二区三区黑人麻豆 | 69精品视频 | 在线精品观看 | 九九视频精品在线 | 精品一区精品二区高清 | 亚洲3级 | 中文字幕永久免费 | 狠狠狠狠狠狠狠 | 欧美成人在线网站 | 黄色午夜网站 | 久久久久麻豆 | 国产精品乱码一区二区视频 | 国产精品久久精品国产 | 成av在线| 免费视频xnxx com | 91探花系列在线播放 | 天天干天天草天天爽 | 久久久久久久久久网站 | 久草在线99 | 狠狠操狠狠插 | 五月天婷婷在线视频 | 91精品国产欧美一区二区成人 | 国产视频一二区 | 香蕉蜜桃视频 | 免费a v在线| 国产亚州精品视频 | 久久99精品久久久久久 | 在线观看亚洲电影 | 中文字幕 婷婷 | 91久久一区二区 | 婷婷六月中文字幕 | 国产玖玖精品视频 | 91在线免费视频观看 | 亚洲成av人电影 | 国产日本高清 | 国产精品综合久久久 | 91在线亚洲 | 91亚洲夫妻| 日韩精品免费在线观看 | 亚洲精品理论片 | 丁香久久综合 | 91成人免费电影 | 97在线精品视频 | 中文字幕在线观看一区二区三区 | 日韩激情影院 | 五月婷婷六月丁香激情 | 欧美日韩一区二区视频在线观看 | 韩国中文三级 | 青青河边草免费观看完整版高清 | 日韩免费中文字幕 | 亚洲国产精品成人女人久久 | 五月天网页 | 黄色软件在线看 | 亚洲精品午夜国产va久久成人 | 色狠狠婷婷 | 日韩高清不卡一区二区三区 | 99999精品视频 | 欧美色婷婷| 婷婷六月网| 黄色a大片 | 久久久久亚洲国产精品 | 国产91区 | 日韩 国产 | 超碰人在线 | 色资源网免费观看视频 | 一级a性色生活片久久毛片波多野 | 日韩成人在线免费观看 | 99久久99久久免费精品蜜臀 | 欧美va天堂va视频va在线 | 日韩在线免费视频观看 | 精品久久免费 | 成人91在线 | 免费黄a | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 欧美日韩一区二区在线观看 | 久久专区 | 亚洲精品在线免费 | 国产精品综合在线观看 | 免费在线国产精品 | 在线观看黄色大片 | 免费黄a大片 | 日本中文字幕在线一区 | 日韩在线高清视频 | 日本黄色大片儿 | 久久无码精品一区二区三区 | 欧美在线free| 人人草在线视频 | 992tv又爽又黄的免费视频 | av电影 一区二区 | 91亚洲国产成人 | 免费试看一区 | 免费麻豆视频 | 在线午夜 | www.狠狠色.com | 91亚洲永久精品 | 欧美在线不卡一区 | 日批视频在线播放 | 日韩二三区 | 国产精品福利久久久 | 一区二区精品视频 | 日韩欧美有码在线 | 亚洲黄色免费电影 | 亚洲人成精品久久久久 | 久久综合久久88 | 五月开心激情网 | 黄色小网站在线观看 | 丁香五月网久久综合 | 国色综合| 97免费视频在线播放 | www91在线观看| 日韩二区在线 | 亚洲资源在线网 | 国产亚洲精品女人久久久久久 | 国产精品久久久久国产精品日日 | 国产精品视频全国免费观看 | 国产一区二区电影在线观看 | 国产精品99久久久精品 | 91麻豆网站 | 久久影院午夜论 | 99视频国产精品免费观看 | av天天澡天天爽天天av | 最近免费观看的电影完整版 | 亚洲视频国产 | 国产一级二级视频 | 亚洲欧洲国产精品 | 在线免费观看黄色小说 | 国产视频精品久久 | 青草视频网 | 国产拍揄自揄精品视频麻豆 | 黄色小说18 | 久久精品亚洲综合专区 | 五月婷婷另类国产 | 狠狠网亚洲精品 | 亚洲a网| 女人久久久久 | 69国产精品视频免费观看 | 国产精品精品国产婷婷这里av | 丁香婷婷激情国产高清秒播 | 色香蕉在线视频 | 正在播放五月婷婷狠狠干 | 欧美日韩一区三区 | 91av资源网 | 国产精品久久一区二区三区不卡 | 一个色综合网站 | 国语久久| 毛片网在线播放 | 日韩黄色免费看 | 精品久久久久久久久久久久久久久久 | 天天操天天操天天操 | 中文字幕无吗 | 日韩精品不卡在线观看 | 免费高清在线观看电视网站 | 有码中文字幕在线观看 | 四虎国产精品成人免费影视 | 亚洲精品午夜国产va久久成人 | 中文字幕亚洲五码 | 国产亚洲一区二区在线观看 | 欧美巨大| 国产美女精品视频免费观看 | 久久综合久色欧美综合狠狠 | 国产精品成人国产乱一区 | 91av网址| 天天射射天天 | 亚洲国产网址 | 日韩午夜小视频 | 国产精品video爽爽爽爽 | 日本久久久久久科技有限公司 | 欧美专区亚洲专区 | 国产在线a免费观看 | 午夜久草 | 中文字幕影片免费在线观看 | 欧美日本不卡高清 | 精品欧美小视频在线观看 | 这里只有精品视频在线 | 六月激情久久 | 91成人免费视频 | 五月婷婷六月丁香 | 亚洲久草网 | 久久视频这里有久久精品视频11 | 久草在线视频免费资源观看 | 欧美日韩大片在线观看 | 亚洲视频aaa| 亚洲人天堂 | 免费av在| 日本久久久久 | 亚洲九九九在线观看 | 国产在线观看xxx | 97色综合| 久久免费影院 | 福利视频区 | 婷婷色视频 | 免费黄在线观看 | 97国产精品一区二区 | 国产精品一区免费观看 | 国产一级免费视频 | 一区二区三区免费网站 | 人人干人人爽 | 91香蕉视频在线 | 成人av教育 | 九九九在线观看 | 麻豆成人精品 | 91精品国产综合久久婷婷香蕉 | www.97视频| 久久综合久久综合久久综合 | 99视频在线播放 | 成年人网站免费在线观看 | 久久免费a | 爱爱av在线 | 国产精品va在线播放 | 国产成人91 | 五月婷婷在线视频 | 免费99视频 | 久久理论视频 | 韩国av一区二区三区在线观看 | 久久精品99精品国产香蕉 | 91丨九色丨首页 | 精品国产不卡 | 国内精品久久久久久久影视简单 | 欧美国产不卡 | 蜜臀av性久久久久av蜜臀三区 | 亚洲视频免费在线观看 | 日日夜夜狠狠 | 日韩精品观看 | 精品国产亚洲一区二区麻豆 | 丰满少妇对白在线偷拍 | 狠狠干狠狠艹 | 国产精品二区三区 | 五月丁婷婷 | 人人添人人澡人人澡人人人爽 | 超碰国产在线观看 | 久久中文欧美 | 免费看黄在线看 | 亚洲成人频道 | 中文字幕在线观看完整版 | 中文字幕高清在线 | 亚洲视频免费在线看 | 成人a免费| 深夜视频久久 | 国产午夜精品一区二区三区四区 | 2022国产精品视频 | 国产精品一区二区三区电影 | 国产福利免费在线观看 | 国产夫妻av在线 | 欧美日韩精品免费观看 | 国产精品久久久久久久久久久久冷 | 国产一级做a | 国产一区二区不卡视频 | 久久精品国产成人精品 | 一本一本久久a久久精品牛牛影视 | 九九久 | 一区三区在线欧 | 日韩1页| 久久黄色精品视频 | 99亚洲精品在线 | 99热这里只有精品免费 | 久久久久麻豆 | 99精品在线免费 | 欧美了一区在线观看 | 亚洲v欧美v国产v在线观看 | 国产久草在线 | 色窝资源 | 日日草天天干 | 欧美aa一级片 | 国产精品第十页 | 国内精品久久久久影院日本资源 | 免费视频97| 国产精品久久麻豆 | 香蕉影视app | 日韩免费不卡视频 | 欧美日产在线观看 | 国产精品尤物视频 | 日韩精品久久中文字幕 | 天天综合网入口 | 欧美综合干 | 免费国产一区二区视频 | 一区二区三区电影在线播 | 美女网站黄免费 | 久久久91精品国产一区二区精品 | 91久久精品日日躁夜夜躁国产 | www.五月婷婷 | 久久免费国产视频 | 人人超在线公开视频 | 免费色视频在线 | 久草在线费播放视频 | 久久免费视频2 | 亚洲免费在线视频 | 日本中文在线播放 | 亚洲区另类春色综合小说 | 久久中文欧美 | 91中文字幕在线播放 | 98久久| 欧美精品一二三 | 久久黄色片 | 亚洲va在线va天堂 | 人人爱在线视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 综合久色 | 男女视频国产 | av在线中文| 中字幕视频在线永久在线观看免费 | 婷婷夜夜 | 国产精品视频全国免费观看 | 欧美一区二区在线免费观看 | 91一区二区三区在线观看 | 久久久久久久久黄色 | 天天色天天射天天干 | 狠狠色丁香久久婷婷综合五月 | 亚洲黄色免费电影 | 久久狠狠干 | 久草网站 | 久久久久国产精品免费 | 成人免费视频网站在线观看 | 亚洲国产操 | 国产一级久久 | 亚洲综合视频在线播放 | 成人免费亚洲 | 日韩精品资源 | 国产免费观看视频 | 久久躁日日躁aaaaxxxx | 午夜天使 | 久久中文字幕在线视频 | 激情六月婷婷久久 | 欧美另类交人妖 | 中文字幕在线播放第一页 | 一级黄色片在线播放 | 亚洲成 人精品 | 在线91av| 三级黄色理论片 | 亚洲精品女人 | 91精品一区二区三区久久久久久 | 欧美精品做受xxx性少妇 | 福利一区在线 | 夜色资源站国产www在线视频 | 精品国产黄色片 | 国产福利精品一区二区 | 99久久日韩精品免费热麻豆美女 | 欧美日韩在线播放一区 | 精品自拍sae8—视频 | 久久艹国产视频 | 国产精品热视频 | 亚洲精品资源在线观看 | av福利电影 | av在线激情 | 国产中文字幕在线看 | 99超碰在线观看 | 日韩一区二区免费在线观看 | 在线观看午夜 | 天海冀一区二区三区 | 黄色大片日本免费大片 | 欧美一级日韩三级 | 午夜精品一区二区三区可下载 | 国产成人精品电影久久久 | 人人藻人人澡人人爽 | 日韩在线高清免费视频 | 最新成人av| 欧美一区二区视频97 | 视频在线一区二区三区 | 特级毛片在线 | 中文字幕在线观看免费 | 激情在线免费视频 | 欧美巨大荫蒂茸毛毛人妖 | 天天干天天拍天天操天天拍 | 日本高清免费中文字幕 | 黄色www在线观看 | 久久不射电影院 | 蜜臀av麻豆 | 久久精品视频在线播放 | 国产精品第十页 | 99国产精品久久久久久久久久 | 久久久电影网站 | 国产精品国产三级国产专区53 | 色操插| 婷婷亚洲五月色综合 | 天天干天天操天天入 | 午夜资源站 | 亚洲欧洲精品视频 | 国产精品一区二区av影院萌芽 | 国产一区精品在线观看 | 亚洲成人第一区 | 久久狠狠干 | 久久人91精品久久久久久不卡 | 激情综合网色播五月 | 亚洲国产成人精品在线 | 青青河边草免费直播 | av一区在线 | 97超碰人人干 | 欧美成人播放 | 一区二区精品国产 | 国产黄免费在线观看 | 天天操天天操天天干 | 国产美女久久久 | 日韩一区精品 | 午夜av片| 日韩激情网 | 国产中文 | 二区三区中文字幕 | 久久综合狠狠综合久久狠狠色综合 | 在线看片91 | 日韩乱码中文字幕 | 久久精品中文字幕一区二区三区 | av片中文| 国产精品一区专区欧美日韩 | 五月天网页 | 91在线91| av电影免费| 一本色道久久综合亚洲二区三区 | 亚洲国产999 | 天天躁日日躁狠狠躁av麻豆 | 久久精品首页 | 中文字幕观看av | 99久久99视频只有精品 | 国产精品亚洲片在线播放 | 丁香六月天婷婷 | 九九九九热精品免费视频点播观看 | 成人av网站在线播放 | 国产一区二区三区免费在线观看 | 亚洲一区久久 | 97在线观看免费高清完整版在线观看 | 国产精品一区二区免费 | 一级免费黄视频 | 久久国产影视 | 四虎伊人 | 一区精品久久 | 麻豆视频免费播放 | 免费午夜av| 久久激情视频 久久 | 国产精品久久久久久久av电影 | 特级毛片爽www免费版 | 一级做a视频 | 91激情小视频 | 国产精品美女999 | 亚洲黄色影院 | 丝袜少妇在线 | 在线播放国产精品 | 一 级 黄 色 片免费看的 | 精品中文字幕视频 | 人人涩 | 国产毛片久久 | 日韩精品一区不卡 | 亚洲婷婷在线视频 | 91传媒在线观看 | 奇米先锋| 成人在线免费观看视视频 | 天天操天天操天天 | 久久综合色婷婷 | 黄色免费在线看 | 国产精品黄色影片导航在线观看 | 亚洲婷婷在线 | 日韩电影中文字幕 | ,午夜性刺激免费看视频 | 97视频亚洲 | 一区二区三区免费播放 | 亚洲无吗av | 日韩av一区二区三区 | 婷婷丁香色| av福利网址导航 | 国产69精品久久久久99 | 成人免费影院 | 亚洲无吗视频在线 | 中国一区二区视频 | 亚洲激精日韩激精欧美精品 | 亚洲综合视频在线播放 | 99精品国产亚洲 | 午夜精品一区二区三区在线视频 | 国产色女人 | 国产对白av | 色91在线视频 | 国产精品入口麻豆www | 99精品在线视频观看 | 香蕉视频久久 | 国产在线91在线电影 | 黄色网在线播放 | 国内视频一区二区 | 深夜激情影院 | 日韩三级不卡 | 欧美在线观看视频免费 | 九九爱免费视频 | 中文字幕在线观看第一区 | se婷婷| 久久不见久久见免费影院 | 91精品对白一区国产伦 | 久久看看| av看片网 | 成人网大片 | 日韩在线观看中文 | 久久不射电影院 | 日韩中文字幕国产精品 | 久久国产精品一二三区 | 高清av免费一区中文字幕 | 韩国一区二区三区视频 | 超碰人人超 | 久久久人人人 | 久久99亚洲精品久久 | 久99热| 99视频国产在线 | 人人射av | 亚洲国产中文字幕在线视频综合 | 成人黄色小视频 | 天天草天天干天天 | 在线看片一区 | 久久久精品二区 | 久草免费福利在线观看 | 偷拍久久久 | 国产在线国偷精品产拍免费yy | 91成人亚洲 | 久久成人综合视频 | 久草在线免费色站 | 中文区中文字幕免费看 | 国产精品岛国久久久久久久久红粉 | 久久男女视频 | 91香蕉视频好色先生 | 国产精品va在线播放 | 日本精品在线 | wwwww.国产 | 精品视频9999 | 久久中文字幕导航 | 麻豆国产精品视频 | www.国产高清| 亚洲精品网址在线观看 | 久久一区91| 色综合天天射 | 9在线观看免费高清完整 | 黄色视屏在线免费观看 | 五月天高清欧美mv | 午夜精品导航 | 一级片色播影院 | 日韩肉感妇bbwbbwbbw | 久青草视频| 日韩美女久久 | 日本精品视频在线播放 | 亚洲国产剧情av | 久久免费试看 | 四虎影视久久久 | 99久久精品国产免费看不卡 | 国产色视频123区 | 久久精品79国产精品 | 国产91学生粉嫩喷水 | 国产一区播放 | 成 人 黄 色视频免费播放 | 激情综合网五月激情 | 成人啊 v | 国产热re99久久6国产精品 | 日日干激情五月 | 91传媒91久久久 | 日韩欧美中文 | 六月激情丁香 | 亚洲综合成人专区片 | 久久久久久黄 | 成人免费一区二区三区在线观看 | 亚洲精品视频网 | a在线v| 久久午夜影视 | 啪啪激情网 | 在线观看自拍 | 中文字幕在线视频一区二区 | 国产亚洲精品久久久久久无几年桃 | 丁香综合激情 | 午夜在线日韩 | 激情五月婷婷 | 三级av免费| 视频成人免费 | 久久久午夜剧场 | 91九色在线视频观看 | 国产淫片免费看 | 亚洲高清激情 | 久草精品在线观看 | 成人cosplay福利网站 | 丁香电影小说免费视频观看 | 国产福利小视频在线 | av一级片| 国产99久久久国产精品免费二区 | a黄色片在线观看 | 在线观看av免费观看 | 欧美日韩另类在线观看 | 久久久久久电影 | 国产小视频免费在线网址 | 日韩一区二区免费播放 | 中文字幕视频三区 | 久久精品美女 | 国产色小视频 | 中文字幕高清免费日韩视频在线 | 久久免费视频在线观看6 | 天天干一干 | 国产精品视频免费 | 亚洲精品国偷自产在线99热 | 日韩美在线观看 | 久久欧美视频 | 国产专区视频 | 国产一区国产精品 | 亚洲国产成人精品在线观看 | 99超碰在线播放 | 在线观看国产高清视频 | 九九免费在线观看 | 亚洲欧美一区二区三区孕妇写真 | 91免费视频网站在线观看 | 日韩小视频| 日韩在线视频网站 | 日韩丝袜 | 日韩一级片大全 | 深爱激情综合网 | 欧美成人a在线 | 欧美 国产 视频 | 青青河边草免费观看 | 日韩精品免费一区二区三区 | 亚洲一区二区视频 | 中文字幕一区二区三区在线播放 | 免费黄av| 在线看国产一区 | 91九色pron| 成人资源在线 | www.午夜视频 | 婷婷丁香色综合狠狠色 | 国产免费a| 91精品国产综合久久婷婷香蕉 | 日韩视频中文字幕在线观看 | 色欧美88888久久久久久影院 | 久久久人人人 | 日韩在线免费看 | 久久久资源网 | 91重口视频| 欧美精品久 | 国产在线观看h | 亚洲精品视频在线观看视频 | 久久久久久免费视频 | 特级毛片网站 | 国内偷拍精品视频 | 亚州人成在线播放 | 日韩特黄av | 亚洲成a人片77777kkkk1在线观看 | 就操操久久 | 国产精品久久久久久久久久三级 | 免费日韩一区二区三区 | 99久久99久久免费精品蜜臀 | 久久精品91久久久久久再现 | 亚洲国产资源 | 亚洲成a人片77777kkkk1在线观看 | 精品国产99 | 不卡视频在线 | 玖玖玖影院 | 黄色成人av网址 | 国产精品亚洲片在线播放 | 欧美午夜理伦三级在线观看 | av一区二区三区在线观看 | 国产玖玖视频 | 午夜视频一区二区 | 国产精品美女免费视频 | 手机在线观看国产精品 | 亚洲美女在线一区 | 一区二区三区电影在线播 | 日日夜夜av| 亚洲 欧洲av| 99热精品在线 | 爱色婷婷 | 久久专区 | 亚洲综合在线一区二区三区 | 成年人电影免费在线观看 | 欧美日韩免费在线观看视频 | 中文字幕免费高清 | 久久影院一区 | 国产成人一级电影 | 日韩色视频在线观看 | 99九九免费视频 | 黄污视频网站 | 亚洲欧美日韩一二三区 | 日韩精品一区二区三区不卡 | 99热只有精品在线观看 | 久久影视精品 | 久久精品中文字幕免费mv | 免费亚洲视频在线观看 | 日日干美女| 日本最新一区二区三区 | 欧美日韩国产mv | 狠狠干综合 | 欧洲高潮三级做爰 | 久久久久久久久久久久久9999 | 最新av网址在线观看 | 国产黄色在线网站 | 亚洲国产欧美在线人成大黄瓜 | 日女人免费视频 | 中文国产成人精品久久一 | 国产一区网 | 黄色av电影 | 亚洲精品视频在线观看免费 | 一区二区三区四区五区六区 | 超级碰99 | 外国av网 | 亚洲日本韩国一区二区 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产a网站 | 婷婷激情在线观看 | 日韩素人在线观看 | 91丨porny丨九色 | 狠色狠色综合久久 | 国产a国产 | 99超碰在线播放 | 国产精品美女久久久久久免费 | 亚洲激情一区二区三区 | 亚洲专区中文字幕 | 超碰免费观看 | 久操中文字幕在线观看 | 中文字幕视频在线播放 |