我想知道Barebox for Beaglebone Black的逐步启动顺序。哪个函数将首先执行它如何将控制权移交给内核?
发布于 2021-11-25 17:15:52
我建议你先检查一下这个presentation。第3页和第4页在图片中显示了启动顺序。
如果您想要获取Beaglebone板的光盒二进制文件,您需要启用'CONFIG_MACH_BEAGLEBONE‘。
在'images/Makefile.am33xx‘文件中,你可以找到这个配置选项的名为'start_am33xx_beaglebone_sdram’的入口函数(SDRAM)
pblx-$(CONFIG_MACH_BEAGLEBONE) += start_am33xx_beaglebone_sdram
FILE_barebox-am33xx-beaglebone.img = start_am33xx_beaglebone_sdram.pblx
am33xx-barebox-$(CONFIG_MACH_BEAGLEBONE) += barebox-am33xx-beaglebone.img此入口函数是'arch/arm/boards/beaglebone/lowlevel.c‘文件中定义的“第一步”(低级别硬件初始化)。
那么调用链就像'barebox_arm_entry‘(’arch/arm/include/asm/barebox arm.h‘) -> 'barebox_*_pbl_start’('arch/arm/cpu/entry.c') -> ...
然后,将调用initcalls
#define core_initcall(fn) __define_initcall("1",fn,1)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define console_initcall(fn) __define_initcall("3",fn,3)
#define postconsole_initcall(fn) __define_initcall("4",fn,4)
#define mem_initcall(fn) __define_initcall("5",fn,5)
#define mmu_initcall(fn) __define_initcall("6",fn,6)
#define postmmu_initcall(fn) __define_initcall("7",fn,7)
#define coredevice_initcall(fn) __define_initcall("8",fn,8)
#define fs_initcall(fn) __define_initcall("9",fn,9)
#define device_initcall(fn) __define_initcall("10",fn,10)
#define crypto_initcall(fn) __define_initcall("11",fn,11)
#define of_populate_initcall(fn) __define_initcall("12",fn,12)
#define late_initcall(fn) __define_initcall("13",fn,13)
#define environment_initcall(fn) __define_initcall("14",fn,14)
#define postenvironment_initcall(fn) __define_initcall("15",fn,15)最后一个(环境) init调用将加载环境并运行'init‘脚本。使用boot/bootm/..barebox命令您可以加载'zImage','dtb','initrd‘,并为Linux内核传递命令行参数。
https://stackoverflow.com/questions/40083796
复制相似问题