【uboot】移植学习笔记

2020-06-10:

uboot移植空余时间再搞,先搞定需要用的驱动

 

语法笔记:

1.Kconfig:

    imply if []: 弱反向依赖,当条件成立时,所依赖的项也被选中,但可被配置为n

1.u-boot.cfg

依赖关系: u-boot.cfg  <-  include/config.h/

rk3399uboot移植过程中,查看.config中CONFIG_SYS_SOC/BOARD/VENDOR的值和原sdk中并不相同,则在此之前步骤有误。

寻找关于这几个宏定义的位置,在u-boot.cfg中有对应的#define,对比新旧uboot文件夹中两个文件中的值可以确认.config文件中的相关变量差异与此有关,使用make -n 参数并将输出写入log,查找到有关的操作为:

make -f ./scripts/Makefile.autoconf u-boot.cfg

查看Makefile.autoconf文件,找到生成依赖为:

u-boot.cfg: include/config.h FORCE
	$(call cmd,u_boot_cfg)

查找config.h,追溯到根目录makefile,根据主Makefile进行梳理:

all: $(ALL-y) cfg
    cfg: u-boot.cfg
        u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg: include/config.h    #多个u-boot.cfg目标均依赖于这个config.h
            $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)    #这里知道u-boot.cfg的生成方法

...

2.firefly-linux_sdk配置过程

firefly的linux sdk封装了各类操作的执行脚本,其中uboot编译过程的对应关系为:

${LINUX_SDK_DIR}/u-boot/make.sh:
prepare    #完成make ${RK_UBOOT_DEFCONFIG}_defconfig的配置,其中宏定义在device/rockchip/rk3399/${BOARD}.mk中定义
...
make CROSS_COMPILE=${TOOLCHAIN_GCC}  all --jobs=${JOB} ${OUTOPT}    #完成make编译
...

make xxx_defconfig的生成规则:

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

# Basic helpers built in scripts/
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
outputmakefile:
ifneq ($(KBUILD_SRC),)
	$(Q)ln -fsn $(srctree) source
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif

3.移植关注的主要位置

arch/arm/mach-rockchip/rk3399/Kconfig:    #SOC相关
board/rockchip/evb_rk3399/Kconfig         #开发板相关
configs/firefly-rk3399_defconfig          #定制化配置

4.u-boot-2020-04增加2017-09的相关指令:

|CMD_LOAD_ANDROID: defconfig, cmd/Kconfig,
|_依赖-ANDROID_BOOT_IMG: common/Kconfig, ./Kconfig
  |_依赖-FASTBOOT:cmd/Kconfig:source "cmd/fastboot/Kconfig"

5.uboot-2020-04使用uboot-2017-09env参数启动,提示错误信息为:

无法识别boot_android和bootrkp命令,在uboot mainline代码中没有这个两个关键字,firefly的sdk中有,因此需要移植这两个命令.

boot_android->
    do_boot_android->
        android_bootloader_boot_flow->
            android_bootloader_boot_kernel

以此看来移植的重点便是将boot_andoird的一系列驱动移植到新版本中;

6.

你可能感兴趣的:(Linux)