spl 代码是如何运行的

如何确认编译过程中的 config定义

config.mk 介绍:

.config 文件是编译产生的config定义的宏,所有编译用到的宏,在这里确认。

.config 从defconfig来,这两个文件如何修改参考:

spl的defconfig 文件: ./configs/j5_fpga_defconfig

LDS文件怎么产生的?

编译使用的lds文件: ./spl/u-boot-spl.lds

./scripts/Makefile.spl 文件定义了lds文件到底使用哪一个。这里在defconfig中定义了 CONFIG_SPL_LDSCRIPT,所以使用这里定义的lds文件:arch/arm/cpu/armv8/hobot/u-boot-spl.lds

lds 文件的优先级是 CONFIG_SPL_LDSCRIPT定义的文件 > board/hobot/j5_fpga/u-boot-spl.lds > arch/arm/cpu/armv8/u-boot-spl.lds > archarm/cpu/u-boot-spl.lds. 优先级在./scripts/Makefile.spl 文件中定义 ,哪个在前,哪个优先级高。

lds文件中用到很多地址宏定义,在./include/configs/j5_fpga.h

代码执行顺序

代码运行起始地址 _start

./arch/arm/cpu/armv8/start.S

然后跳转到_main

arch/arm/lib/crt0_64.S

再跳转到board_init_f

arch/arm/lib/spl.c

经验分享 程序员 微信小程序 职场和发展