uClinux在MIPS上的移植

摘    要:本文描述了將uClinux移植到基於MIPS R3K處理器的目標板上的方法和過程,說明了如何搭建移植環境,並著重討論了移植中需要注意的問題。
關鍵詞:uClinux;MIPS;移植;ROMFS;BootLoader

引言
uClinux是標準Linux的一個分支,它繼承了Linux的大部分優點,並能夠實現對沒有MMU的處理器的支持,所以被廣泛地應 用於嵌入式領域。本文將其移植到了基於MIPS R3K處理器的目標板上,處理器的工作頻率為100MHz。目標板上的其它主要資源還包括:2個串口(16550A),波特率9600;網卡 (RTL8019AS);512K ROM(AM29F040),以及64M SDRAM。開發板與主機的連接如圖1所示。

uClinux的移植
交叉編譯環境的建立
嵌入式開發環境一般由宿主PC和目標系統構成。宿主PC上先要建立開發編譯工具,如 binutils、gcc、glibc等。目標板是運行和調試的平台。宿主PC和目標板利用網絡和串口建立連接,系統在目標板上運行時通過串口來反饋信 息,並在宿主PC的超級終端上顯示出來。
BootLoader的設計
BootLoader的作用類似於PC中的BIOS,它在系統啟動時 對硬件進行初始化操作,負責與宿主PC建立連接並引導操作系統啟動。它必須被固化在目標板上,當系統啟動時, MIPS處理器的CPU會從0xbfc0 0000中取出第一條指令執行,而虛擬地址0xbfc0 0000對應的物理地址就是ROM的起始地址00000,所以只需要把BootLoader程序燒寫在ROM上就可以了。
在BootLoader 中,首先要設置CPU的工作狀態,包括Little Endian方ux-2.4.19\include\asm-mipsnommu\r3k,並放入目標板的相應代碼。同時要修改Makefile,將這兩個目錄裡 的文件編譯進內核,去掉不必要的針對其他目標板、處理器目錄的編譯。
在D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k目錄下,創建兩個子文件夾comm和osprey。在r3k\comm目錄下,主要存放以下文件:
int_handler.S、irq.c:針對MIP R3K處理器進行中斷初始化和檢測操作;
serial.c:針對目標板串口進行波特率設置,中斷號及地址分配;
time.c:針對目標板的RTC進行初始化設置。
在r3k\osprey目錄下主要存放以下文件:
prom.c,setup.c:進行目標板的初始化設置,包括串口、時間系統的一些初始化工作。
在D:\uc-linux\linux-2.4.19\include\asm-mipsnommu\r3k目錄下主要有兩個頭文件:
irq.h:包括CPU的一些中斷號的宏定義;
r3k.h:包括目標板上一些設備的中斷號的宏定義,例如串口。
其 次,要小心地修改操作系統的時鐘中斷(Timer Interrupt),否則移植的系統可能會永遠停止在BogusMIPS calibration階段,這是因為操作系統的「脈搏」jiffies的更新是在時鐘中斷裡進行的。時鐘中斷的產生方式可以根據不同的目標系統而變化。 對於MIPS R3K處理器,直接使用它的內部定時器,在CP0的STATUS寄存器中設置中斷號,為IP7,需要修改的寄存器包括CP0的COMPARE和 COUNT。此外也可以使用RTC來獲得時鐘中斷,其中斷號及中斷允許位的設置根據目標板而異。涉及到的代碼包括:D:\uc-linux\linux- 2.4.19\arch\mipsnommu\r3k\common\ int_handler.S、D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k\common\ time.c、D:\uc-linux\linux-2.4.19\arch\mipsnommu\kernel\time.c。
然後,完成對串 口的修改。串口在操作系統的移植在系統調試的過程中扮演了比較重要的角色。在系統運行的初期,它主要用於反饋調試信息。在作為控制台初始化後,它又起著和 操作系統交互通信的作用。可是,在對控制台進行初始化以前,打印的調試信息都不能顯示出來,這樣不便於調試控制台初始化以前的程序。
要解決這個問 題有幾種方法,例如可以在D:\uc-linux\linux-2.4.19\kernel\printk.c中的printk()函數中添加目標板上串 口的打印函數。另外,由於使用的目標板有兩個串口,所以可以用串口1與操作系統通信,而串口2作為專用的調試信息輸出口。這樣的好處還包括可以將調試信息 與操作系統的信息分開顯示,避免超級終端顯示混亂。要注意的是在利用串口顯示調試信息時,串口工作在查詢方式;而操作系統使用串口作為控制台工作時,串口 工作在中斷方式。串口工作在中斷方式時,需要在CPU的STATUS寄存器和其他中斷控制機制中打開相應的中斷允許位,否則CPU不能接收到串口發出的中 斷請求信息。如果不能調試好串口的驅動程序,最後在超級終端上就看不到操作系統給出的信息。相關代碼主要在D:\uc-linux\linux- 2.4.19\ drivers\char\serial.c中。
最後,由於使用的是ROMFS文件系統,並已將內核代碼和文件系統鏡像編譯到一 個二進制文件中,因此,在操作系統運行後,需要告訴操作系統文件系統的地址,否則就會出現不能加載文件系統的錯誤。文件系統地址可以在D:\uc- linux\linux-2.4.19\arch\mipsnommu\ kernel的setup.c文件裡直接指定。

編譯內核
在完成對Makefile的少量修改後就可以編譯內核了,主要步驟包括:
Make menuconfig:其中包括選擇使用的CPU及目標板,串口的使用等;
Make dep:檢查代碼的完整性和依存關係;
Make:包括編譯內核,生成ROMFS鏡像文件。
  
下載二進制鏡像文件
在 宿主PC上發出TFTP命令,在目標板上利用BootLoader接收數據,並將代碼和ROMFS文件系統依次放置到相應的地址。BootLoader在 完成這些工作後會將控制權交給mClinux系統,然後操作系統開始啟動。在完成對目標板設備的初始化、中斷的建立以及文件系統的加載後,系統執行 /bin/init,最後出現一個等待輸入命令的提示符#。這樣,也就完成了對mClinux的移植工作。

結語
本文討論了uClinux在MIPS R3K處理器上的移植過程和關鍵技術,並簡要介紹了BootLoader的設計,以及串口在移植中的運用。■

參考文獻
1 毛德操,胡希明. Linux內核源代碼情景分析[M]. 杭州:浙江大學出版社, 2001
2 陳莉君. Linux操作系統內核分析[M]. 北京:人民郵電出版社, 2000
3 趙炯. Linux內核完全註釋. 北京:機械工業出版社, 2004
4 Gerry Kane, Joe Heinrich. MIPS RISC ARCHITECTURE [M]. Prientice Hall PTR, 2000
arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()