一、編譯出NK,但是但是下載NK後不會啓動。
原因:就是DNW設置地址不對,並不是每個NK下載到0x32000000都能運行的。欲知詳情,請看下面。
先看這個能在0x32000000運行的NK的內存映射表
OEMAddressTable
;;;-------------------------------------------------------------
;;; Virt Addr Phys Addr MB
;;;-------------------------------------------------------------
DCD 0x80000000, 0x02000000, 30 ; 30 MB SRAM(SRAM/ROM) BANK 0
DCD 0x82000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x30000000, 64 ; 64 MB DRAM BANK 0, 1
DCD 0x90800000, 0x48000000, 1 ; Memory control register
DCD 0x90900000, 0x49000000, 1 ; USB Host register
DCD 0x90A00000, 0x4A000000, 1 ; Interrupt Control register
DCD 0x90B00000, 0x4B000000, 1 ; DMA control register
DCD 0x90C00000, 0x4C000000, 1 ; Clock & Power register
DCD 0x90D00000, 0x4D000000, 1 ; LCD control register
DCD 0x90E00000, 0x4E000000, 1 ; NAND flash control register
DCD 0x90F00000, 0x4F000000, 1 ; Camera control register
DCD 0x91000000, 0x50000000, 1 ; UART control register
DCD 0x91100000, 0x51000000, 1 ; PWM timer register
DCD 0x91200000, 0x52000000, 1 ; USB device register
DCD 0x91300000, 0x53000000, 1 ; Watchdog Timer register
DCD 0x91400000, 0x54000000, 1 ; IIC control register
DCD 0x91500000, 0x55000000, 1 ; IIS control register
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
DCD 0x91700000, 0x57000000, 1 ; RTC control register
DCD 0x91800000, 0x58000000, 1 ; A/D convert register
DCD 0x91900000, 0x59000000, 1 ; SPI register
DCD 0x91A00000, 0x5A000000, 1 ; SD Interface register
DCD 0x91B00000, 0x5B000000, 1 ; AC97 Interface register
DCD 0x91C00000, 0x5C000000, 1 ; ATAPI register cs0 add by fly
DCD 0x91D00000, 0x5D000000, 1 ; ATAPI register cs1 add by fly
DCD 0x00000000, 0x00000000, 0 ; End of Table (MB MUST BE ZERO!)
END
現在再來看這個NK對應的config.bib文件的內存分配
MEMORY
;NK 29MB
NK 8C200000 01D00000 RAMIMAGE----注意這個8C200000剛好對應的是物理地址0x30200000!
;RAM 96MB
RAM 8E000000 02000000 RAM
; Common RAM areas
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CAMERA 8c050000 00110000 RESERVED
DISPLAY 8c160000 000A0000 RESERVED
注意紅色那行,由此可知,DNW不是隨便亂填就可以下載的,我想這個應該是唯一的,必須看內存映射表以及config.bib的設置。在這裏不想多舉例子,最後我想提醒大家看看這個config.bib的配置,各個部分是不能重疊的。
還有:在WINCE5.0下無法生成NK.nbo,後來在網上看到相關文章,才知道需要修改config.bib這個文件,需要添加如下參數:
ROMSTART
ROMWIDTH
ROMSIZE
三、(1)boot.bib中和config.bib定義的內存段有重複的地方,比如說EBOOT 8c038000 00020000 RAMIMAGE 和
EDBG 8c030000 00020000 RESERVED 這樣是否有影響,我看到有文章說,EBOOT鏡像在的地方不可以被重寫和覆蓋,但是,這裏卻重複了???
(2)按理說,congfig.bib中的定義和頭文件中定義的地址一致纔對,以下是我從loarder.h中截出來的,請看
// Nk Memory reigions defined in config.bib...
//
#define ROM_RAMIMAGE_START 0x8C100000
#define ROM_RAMIMAGE_SIZE 0x01000000
// Start addresses must match config.bib's RAMIMAGE
#define RAM_START 0x8d100000
#define RAM_SIZE 0x00F00000
按照config.bib的定義,以上應該是以下才對
// Nk Memory reigions defined in config.bib...
//
#define ROM_RAMIMAGE_START 8C200000
#define ROM_RAMIMAGE_SIZE 02400000
// Start addresses must match config.bib's RAMIMAGE
#define RAM_START 8E600000
#define RAM_SIZE 01900000
這個是我的理解錯誤,還是什麼的,請各位大俠指教,我的是wince5.0
牛人回答
1. eboot所在的位置不能被覆蓋,是指flash中。ram中,當eboot啓動,加載了OS後,系統控制權就交給OS了,eboot就不會再被用到,所以其在RAM中的空間可以被再次利用。這次覆蓋是在OS啓動之後加載驅動時纔會產生。
2. OS的IMG你可以用UEdit打開看一下,前面有一部分是空白區域。這裏定義的起始地址,是對應了有效的可執行OS鏡像的開始。所以跟上面看到的有偏移。
-------------從這個牛人這裏可以看出,如果改動了config.bib,那麼loader.h也要跟着改動了,估計是這樣,不然啓動不了的。先試試
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ymzhou117/archive/2010/04/24/5524214.aspx