这篇博客主要分析 init_sequence_f 函数指针数组中的setup_mon_len函数:
static const init_fnc_t init_sequence_f[] = {
setup_mon_len,
static int setup_mon_len(void)
{
#if defined(__ARM__) || defined(__MICROBLAZE__) //编译时传入定义__ARM__
gd->mon_len = (ulong)&__bss_end - (ulong)_start;
#elif defined(CONFIG_SANDBOX) || defined(CONFIG_EFI_APP)
gd->mon_len = (ulong)&_end - (ulong)_init;
#elif defined(CONFIG_NIOS2) || defined(CONFIG_XTENSA)
gd->mon_len = CONFIG_SYS_MONITOR_LEN;
#elif defined(CONFIG_NDS32) || defined(CONFIG_SH) || defined(CONFIG_RISCV)
gd->mon_len = (ulong)(&__bss_end) - (ulong)(&_start);
#elif defined(CONFIG_SYS_MONITOR_BASE)
gd->mon_len = (ulong)&__bss_end - CONFIG_SYS_MONITOR_BASE;
#endif
return 0;
}
//setup_mon_len功能是根据链接文件中的__bss_end 和_start标签计算uboot的大小,并初始化给gd->mon_len
这个函数功能比较简单,后面继续分析init_sequence_f 中的其他函数