如何移植Linux到晶心平臺
4.2.3. Kernel 解壓縮與software breakpoint
在進行kernel 調試時,如果在低地址處,例如:head.S中進行調試,當設定 software breakpoint時,會有breakpoint無法停下來與AICE 斷線的情況發生。原因是當使用者設定software breakpoint時,breakpoint處的instruction會修改并加入break instruction。但kernel解壓縮時會將調試的程序代碼覆蓋造成與GDB調試不一致性而產生錯誤。解決的方法就是原設定software breakpoint改為hardware breakpoint,這樣就可以避免因kernel解壓縮所造成調試的錯誤,降低調試時的困難度。

4.2.4. PA/VA 觀念說明與調試要領
在原始碼arch/nds32/kernel/head.S中
la $lp, __mmap_switched
mtsr $lp, $IPC
iret
執行完iret后,系統就會從PA轉成VA,MMU translation status從translation off轉為translation on在此分界處調試規則如下所述,如果觀念不清楚及容易產生調試時的錯誤,請務必牢記。
4.2.4.1. MMU translation off 時期調試
在這個時期調試,VA是不存在的。所有的IO address與memory都是PA沒有VA,如果調試地址設成VA,容易hit illegal address 而造成exception。
4.2.4.2. MMU translation on 時期調試
在這個時期調試,PA是不存在的。所有的IO address與memory都是VA沒有PA,如果調試地址設成PA,容易hit illegal address 而造成exception.
MMU translation on后,很快就會進入start_kernel 函數,接下來移植的重點就是移植Linux基礎組件,那就是interrupt,timer and UART。當這3個device移植成功后,Linux的架構就建立起來了,printk也可以用了,Linux已經可以正常的運作。如果沒有意外,可以執行完kernel甚至將filesystem帶起來。接下來用戶可以將自己的周邊組件一個一個的device driver移植入系統。當周邊組件移植完成后,Linux系統移植到晶心平臺就完成了。
5. 結語
Linux操作系統運作在晶心平臺已有多年的時間。各式各樣的Linux軟件運作在晶心平臺不計其數。皆可證明Linux操作系統運作結合晶心平臺是一個穩定與成熟的產品,只要能明了熟悉Linux 移植的技巧與重點,使用晶心平臺開發Linux的產品將是一件愉快與簡單的工作。










評論