![]() |
|
Linux內(nèi)核移植的簡介 |
|
所謂移植就是把程序代碼從一種運(yùn)行環(huán)境轉(zhuǎn)移到另一種運(yùn)行環(huán)境。對于內(nèi)核移植來說,主要是從一種硬件平臺轉(zhuǎn)移到另一種硬件平臺上運(yùn)行。 在一個目標(biāo)板上Linux內(nèi)核的移植包括3個層次,分別為體系結(jié)構(gòu)級別的移植、SoC級別的移植和主板級別的移植。 體系結(jié)構(gòu)級別的移植是指在不同體系結(jié)構(gòu)平臺上Linux內(nèi)核的移植,例如,在ARM、MIPS、PPC等不同體系結(jié)構(gòu)上分別都要對每個體系結(jié)構(gòu)進(jìn)行特定的移植工作。一個新的體系結(jié)構(gòu)出現(xiàn)就需要進(jìn)行這個層次上的移植。 SoC級別的移植是指在具體的SoC處理器平臺上Linux內(nèi)核的移植,例如,ARM920T IP核的兩個處理器S3C2410和AT91RM9200等平臺都分別要進(jìn)行SoC特定的移植工作。 主板級別的移植是指在具體的目標(biāo)主板上Linux內(nèi)核的移植,例如,在FS2410目標(biāo)板上,需要進(jìn)行主板特定的移植工作。 在這里討論主板級別的移植,主要是添加開發(fā)板初始化和驅(qū)動程序的代碼。這部分代碼大部分是與體系結(jié)構(gòu)相關(guān)的,在arch目錄下按照不同的體系結(jié)構(gòu)管理。 Linux 2.6內(nèi)核已經(jīng)支持S3C2410處理器的多種硬件板,例如,SMDK2410、Simtec-BAST、IPAQ-H1940、Thorcom-VR1000等。我們可以參考SMDK2410參考板來移植開發(fā)板的內(nèi)核。 S3C2410屬于片上系統(tǒng),處理器芯片具備串口、LCD等外圍接口的控制器。這樣,參考板上的設(shè)備驅(qū)動程序多數(shù)可以直接使用。但并不是所有的外部設(shè)備都相同,不同的開發(fā)板可以使用不同的SDRAM、Flash、以太網(wǎng)接口芯片等。這就需要根據(jù)硬件修改或者開發(fā)驅(qū)動程序。 例如,串口驅(qū)動程序是典型的設(shè)備驅(qū)動程序之一,這個驅(qū)動程序幾乎不需要任何改動。然而,如果用2.4內(nèi)核的配置使用方式,是不能得到串口控制臺信息的。在2.6的內(nèi)核中,串口設(shè)備在/dev目錄下對應(yīng)的設(shè)備節(jié)點為/dev/ttySAC0、/dev/ttySAC1等。所以,再使用過去的串口設(shè)備ttyS0,就得不到控制臺打印信息了。現(xiàn)在可以很簡單地解決這個問題,把內(nèi)核命令行參數(shù)的控制臺設(shè)置修改為console = ttySAC0,115200。 在內(nèi)核已經(jīng)支持S3C2410處理器以后,基本上無須改動代碼就可以讓內(nèi)核運(yùn)行起來。但是,在有些情況下,我們必須針對不同的設(shè)備進(jìn)行驅(qū)動級的移植,至少硬件地址和中斷號可能會不同。例如,有時需要移植網(wǎng)絡(luò)芯片和Nand Flash芯片等外設(shè)的驅(qū)動程序。 本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》。更多l(xiāng)inux內(nèi)核移植學(xué)習(xí)可以參考華清遠(yuǎn)見《嵌入式Linux系統(tǒng)開發(fā)班》課程大綱。 熱點鏈接:
1、Linux內(nèi)核配置與編譯 |