uboot下init_sequence_f函数之reserve_arch

reserve_arch:
/* Architecture-specific memory reservation */
__weak int reserve_arch(void)
{
 return 0;
}
 
arch/x86/cpu/cpu.c

#ifndef CONFIG_EFI_STUB int reserve_arch(void) { #ifdef CONFIG_ENABLE_MRC_CACHE  mrccache_reserve(); #endif

#ifdef CONFIG_SEABIOS  high_table_reserve(); #endif

 return 0; } #endif

arch/x86/lib/efi/efi.c

/* Find any available tables and copy them to a safe place */ int reserve_arch(void) {  struct efi_info_hdr *hdr;

 debug("table=%lx\n", gd->arch.table);  if (!gd->arch.table)   return 0;

 hdr = (struct efi_info_hdr *)gd->arch.table;

 gd->start_addr_sp -= hdr->total_size;  memcpy((void *)gd->start_addr_sp, hdr, hdr->total_size);  debug("Stashing EFI table at %lx to %lx, size %x\n",        gd->arch.table, gd->start_addr_sp, hdr->total_size);  gd->arch.table = gd->start_addr_sp;

 return 0; }

uboot是一种常用的开源引导加载程序,用于嵌入式系统的引导启动。其中,board_init_r和board_init_f是uboot中的两个重要函数。 board_init_r函数是在uboot启动过程中执行的第一个函数。它负责执行一系列的初始化工作,例如初始化系统时钟、设置内存映射等。此函数被用于配置和初始化各个硬件模块,包括中断控制器、串口控制器、定时器等,以确保系统正常运行。该函数还读取并解析配置文件,加载设备树等操作,为后续的引导加载准备好必要的条件。 board_init_f函数是在board_init_r函数之后调用的。它用于进一步初始化系统,并执行一些与硬件相关的操作。例如,该函数可能会初始化网络接口、USB接口、存储设备等,并设置系统的默认环境变量。此外,board_init_f函数还负责将uboot的控制权交给操作系统的引导加载程序,从而完成uboot的使命。 通过调用board_init_r和board_init_f函数,uboot能够在系统启动时完成各种硬件的初始化和配置工作。这两个函数是uboot启动过程中的重要环节,确保系统能够顺利地加载操作系统并运行。同时,它们也为开发者提供了扩展uboot的接口,可以在这两个函数中添加自定义的初始化代码,以满足系统特定的需求。 总结来说,board_init_r和board_init_f是uboot中两个重要的函数,用于初始化和配置嵌入式系统的硬件,并为操作系统的加载做好准备。它们是uboot启动过程中不可或缺的一部分,保证系统的正常启动和运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值