當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]嵌入式Linux: uClinux操作系統(tǒng)移植

1.uClinux簡介

uClinux這個英文單詞中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"針對微控制領域而設計的Linux系統(tǒng)".

uclinux是一個源碼開放的操作系統(tǒng),面向沒有MMU(MemoryManagementUnit)的硬件平臺。它是linux的一個變種,主要的區(qū)別在于兩者的內(nèi)存管理機制和進程調(diào)度管理機制,同時為了適應嵌入式應用的需求,它的采用了romfs文件系統(tǒng),并對linux上的c語言庫glibc做了簡化。

2.硬件體系結(jié)構簡介

運行uClinux的硬件平臺主要包括如下幾個部分:cpu(ARMv4指令集兼容)、uart、memorycontroller、定時器、flash存儲器,sdram存儲器,中斷控制器和DMA.

3.編譯環(huán)境和編譯工具

uclinux操作系統(tǒng)源碼絕大部分是用c語言開發(fā)的,有一些與硬件直接相關的代碼則用特定于某一CPU體系結(jié)構的匯編來實現(xiàn)。這些源碼只能用GNU的gcc編譯工具來進行編譯、鏈接。

GNUgcc可以運行于Linux/Unix操作系統(tǒng)上。如果要在Windows平臺上運行gcc,則必須安裝Cygwin.Cygwin可以在Windows中安裝一個linux的運行環(huán)境,這樣就可以在windows下運行原本只能在linux下運行的程序。

為了在PC上編譯得到運行于目標CPU上的操作系統(tǒng)內(nèi)核,還必須安裝一個合適的交叉編譯器。Gcc提供了現(xiàn)成的針對MIPS、ARM、M68K、Sharc、PowerPC的交叉編譯器。如果沒有現(xiàn)成的交叉編譯器,則需要自行設計。GNU網(wǎng)站提供了一些如何開發(fā)新的交叉編譯器的文章。開發(fā)一個新的編譯器,一般需要如下幾個步驟:

(1)、編寫機器描述腳本。采用gcc的RTL(RegisterTansferLanguage)語言描述針對某一CPU體系結(jié)構的機器指令與尋址方式、CPU浮點處理方式、endianess、c語言中各種數(shù)據(jù)類型的位寬、寄存器的個數(shù)和使用規(guī)則、堆棧和函數(shù)調(diào)用規(guī)則等體系結(jié)構的細節(jié)。

(2)、設計代碼生成器。Gcc在對c語言源文件進行了詞法和語法分析后,將產(chǎn)生一種中間格式文件(intermediaterepresentation)。為了把這種中間格式文件轉(zhuǎn)化為針對具體CPU體系結(jié)構的機器碼,需要自行設計一個代碼生成器。

(3)、設計匯編器

(4)、設計鏈接器

4.uClinux啟動過程

uClinux系統(tǒng)的啟動可以分為兩個步驟:

(1)。運行bootloader初始化程序

SRAM、SDRAM等存儲設備屬于揮發(fā)性的存儲器,掉電以后其中的內(nèi)容就會全部丟失,所以必須把操作系統(tǒng)的內(nèi)核鏡像存放在Flash等不揮發(fā)性存儲介質(zhì)上。但是操作系統(tǒng)在運行時,需要動態(tài)的創(chuàng)建一些如數(shù)據(jù)段、堆棧、頁表(針對使用虛擬地址的操作系統(tǒng))等內(nèi)容,所以需要在RAM中運行操作系統(tǒng)。因此,就需要一個引導程序把操作系統(tǒng)的內(nèi)核鏡像從Flash存儲器拷貝到RAM中,然后再從RAM中執(zhí)行操作系統(tǒng)的內(nèi)核。Bootloader就是可以完成這樣一種功能的程序。

從本質(zhì)上來講,bootloader不屬于操作系統(tǒng)內(nèi)核。它采用匯編語言編寫,因此針對不同的cpu體系結(jié)構,這一部分代碼不具有可移植性。在移植操作系統(tǒng)時,這部分代碼必須加以改寫。

具體來講,bootloader在系統(tǒng)啟動時主要完成以下幾項工作:

。將操作系統(tǒng)內(nèi)核從flash拷貝到sdram中,如果是壓縮格式的內(nèi)核,還要將之解壓縮。

。改寫系統(tǒng)的memorymap,原先flash起始地址映射為0地址,這時需要將RAM的起始地址映射為0.

。設置堆棧指針并將bss段清零。將來執(zhí)行c語言程序和調(diào)用子函數(shù)時要用到。

。改變pc值,使得cpu開始執(zhí)行真正的操作系統(tǒng)內(nèi)核。

(2)運行操作系統(tǒng)內(nèi)核

bootloader程序執(zhí)行完上述的各項工作后,通過一條跳轉(zhuǎn)指令,轉(zhuǎn)而執(zhí)行ini目錄下c語言源文件main.c中的函數(shù)start_kernel()。因為在此之前bootloader已經(jīng)創(chuàng)建好一個初始化環(huán)境,

c函數(shù)可以開始執(zhí)行了。整個操作系統(tǒng)內(nèi)核的初始化工作從這里才算是真正開始。這個函數(shù)的長度比較短,代碼如下:asmlinkagevoid__initstart_kernel(void)

{

char*command_line;

unsignedlongmempages;

externcharsaved_command_line[];

/*

*Interruptsarestilldisabled.Donecessarysetups,then

*enablethem

*/

lock_kernel();

printk(linux_banner);

setup_arch(&command_line);

printk("Kernelcommandline:%sn",saved_command_line);

parse_options(command_line);

trap_init();

init_IRQ();

sched_init();

softirq_init();

time_init();

/*

*HACKALERT!Thisisearly.We'reenablingtheconsolebefore

*we'vedonePCIsetupsetc,andconsole_init()mustbeawareof

*this.Butwedowantoutputearly,incasesomethinggoeswrong.

*/

console_init();

#ifdefCONFIG_MODULES

init_modules();

#endif

if(prof_shift){

unsignedintsize;

/*onlytextisprofiled*/

prof_len=(unsignedlong)&_etext-(unsignedlong)&_stext;

prof_len>>=prof_shift;

size=prof_len*sizeof(unsignedint)+PAGE_SIZE-1;

prof_buffer=(unsignedint*)alloc_bootmem(size);

}

kmem_cache_init();

sti();

calibrate_delay();

#ifdefCONFIG_BLK_DEV_INITRD

if(initrd_start&&!initrd_below_start_ok&&

initrd_start

printk(KERN_CRIT"initrdoverwritten(0x%08lx<0x%08lx)-"

"disablingit.n",initrd_start,min_low_pfn<

initrd_start=0;

}

#endif

mem_init();

kmem_cache_sizes_init();

pgtable_cache_init();

mempages=num_physpages;

[!--empirenews.page--]

fork_init(mempages);

proc_caches_init();

vfs_caches_init(mempages);

buffer_init(mempages);

page_cache_init(mempages);

#ifdefined(CONFIG_ARCH_S390)

ccwcache_init();

#endif

signals_init();

#ifdefCONFIG_PROC_FS

proc_root_init();

#endif

#ifdefined(CONFIG_SYSVIPC)

ipc_init();

#endif

check_bugs();

printk("POSIXconformancetestingbyUNIFIXn");

/*

*Wecountontheinitialthreadgoingok

*Likeidlersinitisanunlockedkernelthread,whichwill

*makesyscalls(andthusbelocked)。

*/

smp_init();

rest_init();

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

5.系統(tǒng)源碼的修改

移植一個操作系統(tǒng)到新的硬件平臺,比較好的辦法是尋找一個架構相近并且已經(jīng)做好操作系統(tǒng)移植的硬件平臺。然后,對原先的操作系統(tǒng)做一定修改。系統(tǒng)源碼修改的工作量取決于自行設計的硬件平臺與現(xiàn)有的硬件平臺之間差異程度。此設計中的硬件平臺與三星4510芯片較為接近,并且也可以下載到針對4510b的uclinux系統(tǒng)源碼。所以可以從此源碼入手,根據(jù)我們的硬件平臺與4510b的不同之處,在源碼中找到相應的文件并加以修改。下面介紹如何修改系統(tǒng)源碼。

需要修改的系統(tǒng)源碼主要有如下幾處:

(1)bootloader相關代碼。此代碼位于uClinuxlinux-2.4.xarcharmnommubootcompressed目錄下名為head.s的文件中。此處程序用匯編語言實現(xiàn),需要修改的地方主要是設置memorymap的代碼,與memorycontroller的硬件實現(xiàn)相關。

(2)UART相關代碼。UART相關代碼位于uClinuxlinux-2.4.xdriverschar目錄下的serial.c

(3)定時器相關代碼。uClinux中有如下函數(shù)調(diào)用star_kernel()->time_init()->setup_timer(),需要修改setup_timer()函數(shù)中的相關代碼。

(4)中斷控制器相關。uClinuxlinux-2.4.xarcharmnommuirq.c

除了上述的代碼,還有其他多處需要修改。在修改源代碼時,可按照uclinux啟動和執(zhí)行順序依次修改整個平臺。熟悉linux內(nèi)核源碼結(jié)構對操作系統(tǒng)移植有很大幫助。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉