源码参考
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)
boot 流程
spl 流程
S3C6410 ARMv7
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 board/samsung/smdk6410/smdk6410.c
board_init_r common/spl/spl.c
spl_board_init
spl_boot_mmc
mmc_bl2_copy
((void (*)(void))BL2_BASE)();
spl(BL1)(不能大于8KB) 被 bl0 加载 到 0x0c00 0000
spl(BL1) 运行在 0x0c00 0000 中, 位于 iRAM , 将 BL2 加载到 sdram(0x5FB00000) 中
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
其他
OK++--OK++--
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