瑞芯微rk35xx平台的U-Boot 启动流程

以下为瑞芯微rk35xx平台的U-Boot 启动流程,以uboot-2017 版本为例

仅列出一些重要步骤:

start.s
// 汇编环境
=> IRQ/FIQ/lowlevel/vbar/errata/cp15/gic // ARM架构相关的lowlevel初始化
=> _main
=> stack // 准备好C环境需要的栈
// 【第一阶段】C环境初始化,发起一系列的函数调用
=> board_init_f: init_sequence_f[]
initf_malloc
arch_cpu_init // 【SoC的lowlevel初始化】
serial_init // 串口初始化
dram_init // 【获取ddr容量信息】
reserve_mmu // 从ddr末尾开始往低地址reserve内存
reserve_video
reserve_uboot
reserve_malloc
reserve_global_data
reserve_fdt
reserve_stacks
dram_init_banksize
sysmem_init
setup_reloc // 确定U-Boot自身要reloc的地址
// 汇编环境
=> relocate_code // 汇编实现U-Boot代码的relocation
// 【第二阶段】C环境初始化,发起一系列的函数调用
=> board_init_r: init_sequence_r[]
initr_caches // 使能MMU和I/Dcache
initr_malloc
bidram_initr
sysmem_initr
initr_of_live // 初始化of_live
initr_dm // 初始化dm框架
board_init // 【平台初始化,最核心部分】
board_debug_uart_init // 串口iomux、clk配置
init_kernel_dtb // 【切到kernel dtb】!
clks_probe // 初始化系统频率
regulators_enable_boot_on // 初始化系统电源
io_domain_init // io-domain初始化
set_armclk_rate // __weak,ARM提频(平台有需求才实现)

dvfs_init // 宽温芯片的调频调压
rk_board_init // __weak,由各个具体平台进行实现
console_init_r
board_late_init // 【平台late初始化】
rockchip_set_ethaddr // 设置mac地址
rockchip_set_serialno // 设置serialno
setup_boot_mode // 解析"reboot xxx"命令、
// 识别按键和loader烧写模式、recovery
charge_display // U-Boot充电
rockchip_show_logo // 显示开机logo
soc_clk_dump // 打印clk tree
rk_board_late_init // __weak,由各个具体平台进行实现
run_main_loop // 【进入命令行模式,或执行启动命令】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋yyds

分享是一种美德,感谢金主打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值