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

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) 

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

注意 : 
	BL2的大小 和  ENV 的大小 都是 u-boot 代码中定义的
	在 新的代码(2021.01), ENV的大小没变, BL2 的大小变为了 1024 , 也就是说 BL2 可以有512KB

  • 第一部分的代码 怎么确定第二部分的位置及如何搬运第二部分
SD卡中的代码 如何搬运 确定了 第二部分在哪里

如何搬运的代码

#ifdef CONFIG_BOOT_MOVINAND  // u-boot-1.1.6/cpu/s3c64xx/start.S
    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)) // 这个代码是 定义在 iTCM 中的


	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:                                                                    
    /* Set up the stack                         */                               
stack_setup:                                                                     
#ifdef CONFIG_MEMORY_UPPER_CODE                                                  
    ldr sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0xc)                             
#else                                                                            
    ldr r0, _TEXT_BASE      /* upper 128 KiB: relocated uboot   */               
    sub r0, r0, #CFG_MALLOC_LEN /* malloc area                      */           
    sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */           
#ifdef CONFIG_USE_IRQ                                                            
    sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)                     
#endif                                                                           
    sub sp, r0, #12     /* leave 3 words for abort-stack    */                   
                                                                                 
#endif                                                                           
                                                                                 
clear_bss:                                                                       
    ldr r0, _bss_start      /* find start of bss segment        */               
    ldr r1, _bss_end        /* stop here                        */               
    mov     r2, #0x00000000     /* clear                            */           
                                                                                 
clbss_l:                                                                         
    str r2, [r0]        /* clear loop...                    */                   
    add r0, r0, #4                                                               
    cmp r0, r1                                                                   
    ble clbss_l                                                                  
	// 此句之后, 跳转到BL2                                                                                 
    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 解析

bl2 是 从 start_armboot 开始的
start_armboot 												lib_arm/board.c
	main_loop 												common/main.c
		if (bootdelay >= 0 && s && !abortboot (bootdelay)) parse_string_outer // CFG_HUSH_PARSER 		common/hush.c
			parse_stream_outer								common/hush.c
				run_list 									common/hush.c
					run_list_real 							common/hush.c
						run_pipe_real 						common/hush.c
  • LOG
K // 这个字符是 bl1打印的 唯一一个字符

U-Boot 1.1.6-ga513a9d6-dirty (Mar  1 2021 - 16:06:00) for SMDK6410 // 这一句是 bl2 打印的第一句

****************************************
**    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:

猜你喜欢

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