在config.bib 的 "MEMORY" section 中定義出run-time image 的 multixip regions, 以下是範例:
; NAME START ADDR SIZE TYPE上面將原來的一個NK image 分成 3 個 BIN:NK, SHELL, APPS。另外一個 CHAIN 和 pdwXIPLoc 是MultiXIP另外需要的。
; ----------------------------------------------------------------
NK 80220000 007DE000 RAMIMAGE
SHELL 809FE000 00100000 RAMIMAGE
APPS 80AFE000 00100000 RAMIMAGE
CHAIN 80BFE000 00002000 RESERVED ; XIP chain info
RAM 80C00000 01000000 RAM
pdwXIPLoc 00000000 80BFE000 FIXUPVAR ; XIP pTOC
NK, SHELL, APPS 這三個區域是連續的,區域的大小可以自己決定,但是要考慮要放到該區域內得AP (要能放得下)。 一般來說,把該區域內所有AP的size 加總之後,+32K 就可以。
CHAIN 這個bin 要放在 NK, SHELL, APPS 之後。實際上chain.bin 的位置和bootloader 的實做有關。
pdwXIPLoc 區域被宣告為 FIXUPVAR,而且包含整個NK, SHELL, APPS。並且在CHAIN 之前結束。
之後,要修改 config.bib 的 CONFIG section:
有幾個是額外要設的:
- AUTOSIZE=ON : 調整RAM 的start address 在最後一個 XIP region 後。
- ROM_AUTOSIZE=ON : 自動調整每一個 XIP 區塊的大小。
- DLL_ADDR_AUTOSIZE= ON : 調整DLL 的size,能夠橫跨 XIP region。
- XIPSCHAIN=80bfe000 : 告訴 Romimage CHAIN.bin 的start address。
接著改 Platform.bib:
.. 懶得寫,而且跟我們的用法不一樣,大略來說,就是把一些dll, exe 分到 APP 和 SHELL 中。
然後是設定 platform builder的 參數:
Platform -- Settings -- Environment -- New : 加上 IMGMULTIBIN ,value 設為 1。
Build:
check - Make Run-Time Image After Build 和 Copy Files to Release Directory After Build。
sysgen.
完成後,會產生
- Xip.bin
- Nk.bin
- Shell.bin
- Apps.bin
- Chain.bin
- Eboot.bin
xip.bin -- 就是要download 的 bin 檔
-- 然後就是用 platform build 透過 KITL -- eboot download 到 target 上去。
有關 XIP Chain
XIP Chain 是一塊XIP region,由 OAL 讀取,內部資料描述 有幾個 XIP region。和每個region 的 entry。還有 XIP region 的starting memory address。
XIP Chain 會由 bootloader (eboot) 寫入flash/rom,
xip chain 在memory 的位置是由 Config.bib 設定的。然後由 fixup variable 傳給OAL。
Fixup Variable 是 ROMIMAGE.EXE 的一個功能變數,可以讓你在 makeimg 的階段