u-boot 怎么放入SD卡
s3c6410 启动 流程中
irom 中的 bl0 加载 sd 卡 的 bin 文件到 iRAM
- u-boot.bin 有 202KB,怎么放入仅有8KB的iRAM
查看 CHxx_IROM_ApplicationNote_Rev1.00_080801.pdf 参考书
参考书 要求
如果 u-boot.bin大于8KB,则必须 分为两部分
且第一部分 小于等于 8KB , 且被放到非易失性存储器(有6种)的 指定位置(指定位置由参考书(其实是iROM中的程序)决定)
且第二部分 要被 第一部分加载 , 第二部分被放置的位置由第一部分的加载函数决定
- u-boot-1.1.6 的 u-boot.bin 怎么分成两部分,且第二部分放到哪里
分成两部分
第一部分:dd if=u-boot.bin of=./bl1.bin bs=512 count=16
第二部分:cp u-boot.bin ./bl2.bin
两部分在sd卡中的放置地址
第一部分的放置地址由 参考书决定
第二部分的放置地址由 第一部分的代码 决定 :bl1 前面 544个sector 处
# |________________|________|________|______________|______________|(END)
# BL2(512个sector) ENV(32) BL1(16) signature(1) Reserved(1025)
注意 :
BL2的大小 和 ENV 的大小 都是 u-boot 代码中定义的
在 新的代码(2021.01)中, ENV的大小没变, BL2 的大小变为了 1024 , 也就是说 BL2 可以有512KB
- 第一部分的代码 怎么确定第二部分的位置及如何搬运第二部分
SD卡中的代码 如何搬运 确定了 第二部分在哪里
如何搬运的代码
#ifdef CONFIG_BOOT_MOVINAND
ldr sp, _TEXT_PHY_BASE
bl movi_bl2_copy
b after_copy
#endif
搬运代码核心
CopyMovitoMem(HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, (uint *)BL2_BASE, MOVI_INIT_REQUIRED);
#define CopyMovitoMem(a,b,c,d,e) (((int(*)(int, uint, ushort, uint *, int))(*((uint *)(TCM_BASE + 0x8))))(a,b,c,d,e))
HSMMC_CHANNEL
0
用的哪一个channel : 0
MOVI_BL2_POS
#define MOVI_BL2_POS (MOVI_LAST_BLKPOS - MOVI_BL1_BLKCNT - MOVI_BL2_BLKCNT - MOVI_ENV_BLKCNT)
从哪个位置搬移 : 全部的块大小(由iROM中的代码算出来,位于signature处) - BL大小(16个sector,由手册决定) - BL2大小(512个,由u-boot决定,所以第二部分最大为256KB) - 环境所占大小(32个,由u-boot决定)
MOVI_BL2_BLKCNT
#define MOVI_BL2_BLKCNT (PART_SIZE_BL / MOVI_BLKSIZE)
搬移多少个块 : 512个块,256KB
BL2_BASE
#define BL2_BASE (CFG_PHY_UBOOT_BASE)
搬到哪里: 0x5FE00000,位于sdram
MOVI_INIT_REQUIRED
0
是否重新初始化:否
BL1 加载BL2
#ifdef CONFIG_BOOT_ONENAND_IROM
ldr sp, _TEXT_PHY_BASE
bl onenand_bl2_copy
b after_copy
#endif
skip_hw_init:
stack_setup:
#ifdef CONFIG_MEMORY_UPPER_CODE
ldr sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0xc)
#else
ldr r0, _TEXT_BASE
sub r0, r0, #CFG_MALLOC_LEN
sub r0, r0, #CFG_GBL_DATA_SIZE
#ifdef CONFIG_USE_IRQ
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12
#endif
clear_bss:
ldr r0, _bss_start
ldr r1, _bss_end
mov r2, #0x00000000
clbss_l:
str r2, [r0]
add r0, r0, #4
cmp r0, r1
ble clbss_l
ldr pc, _start_armboot
_start_armboot:
.word start_armboot
_start_armboot 和 start_armboot 位于 sdram
System.map:23:5fe000e4 t _start_armboot
System.map:148:5fe02b18 T start_armboot
其他
bl2 是 从 start_armboot 开始的
start_armboot lib_arm/board.c
main_loop common/main.c
if (bootdelay >= 0 && s && !abortboot (bootdelay)) parse_string_outer
parse_stream_outer common/hush.c
run_list common/hush.c
run_list_real common/hush.c
run_pipe_real common/hush.c
K
U-Boot 1.1.6-ga513a9d6-dirty (Mar 1 2021 - 16:06:00) for SMDK6410
****************************************
** u-boot 1.1.6 **
** Updated for OK6410 TE6410 Board **
** Version (2012-09-23) **
** OEM: Forlinx Embedded **
** Web: http://www.witech.com.cn **
****************************************
CPU: S3C6410 @532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode)
Board: SMDK6410
DRAM: 256 MB
Flash: 0 kB
NandFlash Information:
Nandflash:ChipType= SLC ChipName=MT29F16G08ABACAWP
No No Calc pagesize, blocksize, erasesize, use ids table .............
NandFlash:name=NAND 2GiB 1,8V 8-bit,id=38, pagesize=4096 ,chipsize=1024 MB,erasesize=524288 oobsize=128
NandFlash Size is 1024 MB
SD/MMC: SD 2.0 SDHC / Manufacturer: 0xFE,OEM: "42/SD16G",REV: 2.0,S/N: 573,DATE: 2020/8
SDHC size: 30474 MiB
Freq = 50MHz
In: serial
Out: lcd
Err: lcd
Hit any key to stop autoboot: 0
###################### User Menu for OK6410#####################
[1] Format the nand flash
[2] Burn image from SD card
[3] Burn image from USB
[4] Reboot the u-boot
[5] Exit to command line
-----------------------------Select---------------------------------
Enter your Selection: