天天看點

虛拟位址比對問題

      在調試以前的一個老版本的時候碰到了一些問題(s3c2440,wince4.2)

      首先,加載核心(NK)之後,跑到kernelstart的地方就挂掉了,還好以前在調試eboot的時候遇到這樣的問題。在此再說明一下:在bootloader中要從flash中load nk.nb0并将它放到0x30200000(實體位址,在sdram上)然而這個位址在系統啟動的時候經mmu映射後為0x8c200000(虛拟位址),而config.bib中的設定為nk是在虛拟位址0x8c300000處。由bootloader跳到nk中去執行當然沒有問題,因為這是用的實體位址并且sdram中的nk.nb0的位置就是它放的。在系統啟動時(fw.s)經過mmu映射位址之後要用虛拟位址,是以之後的要跳到nk中的kernelstart(0x8c300000+根據偏移量)處去執行是找不到這個函數的,是以系統就挂掉了。

      其次這個版本中有外擴序列槽,然而在系統加載這些序列槽驅動的時候挂掉了。是以就改了些東西,可能不小心将s2440.h檔案中framebuffer的位址給改了。這樣在oeminit的時候可以看到logo,但是死活看不到久違的windows界面。這裡要說的就是定義的這些像framebuffer,dma_base的位址一定要和config.bib中的一緻。

     今天還從硬體工程師那了解到所謂的擴充序列槽就是加一個晶片(相當于序列槽控制器),通過cpu的io口來控制。悲哀啊,看來自己真的很土。

繼續閱讀