uClinux在Nios II嵌入式平臺(tái)上的移植研究
發(fā)布時(shí)間:2009/2/18 0:00:00 訪問次數(shù):748
1. nios ii嵌入式處理器
nios ii是運(yùn)行在fpga上的五級(jí)流水線、單指令的risc處理器,它專門針對(duì)altera的可編程邏輯器件及片上可編程的設(shè)計(jì)思想做了相應(yīng)的優(yōu)化。作為一種可配置的精減的risc處理器,它可以與用戶自定義邏輯結(jié)合構(gòu)成sopc系統(tǒng),并下載到altera的可編程器件中。32位的nios ii軟核,結(jié)合外部閃存以及大容量存儲(chǔ)器,可以構(gòu)成一個(gè)功能強(qiáng)大的32位嵌入式處理器系統(tǒng)。此外,利用altera提供的ide(integrated development environment)開發(fā)工具 可以方便的在調(diào)試模式下調(diào)試處理器,提高開發(fā)的速度。
作者使用cyclone ii版nios ii應(yīng)用開發(fā)板nios-devkit-2c35 作為移植實(shí)現(xiàn)的平臺(tái),開發(fā)板主要包括cyclone ii ep2c35器件、epm7128ae cpld配置控制邏輯、存儲(chǔ)器、串行配置連接器、fpga和cpld的jtag接口等。
2. 移植
2.1. uclinux嵌入式操作系統(tǒng)
uclinux是linux的一個(gè)嵌入式版本,它經(jīng)過小型化改造,形成了一個(gè)高度優(yōu)化、代碼緊湊的嵌入式linux,并保留了linux的大多數(shù)優(yōu)點(diǎn)。最新的2.6版本在內(nèi)核主體中加入了提高中斷性能和調(diào)度響應(yīng)時(shí)間的改進(jìn),其中有三個(gè)最顯著的改進(jìn):采用可搶占內(nèi)核、更加有效的調(diào)度算法以及同步性的提高 。
2.1.1. uclinux操作系統(tǒng)的移植
uclinux源代碼絕大部分都是使用的c語言,只有那些直接與處理其硬件相關(guān)的代碼如開關(guān)cpu中斷等操作才采用匯編語言編寫,因此uclinux具有很好的移植性。一般來說,uclinux的移植大致分為三類:
1) 結(jié)構(gòu)層次的移植。如果待移植的處理器結(jié)構(gòu)不同于任何已經(jīng)支持的處理器結(jié)構(gòu),則需要修改linux/arch目錄下的相關(guān)處理器結(jié)構(gòu)的文件。uclinux內(nèi)核代碼的大部分是獨(dú)立于處理器和其體系結(jié)構(gòu)的,但是其最底層的代碼也是特定于各個(gè)系統(tǒng)的。他們的中斷處理上下文、內(nèi)存維護(hù)、任務(wù)上下文和初始化過程都是獨(dú)特的。對(duì)一個(gè)新型的體系,其下層程序可以模仿與其相似的體系程序編寫。
2) 平臺(tái)層次的移植。待移植處理器是某種uclinux已支持體系的分支處理器,即如果待移植的處理器是基于nios ii內(nèi)核的,而nios ii內(nèi)核已經(jīng)被uclinux支持,則需要在相關(guān)體系結(jié)構(gòu)目錄platform下建立相應(yīng)目錄并編寫相應(yīng)代碼,這些代碼主要是跟蹤程序(實(shí)現(xiàn)用戶程序到內(nèi)核函數(shù)的接口等功能)、中斷控制調(diào)度程序和內(nèi)存初始化程序等。
3) 板級(jí)移植。如果所用處理器(如cyclone ii版本系列)已經(jīng)被uclinux支持的話,就只需要板級(jí)移植了。板級(jí)移植需要修改或添加linux/arch/nios2nommu/scripts目錄中的文件,該目錄中主要是與具體硬件平臺(tái)相關(guān)的配置,可以利用nios ii自帶的sopc builder軟件生成具體平臺(tái)對(duì)應(yīng)的配置文件。
對(duì)于uclinux已經(jīng)支持的硬件架構(gòu),移植的過程相對(duì)較為簡(jiǎn)單,主要考慮修改與硬件開發(fā)平臺(tái)相關(guān)的具體因素,如內(nèi)存大小、外圍設(shè)備的配置等。一般現(xiàn)在做的大部分移植都是平臺(tái)層次移植和板級(jí)移植。
2.1.2. initramfs文件系統(tǒng)
作者使用的uclinux 2.6操作系統(tǒng)中,用initramfs文件系統(tǒng)取代了以前的romfs文件系統(tǒng)。
1. romfs文件系統(tǒng)。romfs文件系統(tǒng)是在uclinux 2.4以及之前版本廣泛用到的文件系統(tǒng),這種文件系統(tǒng)相對(duì)于一般的ext2/ext3文件系統(tǒng)要求更少的空間。romfs文件系統(tǒng)不支持動(dòng)態(tài)擦寫保存,對(duì)于系統(tǒng)需要?jiǎng)討B(tài)保存的數(shù)據(jù)采用虛擬ram盤的方法進(jìn)行處理(ram盤采用ext2/ext3文件系統(tǒng))。
2. initramfs文件系統(tǒng)[2]。initramfs是在2.5版本內(nèi)核中引入的技術(shù),它的基本思想是:在內(nèi)核鏡像中附加一個(gè)cpio包,cpio包中包含了一個(gè)小型的文件系統(tǒng),當(dāng)內(nèi)核啟動(dòng)時(shí),內(nèi)核將cpio包解開,并且將其中包含的文件系統(tǒng)作為初始的根文件系統(tǒng),內(nèi)核中的一部分初始化代碼會(huì)放到這個(gè)文件系統(tǒng)中作為用戶層進(jìn)程來執(zhí)行。這樣帶來的明顯的好處是精簡(jiǎn)了內(nèi)核的初始化代碼,例如尋找真正的啟動(dòng)盤、啟動(dòng)時(shí)的網(wǎng)絡(luò)安裝、acpi的安裝等,這些代碼都可以從內(nèi)核中移出,把它們都轉(zhuǎn)移到用戶空間完成,這樣使得開發(fā)者在用戶層就可以定制自己的啟動(dòng)過程,而不需要去修改內(nèi)核代碼,使定制啟動(dòng)過程變得更加容易。
2.2. 開發(fā)環(huán)境的建立
1. 建立交叉編譯環(huán)境。可以在uclinux官方網(wǎng)站下載支持nios ii的交叉編譯開發(fā)工具包,包括nios2-linux-uclibc-gcc、nios2-linux-uclibc-ld、nios2-linux-uclibc-objdump等。
安裝好交叉編譯工具包后,要在宿主pc上的linux系統(tǒng)的環(huán)境變量中(一般修改~/.bash_profile文件),添加對(duì)nios ii交叉編譯環(huán)境的支持,這樣在以后的開發(fā)中,就可以正常編譯在nios ii嵌入式平臺(tái)下運(yùn)行的程序了。
2. 內(nèi)核的下載和燒寫。在最初的調(diào)試中,是通過jtag把內(nèi)核下載到開發(fā)板,nios ii平臺(tái)的硬件邏輯也是通過jtag燒進(jìn)開發(fā)板,等到最后硬件邏輯測(cè)試沒有問題,以及uclinux操作系統(tǒng)調(diào)試運(yùn)行正常后,就可以制作帶bootloader的內(nèi)核,燒入flash中。
2
1. nios ii嵌入式處理器
nios ii是運(yùn)行在fpga上的五級(jí)流水線、單指令的risc處理器,它專門針對(duì)altera的可編程邏輯器件及片上可編程的設(shè)計(jì)思想做了相應(yīng)的優(yōu)化。作為一種可配置的精減的risc處理器,它可以與用戶自定義邏輯結(jié)合構(gòu)成sopc系統(tǒng),并下載到altera的可編程器件中。32位的nios ii軟核,結(jié)合外部閃存以及大容量存儲(chǔ)器,可以構(gòu)成一個(gè)功能強(qiáng)大的32位嵌入式處理器系統(tǒng)。此外,利用altera提供的ide(integrated development environment)開發(fā)工具 可以方便的在調(diào)試模式下調(diào)試處理器,提高開發(fā)的速度。
作者使用cyclone ii版nios ii應(yīng)用開發(fā)板nios-devkit-2c35 作為移植實(shí)現(xiàn)的平臺(tái),開發(fā)板主要包括cyclone ii ep2c35器件、epm7128ae cpld配置控制邏輯、存儲(chǔ)器、串行配置連接器、fpga和cpld的jtag接口等。
2. 移植
2.1. uclinux嵌入式操作系統(tǒng)
uclinux是linux的一個(gè)嵌入式版本,它經(jīng)過小型化改造,形成了一個(gè)高度優(yōu)化、代碼緊湊的嵌入式linux,并保留了linux的大多數(shù)優(yōu)點(diǎn)。最新的2.6版本在內(nèi)核主體中加入了提高中斷性能和調(diào)度響應(yīng)時(shí)間的改進(jìn),其中有三個(gè)最顯著的改進(jìn):采用可搶占內(nèi)核、更加有效的調(diào)度算法以及同步性的提高 。
2.1.1. uclinux操作系統(tǒng)的移植
uclinux源代碼絕大部分都是使用的c語言,只有那些直接與處理其硬件相關(guān)的代碼如開關(guān)cpu中斷等操作才采用匯編語言編寫,因此uclinux具有很好的移植性。一般來說,uclinux的移植大致分為三類:
1) 結(jié)構(gòu)層次的移植。如果待移植的處理器結(jié)構(gòu)不同于任何已經(jīng)支持的處理器結(jié)構(gòu),則需要修改linux/arch目錄下的相關(guān)處理器結(jié)構(gòu)的文件。uclinux內(nèi)核代碼的大部分是獨(dú)立于處理器和其體系結(jié)構(gòu)的,但是其最底層的代碼也是特定于各個(gè)系統(tǒng)的。他們的中斷處理上下文、內(nèi)存維護(hù)、任務(wù)上下文和初始化過程都是獨(dú)特的。對(duì)一個(gè)新型的體系,其下層程序可以模仿與其相似的體系程序編寫。
2) 平臺(tái)層次的移植。待移植處理器是某種uclinux已支持體系的分支處理器,即如果待移植的處理器是基于nios ii內(nèi)核的,而nios ii內(nèi)核已經(jīng)被uclinux支持,則需要在相關(guān)體系結(jié)構(gòu)目錄platform下建立相應(yīng)目錄并編寫相應(yīng)代碼,這些代碼主要是跟蹤程序(實(shí)現(xiàn)用戶程序到內(nèi)核函數(shù)的接口等功能)、中斷控制調(diào)度程序和內(nèi)存初始化程序等。
3) 板級(jí)移植。如果所用處理器(如cyclone ii版本系列)已經(jīng)被uclinux支持的話,就只需要板級(jí)移植了。板級(jí)移植需要修改或添加linux/arch/nios2nommu/scripts目錄中的文件,該目錄中主要是與具體硬件平臺(tái)相關(guān)的配置,可以利用nios ii自帶的sopc builder軟件生成具體平臺(tái)對(duì)應(yīng)的配置文件。
對(duì)于uclinux已經(jīng)支持的硬件架構(gòu),移植的過程相對(duì)較為簡(jiǎn)單,主要考慮修改與硬件開發(fā)平臺(tái)相關(guān)的具體因素,如內(nèi)存大小、外圍設(shè)備的配置等。一般現(xiàn)在做的大部分移植都是平臺(tái)層次移植和板級(jí)移植。
2.1.2. initramfs文件系統(tǒng)
作者使用的uclinux 2.6操作系統(tǒng)中,用initramfs文件系統(tǒng)取代了以前的romfs文件系統(tǒng)。
1. romfs文件系統(tǒng)。romfs文件系統(tǒng)是在uclinux 2.4以及之前版本廣泛用到的文件系統(tǒng),這種文件系統(tǒng)相對(duì)于一般的ext2/ext3文件系統(tǒng)要求更少的空間。romfs文件系統(tǒng)不支持動(dòng)態(tài)擦寫保存,對(duì)于系統(tǒng)需要?jiǎng)討B(tài)保存的數(shù)據(jù)采用虛擬ram盤的方法進(jìn)行處理(ram盤采用ext2/ext3文件系統(tǒng))。
2. initramfs文件系統(tǒng)[2]。initramfs是在2.5版本內(nèi)核中引入的技術(shù),它的基本思想是:在內(nèi)核鏡像中附加一個(gè)cpio包,cpio包中包含了一個(gè)小型的文件系統(tǒng),當(dāng)內(nèi)核啟動(dòng)時(shí),內(nèi)核將cpio包解開,并且將其中包含的文件系統(tǒng)作為初始的根文件系統(tǒng),內(nèi)核中的一部分初始化代碼會(huì)放到這個(gè)文件系統(tǒng)中作為用戶層進(jìn)程來執(zhí)行。這樣帶來的明顯的好處是精簡(jiǎn)了內(nèi)核的初始化代碼,例如尋找真正的啟動(dòng)盤、啟動(dòng)時(shí)的網(wǎng)絡(luò)安裝、acpi的安裝等,這些代碼都可以從內(nèi)核中移出,把它們都轉(zhuǎn)移到用戶空間完成,這樣使得開發(fā)者在用戶層就可以定制自己的啟動(dòng)過程,而不需要去修改內(nèi)核代碼,使定制啟動(dòng)過程變得更加容易。
2.2. 開發(fā)環(huán)境的建立
1. 建立交叉編譯環(huán)境?梢栽趗clinux官方網(wǎng)站下載支持nios ii的交叉編譯開發(fā)工具包,包括nios2-linux-uclibc-gcc、nios2-linux-uclibc-ld、nios2-linux-uclibc-objdump等。
安裝好交叉編譯工具包后,要在宿主pc上的linux系統(tǒng)的環(huán)境變量中(一般修改~/.bash_profile文件),添加對(duì)nios ii交叉編譯環(huán)境的支持,這樣在以后的開發(fā)中,就可以正常編譯在nios ii嵌入式平臺(tái)下運(yùn)行的程序了。
2. 內(nèi)核的下載和燒寫。在最初的調(diào)試中,是通過jtag把內(nèi)核下載到開發(fā)板,nios ii平臺(tái)的硬件邏輯也是通過jtag燒進(jìn)開發(fā)板,等到最后硬件邏輯測(cè)試沒有問題,以及uclinux操作系統(tǒng)調(diào)試運(yùn)行正常后,就可以制作帶bootloader的內(nèi)核,燒入flash中。
2
熱門點(diǎn)擊
- Linux設(shè)備驅(qū)動(dòng)程序的函數(shù)跳轉(zhuǎn)表
- PIE中斷向量的映射方式
- Linux系統(tǒng)調(diào)用例程system_call
- PIE模塊級(jí)中斷
- 什么是Linux內(nèi)核模塊
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- ARM復(fù)位原理
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- Linux字符設(shè)備驅(qū)動(dòng)程序的注冊(cè)
- Linux外部設(shè)備的基本概念
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點(diǎn)是“靈動(dòng)”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究