本發(fā)明涉及嵌入式操作系統(tǒng)領(lǐng)域,特別是涉及嵌入式Linux在特定硬件平臺(tái)上的移植和啟動(dòng)。
背景技術(shù):
與其他嵌入式操作系統(tǒng)相比,嵌入式Linux具有源碼開放、高穩(wěn)定性、開發(fā)成本低、硬件支持多樣、易移植性、開發(fā)周期短等特點(diǎn),被學(xué)術(shù)界、商業(yè)界、工業(yè)界廣泛關(guān)注。在嵌入式應(yīng)用方面,Linux 2.6新版本內(nèi)核提供更強(qiáng)有力的支持,比如對(duì)中斷特性的提升、響應(yīng)時(shí)間的縮短、內(nèi)核搶占特性的支持、高效調(diào)度算法的引入等等,特別是實(shí)時(shí)特性的提升,使得其在嵌入式系統(tǒng)中得到更為廣泛的應(yīng)用。
SoPC(System On a Programmable Chip,可編程片上系統(tǒng))作為一種特殊的嵌入式微處理器系統(tǒng),融合了SoC和FPGA各自的優(yōu)點(diǎn),并具備軟硬件在系統(tǒng)可編程、可裁減、可擴(kuò)充、可升級(jí)的功能,已逐漸成為一個(gè)新興的技術(shù)方向。SoPC的核心是在FPGA上實(shí)現(xiàn)的嵌入式微處理器核,而如何針對(duì)特定的微處理器選擇合適的嵌入式操作系統(tǒng)是SoPC開發(fā)的難點(diǎn)之一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提出一種移植嵌入式系統(tǒng)并在SD卡啟動(dòng)的方法,實(shí)現(xiàn)Linux中自定義硬件設(shè)備驅(qū)動(dòng)的添加、系統(tǒng)配置和SD卡的啟動(dòng)。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下:
一種移植嵌入式系統(tǒng)并在SD卡啟動(dòng)的方法,包括以下步驟:
1)建立交叉編譯環(huán)境
采用交叉編譯的方法,在宿主機(jī)上對(duì)內(nèi)核和應(yīng)用程序進(jìn)行編譯,生成目標(biāo)機(jī)處理器可執(zhí)行的二進(jìn)制位流文件,將此文件下載到目標(biāo)機(jī)運(yùn)行;針對(duì)軟核微處理器建立交叉編譯器,運(yùn)行source./settings.sh腳本,自動(dòng)建立交叉編譯環(huán)境;
2)建立硬件平臺(tái)
為每個(gè)應(yīng)用工程建立一個(gè)文件夾,保存該工程的硬件配置,選擇相應(yīng)的硬件平臺(tái),內(nèi)核就會(huì)讀取該工程文件夾下的配置文件。使用Linux-newplatform命令建立硬件平臺(tái),運(yùn)行make menuconfig命令,在Vendor/Product Selction選項(xiàng)中選擇該硬件平臺(tái),將在EDK下生成的配置文件轉(zhuǎn)換成Linux可以識(shí)別的格式,在工程文件夾下運(yùn)行Linux-copy-autoconfig命令,自動(dòng)完成格式轉(zhuǎn)換,并拷貝配置文件到已選擇的工程文件夾下;
3)添加自定義設(shè)備驅(qū)動(dòng)
將自定義IP核添加到Linux配置中。主要步驟如下:
首先使設(shè)備初始化函數(shù)ddc.c與內(nèi)核配置相關(guān)聯(lián);
然后使設(shè)備驅(qū)動(dòng)程序ddc_adapter.c與內(nèi)核配置相關(guān)聯(lián);
最后修改設(shè)備驅(qū)動(dòng)程序所在目錄下的Kconfig文件,使配置內(nèi)核時(shí)可以選擇該設(shè)備驅(qū)動(dòng),由此在配置Linux內(nèi)核時(shí)選擇自定義的設(shè)備驅(qū)動(dòng);
4)配置Linux內(nèi)核
運(yùn)行圖形編輯工具make menuconfig命令,對(duì)內(nèi)核和系統(tǒng)環(huán)境進(jìn)行配置。
在內(nèi)核配置的設(shè)備驅(qū)動(dòng)選項(xiàng)中,選擇與系統(tǒng)的硬件配置一致的硬件設(shè)備驅(qū)動(dòng),具體配置以下幾項(xiàng):
[Block devices]塊設(shè)備選擇;
[Misc device]混雜設(shè)備選擇;
[Network device support]網(wǎng)絡(luò)設(shè)備選擇;
[Character devices]字符設(shè)備選擇;
掛載DOS文件系統(tǒng)的SD卡,自動(dòng)進(jìn)入系統(tǒng)環(huán)境配置,包括以下幾項(xiàng):
[System Settings]系統(tǒng)設(shè)置;
[Core Applications]內(nèi)核應(yīng)用;
[Network Applications]網(wǎng)絡(luò)應(yīng)用;
[Miscellaneous Applications]混雜應(yīng)用;
[BusyBox]:配置系統(tǒng)內(nèi)核中的命令;
依次執(zhí)行命令:make dep,make clean,make all,建立文件依賴關(guān)系,清除舊文件,編譯內(nèi)核,生成內(nèi)核image;
5)修改Linux配置文件
將上述步驟生成的image文件下載到SoPC中,正常登陸Linux系統(tǒng),修改inittab文件,直接啟動(dòng)shell;自動(dòng)運(yùn)行應(yīng)用程序:修改rc文件,在此添加應(yīng)用程序的命令,啟動(dòng)后運(yùn)行該命令;去掉customize Vendor/User Setting中Core Applications下的agetty選項(xiàng)和init選項(xiàng),重新編譯內(nèi)核,使修改寫入Linux的文件系統(tǒng)中;
6)使用SD卡啟動(dòng)Linux
將硬件比特流文件和image.elf制作成ACE文件,復(fù)制到SD卡中,配置SD卡啟動(dòng)Linux,將SD卡分區(qū)和格式化,然后掛載此文件系統(tǒng),步驟如下:
(1)將SD卡掛載到Linux系統(tǒng)中,運(yùn)行命令fdisk/dev/sda把SD卡分成3個(gè)區(qū),第一分區(qū)存放system.ace文件;第二分區(qū)為L(zhǎng)inux Swap交換分區(qū),第三分區(qū)存放根文件系統(tǒng);
(2)Linux下格式化第三分區(qū)為ext2文件系統(tǒng),運(yùn)行命令:mke2fs/dev/sda3;在/etc/fstab下輸入命令:/dev/sda3/mnt/rootfs auto defaults,user,noauto 0 0;掛載該目錄:mount/mnt/rootfs,把根文件系統(tǒng)rootfs拷貝到SD卡的該分區(qū)上;
(3)Windows下格式化第一分區(qū)為FAT32文件系統(tǒng),把system.ace復(fù)制到這個(gè)分區(qū);
(4)Linux下格式化第二分區(qū)為交換分區(qū),運(yùn)行命令:mkswap/dev/sda2。
(5)就緒后,插入SD卡,開啟電源,從SD卡啟動(dòng)Linux。
本發(fā)明與背景技術(shù)相比,具有的以下有益效果:實(shí)現(xiàn)了Linux在軟核處理器的移植,并成功實(shí)現(xiàn)Linux中自定義硬件設(shè)備驅(qū)動(dòng)的添加、系統(tǒng)配置和SD卡的啟動(dòng)方案。通過移植Linux,本文開發(fā)的SoPC可以直接用于實(shí)際工程;該嵌入式操作系統(tǒng)的移植快速、簡(jiǎn)單,而且由于其基于Linux內(nèi)核,從而保證了系統(tǒng)的穩(wěn)定性。
具體實(shí)施方式
下面進(jìn)一步描述本發(fā)明的優(yōu)選實(shí)施例。
在SoPC硬件系統(tǒng)構(gòu)建完成后,針對(duì)此結(jié)構(gòu)配置操作系統(tǒng)的內(nèi)核,具體步驟如下:
1.建立交叉編譯環(huán)境
嵌入式系統(tǒng)開發(fā)一般采用交叉編譯的方法,即在宿主機(jī)上對(duì)內(nèi)核和應(yīng)用程序進(jìn)行編譯,生成目標(biāo)機(jī)處理器可執(zhí)行的二進(jìn)制位流文件,將此文件下載到目標(biāo)機(jī)運(yùn)行。Linux針對(duì)軟核微處理器建立交叉編譯器,運(yùn)行source./settings.sh腳本,系統(tǒng)會(huì)自動(dòng)建立交叉編譯環(huán)境。
2.建立硬件平臺(tái)
為每個(gè)應(yīng)用工程建立一個(gè)文件夾,保存該工程的硬件配置。在移植Linux時(shí),只需選擇相應(yīng)的硬件平臺(tái),內(nèi)核就會(huì)讀取該工程文件夾下的配置文件。使用Linux-newplatform命令建立硬件平臺(tái),如果使用MMU(虛擬內(nèi)存管理單元),則在此命令后添加-m選項(xiàng)。硬件平臺(tái)建立起來后,運(yùn)行make menuconfig命令,在Vendor/Product Selction選項(xiàng)中選擇該硬件平臺(tái)。此時(shí),還需將在EDK下生成的配置文件轉(zhuǎn)換成Linux可以識(shí)別的格式。在工程文件夾下運(yùn)行Linux-copy-autoconfig命令,自動(dòng)完成格式轉(zhuǎn)換,并拷貝配置文件到已選擇的工程文件夾下。
3.添加自定義設(shè)備驅(qū)動(dòng)
本系統(tǒng)自定義了IP核,因此必須開發(fā)驅(qū)動(dòng)程序并將其添加到Linux配置中。添加自定義設(shè)備驅(qū)動(dòng)主要步驟如下:
首先在平臺(tái)配置目錄下Makefile文件中添加語句:
platobj-$(CONFIG_ETLOGIX_DDC)+=ddc.o
和
$(obj)/ddc.o:.config,
使設(shè)備初始化函數(shù)ddc.c與內(nèi)核配置相關(guān)聯(lián);
然后在驅(qū)動(dòng)程序所在目錄下的Makefile文件中添加語句:
obj-$(CONFIG_ETLOGIX_DDC)+=ddc_adapter.o,
使設(shè)備驅(qū)動(dòng)程序ddc_adapter.c與內(nèi)核配置相關(guān)聯(lián);
最后修改設(shè)備驅(qū)動(dòng)程序所在目錄下的Kconfig文件,使配置內(nèi)核時(shí)可以選擇該設(shè)備驅(qū)動(dòng),添加以下語句:
config ETLOGIX_DDC//內(nèi)核配置目錄中所顯示的選項(xiàng)
bool"ETLogix DDC Driver"http://該配置選項(xiàng)為布爾型,即有選擇和不選擇兩種狀態(tài)
depends on MICROBLAZE//該配置選項(xiàng)的依賴關(guān)系
通過以上文件的修改,就可以在配置Linux內(nèi)核時(shí)選擇自定義的設(shè)備驅(qū)動(dòng)。
4.配置Linux內(nèi)核
Linux內(nèi)核的可裁剪性使我們能夠方便地將內(nèi)核通過修改、裁剪、編譯移植到一個(gè)嵌入式系統(tǒng)中。運(yùn)行圖形編輯工具make menuconfig命令,對(duì)內(nèi)核和系統(tǒng)環(huán)境進(jìn)行配置。
在內(nèi)核配置的設(shè)備驅(qū)動(dòng)選項(xiàng)中,一定要選擇與系統(tǒng)的硬件配置一致的硬件設(shè)備驅(qū)動(dòng),否則內(nèi)核編譯時(shí)就會(huì)出錯(cuò)。針對(duì)本系統(tǒng)的硬件配置,主要配置以下幾項(xiàng)驅(qū)動(dòng):
[Block devices]塊設(shè)備選擇Xilinx SystemACE support;
[Misc device]混雜設(shè)備選擇FSL FIFO driver,然后進(jìn)入FSL Channel Selection,選擇FIFO on FSL0;選擇自添加設(shè)備驅(qū)動(dòng)ETLogix DDC101 Driver;
[Network device support]網(wǎng)絡(luò)設(shè)備選擇Ethernet(1000Mbit)子菜單中的Xilinx 10/100/1000LL TEMAC support;
[Character devices]字符設(shè)備選擇Serial drivers子菜單中的8250/16550and compatible serial support和Console on 8250/16550and compatible serial port;
文件系統(tǒng)選項(xiàng)中,默認(rèn)選擇了ext2、romfs和cramfs文件系統(tǒng),其他文件系統(tǒng)可以根據(jù)需要自行選擇。本系統(tǒng)需要掛載DOS文件系統(tǒng)的SD卡,因此進(jìn)行以下配置:
[DOS/FAT/NT Filesystems]選擇MSDOS fs support;
[Native Language Support],選擇Codepage 437(United States,Canada);內(nèi)核配置中的其它的配置可以根據(jù)目標(biāo)系統(tǒng)的不同靈活配置,配置完成后保存退出,自動(dòng)進(jìn)入系統(tǒng)環(huán)境配置菜單。
系統(tǒng)環(huán)境配置是對(duì)Linux的屬性、命令進(jìn)行配置,主要有以下幾個(gè)選項(xiàng):
[System Settings]系統(tǒng)設(shè)置:配置系統(tǒng)的網(wǎng)絡(luò)地址、默認(rèn)用戶名、默認(rèn)登陸密碼和所用根文件系統(tǒng)等內(nèi)容;
[Core Applications]內(nèi)核應(yīng)用:主要配置內(nèi)核的常用特性;
[Network Applications]網(wǎng)絡(luò)應(yīng)用:配置網(wǎng)絡(luò)應(yīng)用時(shí)的相關(guān)命令;
[Miscellaneous Applications]混雜應(yīng)用:配置系統(tǒng)內(nèi)核中的命令;
[BusyBox]:配置系統(tǒng)內(nèi)核中的命令。
Linux已經(jīng)設(shè)置好了編譯規(guī)則,因此配置完成后,依次執(zhí)行命令:make dep,make clean,make all,建立文件依賴關(guān)系,清除舊的文件,編譯內(nèi)核,生成內(nèi)核image。
2.5修改Linux配置文件
將上述步驟生成的image文件下載到SoPC中即可正常登陸Linux系統(tǒng),如果應(yīng)用工程有特殊要求,可以修改所生成文件系統(tǒng)中的文件。本系統(tǒng)需SoPC上電后自動(dòng)登錄系統(tǒng),并運(yùn)行開發(fā)的應(yīng)用程序,因此,進(jìn)行如下配置:修改inittab文件,將ttyS0:vt100:后面修改為/bin/sh,這樣在內(nèi)核啟動(dòng)時(shí),就不需要輸入系統(tǒng)的用戶名和密碼直接啟動(dòng)shell;自動(dòng)運(yùn)行應(yīng)用程序:修改rc文件,在此添加應(yīng)用程序的命令,Linux啟動(dòng)后就會(huì)運(yùn)行該命令。修改后,還需去掉customize Vendor/User Setting中Core Applications下的agetty選項(xiàng)和init選項(xiàng),否則,在重新編譯內(nèi)核時(shí)將覆蓋修改的內(nèi)容。修改完配置文件后,要重新編譯內(nèi)核,使修改寫入Linux的文件系統(tǒng)中。
經(jīng)過編譯的Linux內(nèi)核image文件主要有:image.bin、image.elf、image.ub。根據(jù)選擇image文件的不同,Linux有四種啟動(dòng)方案:XMD下載啟動(dòng)、TFTP網(wǎng)絡(luò)下載啟動(dòng)、FLASH啟動(dòng)和SD卡啟動(dòng)。其中,XMD和TFTP網(wǎng)絡(luò)下載啟動(dòng)方案,在每次系統(tǒng)上電后都必須重新下載,適用于系統(tǒng)調(diào)試;FLASH啟動(dòng)方案在系統(tǒng)上電后自動(dòng)從FLASH中讀取配置文件,但FLASH燒寫速度較慢,更改系統(tǒng)配置較為不便;因此,本系統(tǒng)選用SD卡啟動(dòng)方案。
使用SD卡啟動(dòng)Linux,是將硬件比特流文件和image.elf制作成ACE文件,復(fù)制到SD卡中,配置SD卡啟動(dòng)Linux。制作ACE文件,在EDK Shell窗口運(yùn)行命令:
xmd-tcl genace.tcl(命令工具)
-jprog-board ml402(所需的開發(fā)板)
-hw implementation/download.bit(生成的bitstream文件)
-elf image.elf(編譯linux內(nèi)核生成的可執(zhí)行網(wǎng)表文件)
-ace system.ace(需生成的ACE文件)
成功后,適合于ML-402開發(fā)板的ACE文件就生成了。
Linux運(yùn)行需要根文件系統(tǒng)的支持,它是Linux系統(tǒng)的根本所在,啟動(dòng)時(shí)必須加載以支持系統(tǒng)的運(yùn)行。而image.elf中不包含文件系統(tǒng),因此,使用SD卡啟動(dòng)時(shí)必須手動(dòng)加載文件系統(tǒng)。在編譯Linux內(nèi)核時(shí),已經(jīng)生成了以romfs文件夾為名稱的文件系統(tǒng),所以只需將SD卡分區(qū)和格式化,然后掛載此文件系統(tǒng),步驟如下:
(1)將SD卡掛載到Linux系統(tǒng)中,運(yùn)行命令fdisk/dev/sda把SD卡分成3個(gè)區(qū),第一分區(qū)存放system.ace文件;第二分區(qū)為L(zhǎng)inux Swap交換分區(qū),第三分區(qū)存放根文件系統(tǒng)。
(2)Linux下格式化第三分區(qū)為ext2文件系統(tǒng),運(yùn)行命令:mke2fs/dev/sda3;在/etc/fstab下輸入命令:/dev/sda3/mnt/rootfs auto defaults,user,noauto 0 0(把設(shè)備sda3掛在/mnt/rootfs文件下,文件系統(tǒng)為默認(rèn)的ext2,普通用戶,能掛載,不轉(zhuǎn)儲(chǔ),不在啟動(dòng)時(shí)掃描文件系統(tǒng));掛載該目錄:mount/mnt/rootfs,這樣就可以把根文件系統(tǒng)rootfs拷貝到SD卡的該分區(qū)上。
(3)Windows下格式化第一分區(qū)為FAT32文件系統(tǒng),把system.ace復(fù)制到這個(gè)分區(qū)。
(4)Linux下格式化第二分區(qū)為交換分區(qū),運(yùn)行命令:mkswap/dev/sda2。
準(zhǔn)備就緒后,插入SD卡,開啟電源,就可以從SD卡啟動(dòng)Linux。
本文介紹了一種用于軟核處理器的嵌入式Linux操作系統(tǒng),并詳細(xì)討論了其內(nèi)核配置和啟動(dòng)方案。通過移植Linux,本文開發(fā)的SoPC可以直接用于實(shí)際工程;該嵌入式操作系統(tǒng)的移植快速、簡(jiǎn)單,而且由于其基于Linux內(nèi)核,從而保證了系統(tǒng)的穩(wěn)定性。因此,在SoPC應(yīng)用日益復(fù)雜的背景下具有很大意義和良好的應(yīng)用前景。
應(yīng)該理解,上述實(shí)施例僅僅是說明性的,本發(fā)明并不局限于該特定實(shí)施例,在不脫離本發(fā)明精神和范圍的情況下,可以對(duì)本發(fā)明做出各種各樣的改進(jìn)和變型。