OK6410A 开发板 (三) u-boot-2018.09 boot 解析

源码参考
https://blog.csdn.net/Golden_Chen/article/details/89077655
编译链采用 
gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi
编译方法
make O=build smdk6410_defconfig
make O=build CROSS_COMPILE=arm-linux-gnueabi- 
烧写方法
以 build/spl/u-boot-spl.bin(6.7K) 为 bl1/BL1
以 build/u-boot.bin(475K) 为 bl2/BL2

u-boot-1.1.6 是 编译出了一个 u-boot.bin ,然后将 u-boot.bin分为两个(bl1和bl2)
现在 是 编译出了两个,直接作为 bl1 和 bl2


以下面的布局烧写sd卡

# |________________|________|________|______________|______________|(END)                   
# BL2(1024个sector)  ENV(32)	BL1(16)  signature(1)   Reserved(1025) 

// (u-boot-1.1.6 用到了 793 KB,u-boot-2018.09用到了 1049 KB)

boot 流程

    1. spl boot 流程
spl 流程
                                                             S3C6410                                                     ARMv7

reset                                                       arch/arm/cpu/arm1176/start.S                                // arch/arm/cpu/armv7/start.S
    bl  lowlevel_init                                       board/samsung/smdk6410/lowlevel_init.S                      // arch/arm/cpu/armv7/lowlevel_init.S
    bl  _main                                               arch/arm/lib/crt0.S
        board_init_f                                        board/samsung/smdk6410/smdk6410.c // arch/arm/lib/spl.c
        board_init_r                                        common/spl/spl.c
            spl_board_init // board/samsung/smdk6410/smdk6410.c
                spl_boot_mmc // board/samsung/smdk6410/bl2_mmc_copy.c
                    mmc_bl2_copy // board/samsung/smdk6410/bl2_mmc_copy.c //将 bl2 加载到 sdram 中的 0x5FB00000
                    ((void (*)(void))BL2_BASE)(); // 0x5FB00000 // 这个 地址中存放的 是 u-boot 第二阶段的 reset 标号所在的第一条指令

spl(BL1)(不能大于8KB) 被 bl0 加载 到 0x0c00 0000

spl(BL1) 运行在 0x0c00 0000, 位于 iRAM ,  将 BL2 加载到 sdram(0x5FB00000)
    1. u-boot boot 流程

u-boot 第二阶段 的 开端 也是 在  arch/arm/cpu/arm1176/start.S 的 reset ,和 u-boot-spl 一样

reset                                                       arch/arm/cpu/arm1176/start.S
    bl  lowlevel_init                                       board/samsung/smdk6410/lowlevel_init.S
    bl  _main                                               arch/arm/lib/crt0.S
        board_init_f                                        common/board_f.c
        board_init_r                                        common/board_r.c
 			run_main_loop 									common/board_r.c
 				main_loop 									common/main.c
 					autoboot_command 						common/autoboot.c
 						run_command_list 					common/cli.c
 							parse_string_outer 				common/cli_hush.c
 								parse_stream_outer 			common/cli_hush.c
 									run_list 				common/cli_hush.c
 										run_list_real       common/cli_hush.c

其他

  • log
OK++--OK++-- // 第一个 OK++-- 是 spl(bl1) 打印的 , 第二个 OK++-- 是 u-boot(bl2) 打印的

U-Boot 2018.09-g067fae9-dirty (Mar 02 2021 - 10:30:53 +0800) for OK6410

****************************************
**    u-boot 201809                   **
**    Updated for OK6410 Board        **
**    Version 1.0 (2018/10/13)        **
**    OEM: Golden Creation            **
****************************************

CPU:  S3C6410 @532MHz
        Mclk = 532MHz,  Eclk = 96MHz
        Hclk = 133MHz,  Pclk = 66MHz
        Serial-source = PCLK (SYNC Mode)
Model: Samsung SMDK6410 based on S3C6410
Board:   SMDK6410
DRAM:  256 MiB
DRAM:  board_init_r +++
No arch specific invalidate_icache_all available!
dev(clock@1800000) bind!
dev(sdhci@7C200000): sdhc bind ...
NAND:  select s3c_nand_oob_mlc_64
nand_base: No NAND device found
0 MiB
MMC:   s3c64xx_clk_probe,probe...
dev(sdhci@7C200000): sdhc probe ...
dev(sdhci@7C200000): source clock "sclk-mmc0",freq=96000000
dev(sdhci@7C200000): sdhc probe go to sdhci_probe
dev: sdhc probe go to sdhci_init
sdhc probe go to sdhci_init end
S3C64XX_SDHCI: 0
initr_env +++
Loading Environment from MMC... s3c_set_clock, wanted: 0 Hz, actual: 1476923 Hz
s3c_set_clock, wanted: 0 Hz, actual: 1476923 Hz
s3c_set_clock, wanted: 0 Hz, actual: 48000000 Hz
OK
initr_env ---
LCD source clock:266000000 Hz, want: 29880900 Hz
LCD working VCLK:33250000 Hz
In:    serial
Out:   lcd
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
run_main_loop +++
Hit any key to stop autoboot:  0 

猜你喜欢

转载自blog.csdn.net/u011011827/article/details/114269259