ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2010年8月16日 星期一

worklog - nboot of MCU_P

看起來 linux 跟 ce 的 nboot 是一樣的,就是根據 TOC 的 entry 資料 load 一定 size 的 sector 進 memory .. TOC_START_BLOCK=0x21 g_dwTOCBlock=0x21 g_dwTOCBlockSize=0x1 g_dwEBootBlock=0x22 g_dwEBootblocksize=0x1000 g_dwDMBlock=0x1022 g_dwDMBlocksize=0x480 g_dwSecureBlock=0x14A2 g_dwSecureBlocksize=0x4 g_dwLOGOBlock=0x14A6 g_dwLOGOBlocksize=0x1FE g_dwNKBlock=0x16A4 TOC update 配合 program nboot.bin, uboot.bin 到 sd 的 shell script 來看 sd card 的配置:
  • nboot : sector 1 ~ 32
  • TOC : 33
  • uboot : 34 ~ (34+4096)
其他的 loading data: Jumpto image:0x0 Sector Needed 0x1000 dwRAM: 0x8D000000 JumpAddr: 0xC1000000 startsect=0x22 dwNumSectors=0x1000 dwRAM=0x8D000000 Jumpto:0xC1000000 Preparing System for Linux Kernel Boot
對照 CE 的 boot log: start Address: 0x22 Load Address: 0x8C01A000 Jump Address: 0x8C01A000 Ttl Sectors: 0x180 Chain in TOC: Chain Load Addr: 0x0 startsect=0x22 dwNumSectors=0x180 dwRAM=0x8C01A000 Jumpto:0xC001A000 所以差異是在 ram 的 address 上..
這個 default TOC 是在 nboot 啟動後寫入的: ce 版: Reset TOC @@@@ g_pTOC is not valid, init it @@@@ TOC_START_BLOCK=0x21 g_dwTOCBlock=0x21 g_dwTOCBlockSize=0x1 g_dwEBootBlock=0x22 g_dwEBootblocksize=0x180 g_dwDMBlock=0x1A2 g_dwDMBlocksize=0x0 g_dwSecureBlock=0x1A2 g_dwSecureBlocksize=0x4 g_dwLOGOBlock=0x1A6 g_dwLOGOBlocksize=0x1FE g_dwNKBlock=0x3A4 TOC updateTOC update 決定 nboot payload - eboot/uboot 的 預留空間size是 predefine 的, linux 和 ce 在這裡不一樣:
  • CE : 0x30000
  • Linux: 0x200000 (2M ? 實際上看 u-boot 真的要 1.6M..)

果然,修改 EBOOT_RAM_IMAGE_SIZE 之類的就可以..
%CSPCOMMONPATH%\INC\loader.h
  • EBOOT_RAM_IMAGE_BASE 0x8D000000
  • EBOOT_RAM_IMAGE_SIZE 0x00030000
  • EBOOT_RESERVED_SIZE 0x200000
其中最後一個:EBOOT_RESERVED_SIZE 的大小就是使用 vendor 不open source 的 download tool download uboot 時,需要的空間。不改的話,會有 error.

沒有留言:

標籤

網誌存檔