U-Boot Proper                                         

│    arch/arm/mach-rockchip/board.c                         │
│                                                          │
│    reset → _main → board_init_f() → relocate →           │
│    board_init_r()                                         │
│                                                          │
│    board_init() ← Rockchip 公共实现                        │
│      ├─ board_debug_uart_init()                           │
│      ├─ early_download() 检测下载按键                      │
│      ├─ clks_probe()     时钟驱动                         │
│      ├─ regulators_enable_boot_on() 电源                  │
│      ├─ io_domain_init()                                 │
│      └─ rk_board_init() ← evb_rv1106.c 没重写             │
│                                                          │
│    board_late_init() ← 环境变量、启动参数                   │
│      ├─ rockchip_set_ethaddr()   MAC 地址                 │
│      ├─ rockchip_set_serialno()  序列号                   │
│      ├─ setup_boot_mode()  正常/恢复/下载                  │
│      ├─ env_fixup()  环境变量调整                          │
│      └─ rk_board_late_init() ← evb_rv1106.c 没重写         │
│                                                          │
│    进入命令行/bootcmd:                                     │
│      boot_fit; boot_android ${devtype} ${devnum};          │
│    → 加载 kernel/DTB → bootm → 启动 Linux            

解析

uboot核心层

  1. _main 函数
  2. board_init_f_alloc_reserve,board_init_f_init_reserve (两步)
  3. board_init_f 比较重要
  4. 省略一堆
  5. relocate 比较重要
  6. board_init_r 比较重要

板级层

uboot配置中

CONFIG_ARCH_ROCKCHIP=y

arch/arm/Makefile:80:

machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
# → machdirs = "arch/arm/mach-rockchip/"
  • RK芯片的默认入口就是这个文件
/uboot/arch/arm/mach-rockchip/board.c
  • 这个文件下有很多启动时会调用的函数,一般不会在这里进行修改

board.c到vb_rv1106.c使用__weak 弱函数实现分层架构,两个 .c 文件都生成 .o,链接器按"强符号覆盖弱符号"规则决定最终用哪个函数

  • 最后会走到某一个板子的目录下
/uboot/board/rockchip/evb_rv1106/evb_rv1106.c
  • 一般在这个目录下做板级修改。比如开机管理等。