移植嵌入式Linux到ARM處理器S3C2410:操作系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在筆者撰寫的《C語(yǔ)言嵌入式系統(tǒng)編程修煉之道》一文中,主要陳訴的軟件架構(gòu)是單任務(wù)無(wú)操作系統(tǒng)平臺(tái)的,而本文的側(cè)重點(diǎn)則在于講述操作系統(tǒng)嵌入的軟件架構(gòu),二者的區(qū)別如下圖:
嵌入式操作系統(tǒng)并不總是必須的,因?yàn)槌绦蛲耆梢栽诼惆迳线\(yùn)行。盡管如此,但對(duì)于復(fù)雜的系統(tǒng),為使其具有任務(wù)管理、定時(shí)器管理、存儲(chǔ)器管理、資源管理、事件管理、系統(tǒng)管理、消息管理、隊(duì)列管理和中斷處理的能力,提供多任務(wù)處理,更好的分配系統(tǒng)資源的功能,很有必要針對(duì)特定的硬件平臺(tái)和實(shí)際應(yīng)用移植操作系統(tǒng)。鑒于Linux的源代碼開放性,它成為嵌入式操作系統(tǒng)領(lǐng)域的很好選擇。國(guó)內(nèi)外許多知名大學(xué)、公司、研究機(jī)構(gòu)都加入了嵌入式Linux的研究行列,推出了一些著名的版本:
·RT-Linux提供了一個(gè)精巧的實(shí)時(shí)內(nèi)核,把標(biāo)準(zhǔn)的Linux核心作為實(shí)時(shí)核心的一個(gè)進(jìn)程同用戶的實(shí)時(shí)進(jìn)程一起調(diào)度。RT-Linux已成功地應(yīng)用于航天飛機(jī)的空間數(shù)據(jù)采集、科學(xué)儀器測(cè)控和電影特技圖像處理等廣泛的應(yīng)用領(lǐng)域。如NASA(美國(guó)國(guó)家宇航局)將裝有 RT-Linux的設(shè)備放在飛機(jī)上,以測(cè)量Georage咫風(fēng)的風(fēng)速;
·uCLinux(Micro-Control-Linux,u表示Micro,C表示Control)去掉了MMU(內(nèi)存管理)功能,應(yīng)用于沒(méi)有虛擬內(nèi)存管理的微處理器/微控制器,它已經(jīng)被成功地移植到了很多平臺(tái)上。
本章涉及的mizi-linux由韓國(guó)mizi公司根據(jù)Linux 2.4內(nèi)核移植而來(lái),支持S3C2410A處理器。
1.Linux內(nèi)核要點(diǎn)
和其他操作系統(tǒng)一樣,Linux包含進(jìn)程調(diào)度與進(jìn)程間通信(IPC)、內(nèi)存管理(MMU)、虛擬文件系統(tǒng)(VFS)、網(wǎng)絡(luò)接口等,下圖給出了Linux的組成及其關(guān)系:
Linux內(nèi)核源代碼包括多個(gè)目錄:
(1)arch:包括硬件特定的內(nèi)核代碼,如arm、mips、i386等;
?。?)drivers:包含硬件驅(qū)動(dòng)代碼,如char、cdrom、scsi、mtd等;
?。?)include:通用頭文件及針對(duì)不同平臺(tái)特定的頭文件,如asm-i386、asm-arm等;
(4)init:內(nèi)核初始化代碼;
?。?)ipc:進(jìn)程間通信代碼;
?。?)kernel:內(nèi)核核心代碼;
?。?)mm:內(nèi)存管理代碼;
?。?)net:與網(wǎng)絡(luò)協(xié)議棧相關(guān)的代碼,如ipv4、ipv6、ethernet等;
(9)fs:文件系統(tǒng)相關(guān)代碼,如nfs、vfat等;
?。?0)lib:庫(kù)文件,與平臺(tái)無(wú)關(guān)的strlen、strcpy等,如在string.c中包含:
char * strcpy(char * dest,const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '