1 引言 嵌入式系統(tǒng)是近年來計算機(jī)學(xué)科領(lǐng)域一個新的發(fā)展方向。尼葛洛龐帝曾在2001年時預(yù)言,嵌入式智能電腦將是繼PC和Internet之后的最偉大發(fā)明。在當(dāng)今社會中,嵌入式系統(tǒng)已經(jīng)廣泛滲透到我們的工作、生活中的各個領(lǐng)域。隨著消費電子行業(yè)的飛速發(fā)展,嵌入式系統(tǒng)工程師的需求量越來越大,相關(guān)課程的學(xué)習(xí)和培訓(xùn)也越來越多。在眾多品牌嵌入式教學(xué)實驗平臺的實際使用過程中,筆者發(fā)現(xiàn)了一些問題。 首先是目前的設(shè)備利用率不高。大多數(shù)設(shè)備提供的bootloader只能安裝一個操作系統(tǒng),這讓用戶能接觸到的內(nèi)容非常有限。其次,由于參加各類競賽活動的設(shè)備對操作系統(tǒng)的需求比較多樣,因此每次都必須花時間給設(shè)備重新安裝所需的操作系統(tǒng)。然而,這樣的改動又會對日常的教學(xué)活動帶來一些不便,操作系統(tǒng)的更改將可能導(dǎo)致課程實驗無法正常進(jìn)行。最后,由于安裝操作系統(tǒng)的單一性,使一些初次接觸嵌入式系統(tǒng)的用戶對它產(chǎn)生了一些狹隘的認(rèn)識,無法更大地激發(fā)大家的學(xué)習(xí)興趣。 如果能夠?qū)崿F(xiàn)在一臺嵌入式教學(xué)實驗平臺上安裝多個操作系統(tǒng),系統(tǒng)之間彼此互不干擾,并且能夠根據(jù)用戶的要求啟動不同的系統(tǒng),那么上述這些問題將會得到很好的解決。當(dāng)然,在實際的應(yīng)用中,我們也可以在某個嵌入式平臺上安裝多操作系統(tǒng),從而方便的在不同系統(tǒng)間切換來解決問題。為此,筆者對正在使用的S3C2410開發(fā)板做了一些改動,并根據(jù)它的實際情況考慮了一套完整的解決方案。 本文首先分析了為何選用U-Boot作為Bootloader, 之后詳細(xì)介紹了每種嵌入式操作系統(tǒng)在U-Boot下啟動所需的一些修改,最后給出了實現(xiàn)的效果圖。 2 Bootloader的選擇 嵌入式系統(tǒng)的啟動如同PC機(jī)的啟動一樣,有一個固定的步驟,通常我們把實現(xiàn)這個啟動步驟的程序稱為bootloader。bootloader對于嵌入式系統(tǒng)的重要性猶如BIOS對于PC那樣。如果沒有一個正確的bootloader,系統(tǒng)可能將無法啟動。目前,比較常用的bootloader有vivi、U-Boot、E-Boot、blob等,其中E-Boot為Microsoft Windows CE啟動專用的bootloader,無法啟動其他操作系統(tǒng)。因此,在設(shè)計之初選擇一個合適的bootloader非常有必要。考慮到 vivi缺少以太網(wǎng)接口芯片AX8876的驅(qū)動程序等原因,我們最終決定使用 U-Boot作為開發(fā)的bootloader。 U-Boot,全稱Universal Boot Loader,是遵循GPL條款的開放源碼項目。從 FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。目前,它支持Linux、VxWorks,QNX,ARTOS,LynxOS等眾多嵌入式操作系統(tǒng)。這是U-Boot中 Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、XScale等常用系列的處理器。這兩個特點正是U-Boot項目的開發(fā)目標(biāo),即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。目前U-Boot的最新版本為 1.2.0,我們也以U-Boot 1.2.0作為系統(tǒng)的bootloader。與DOS等操作系統(tǒng)類似,U-Boot也具有一個命令行控制臺,用戶可以通過U-Boot的內(nèi)建指令來完成一系列的操作,包括傳輸、讀寫、運行等。 3 多系統(tǒng)啟動的設(shè)計 在多系統(tǒng)啟動的研究過程中涉及U-Boot、vivi、WinCE、Linux、uCOS等多個系統(tǒng)或軟件,其整體框架如下圖1所示。 ![]() 圖1 多系統(tǒng)啟動的整體設(shè)計圖 該平臺的開發(fā)過程中涉及了系統(tǒng)的啟動方式、設(shè)備驅(qū)動程序更改、Linux根文件系統(tǒng)、WinCE和Linux系統(tǒng)的配置和編譯、多操作系統(tǒng)的安裝等多項具體內(nèi)容。下面我們將詳細(xì)介紹每種系統(tǒng)在U-Boot下啟動所需的一些改動。 3.1 WinCE在U-Boot下的啟動 一般情況下,安裝WinCE的步驟是先燒寫Nboot到block0,再燒寫tocblock1到 block1,然后燒寫E-Boot到block2,最后用E-Boot通過以太網(wǎng)接口燒寫 WinCE鏡像文件。其中Nboot是實現(xiàn)從Nand Flash啟動,tocblock1則負(fù)責(zé)保存 E-Boot中設(shè)置的各項參數(shù)。使用了U-Boot之后,U-Boot代替了Nboot的功能,但tocblock1卻缺失了。這造成了E-Boot的參數(shù)無法正常保存,最終導(dǎo)致無法正常下載和保存WinCE鏡像文件。通過實驗發(fā)現(xiàn)如果強(qiáng)行保存E-Boot的參數(shù),將造成U-Boot的損壞,整個系統(tǒng)將徹底無法啟動。 最終,將定制好的鏡像文件NK.nb0直接下載到所對應(yīng)的內(nèi)存地址后運行,這樣WinCE的啟動就成功了。另外,必須注意的一點就是,在加載鏡像文件之前,必須先將待用的內(nèi)存空間擦除,否則可能導(dǎo)致系統(tǒng)啟動出錯。 3.2 Linux在U-Boot下的啟動 在嵌入式Linux系統(tǒng)中,主要分為兩個部分:系統(tǒng)內(nèi)核與根文件系統(tǒng)。其中系統(tǒng)內(nèi)核包含了操作系統(tǒng)的主要功能、額外功能模塊和設(shè)備驅(qū)動程序。而根文件系統(tǒng)則是內(nèi)核在加載了之后第一個掛載的文件系統(tǒng)。它是一個特殊的文件系統(tǒng),如果它無法被正常掛載,則可能導(dǎo)致整個Linux系統(tǒng)啟動失敗。 為了使linux可以在U-Boot下啟動,我們需要做如下一些修改。 首先,我們應(yīng)保證Linux內(nèi)核能獲取到正確的啟動參數(shù)。啟動參數(shù)往往是 bootloader中設(shè)置的,Linux內(nèi)核通過讀取bootloader中預(yù)設(shè)的啟動參數(shù)來尋找根文件系統(tǒng)的位置。為了讀取正確的啟動參數(shù),必須要對Linux內(nèi)核做一個處理。mkimage工具是編譯U-Boot時產(chǎn)生的一個工具,它會在原來的可執(zhí)行鏡像文件上增加一個0x40字節(jié)的文件頭,用于指定諸如CPU架構(gòu)、操作系統(tǒng)、文件類型、是否壓縮、入口地址等各類信息。使用了mkimage工具以后,再搭配使用U-Boot控制臺中的命令,就能讀取到啟動參數(shù)了。 其次,在vivi中,最底層的文件系統(tǒng)是bon。vivi有一套bon命令,用于格式化Flash并創(chuàng)建bon文件系統(tǒng),而MTD(Memory Technology Device)則可以與之共存。最后可以將bon或MTD作為根文件系統(tǒng)。如果不使用vivi的bon文件系統(tǒng),那么必須在某個地方存放Flash的分區(qū)信息。這時,最大的可能就是存放在Linux內(nèi)核中。如果要直接使用MTD,則可以通過修改代碼,在Linux內(nèi)核中指定分區(qū)信息。在找到根文件系統(tǒng)后,Linux便能正常啟動了。 3.3 uCOS在U-Boot下的啟動 用ARM Develop Suite編譯后的uCOS系統(tǒng)可以得到一個二進(jìn)制的可執(zhí)行文件 system.bin,下載到編譯時設(shè)置的入口內(nèi)存地址即可運行。uCOS的YAFFS文件系統(tǒng)需要bon文件系統(tǒng)的支持,可以用vivi來完成建立bon文件系統(tǒng)的工作,而且必須用匯編語言在U-Boot的start.S文件中對CPU進(jìn)行初始化,否則將造成uCOS實驗無法正常運行。 至此,WinCE、Linux、uCOS三個操作系統(tǒng)在U-Boot下都可以正常啟動了。為了更好的完善多系統(tǒng)啟動平臺,我們還進(jìn)行了以下三個方面的補充。首先,顯示方面主要包含LCD驅(qū)動程序,并且在系統(tǒng)啟動時顯示bmp文件格式的單色 Logo,在屏幕下方顯示7種顏色的色塊,以驗證屏幕是否正常工作。其次,為方便用戶的使用,也可以通過觸摸屏直接選擇需要啟動的系統(tǒng),無需連接PC主機(jī)。主要包含加載觸摸屏驅(qū)動程序,讀取校準(zhǔn)參數(shù),反饋用戶操作,啟動系統(tǒng)或者接受用戶從鍵盤發(fā)出的命令來啟動系統(tǒng)。最后,在系統(tǒng)具有密碼保護(hù)的情況下,拒絕未經(jīng)授權(quán)的用戶登錄U-Boot的命令行。因為U-Boot的nand命令組可以對Flash進(jìn)行格式化操作,這給學(xué)校機(jī)房的管理帶來很多不便。 4 運行效果 在系統(tǒng)啟動后,啟動界面如圖2所示。用戶可以根據(jù)相關(guān)提示選擇希望啟動的操作系統(tǒng),如果用戶放棄選擇,則默認(rèn)進(jìn)入uCOS操作系統(tǒng)。之后,我們又隨機(jī)進(jìn)行了一些測試,測試結(jié)果表明:每種系統(tǒng)都可以正常、穩(wěn)定的運行。本平臺為支持多操作系統(tǒng)的可視化教學(xué)實驗平臺,主要具有以下功能: (1)在同一設(shè)備上實現(xiàn)WinCE、Linux、uCOS操作系統(tǒng)的共存和選擇啟動。 (2)在系統(tǒng)啟動時顯示產(chǎn)品Logo。 (3)對bootloader命令行實施密碼保護(hù),禁止未經(jīng)授權(quán)用戶更改Flash中的系統(tǒng)數(shù)據(jù)。 (4)用戶可以通過PC主機(jī)和平臺的串口通訊選擇需要啟動的系統(tǒng)。 (5)用戶可以通過觸摸屏直接選擇需要啟動的系統(tǒng),無需連接PC主機(jī)。 ![]() 圖2 啟動界面效果圖 5 結(jié)束語 本文以博創(chuàng)公司的UP-NETARM2410-S作為硬件支持,以 U-Boot作為系統(tǒng)的 Bootloader,在原平臺的基礎(chǔ)上提供更為友好、更為實用的啟動界面,能在同一臺設(shè)備上完成WinCE、Linux和 uCOS多操作系統(tǒng)的選擇啟動,而且啟動的每個系統(tǒng)都可以正常、穩(wěn)定的運行。本文所提出的多系統(tǒng)啟動具有良好的推廣價值,可適用于多種嵌入式平臺。 本文創(chuàng)新點:實現(xiàn)了基于S3C2410開發(fā)板,WinCE、Linux和 uCOS多操作系統(tǒng)的選擇啟動,不僅具有友好、方便的圖形化用戶操作界面,而且用戶可脫離 PC主機(jī)直接選擇需要啟動的系統(tǒng)。啟動后的每個系統(tǒng)都可以正常、穩(wěn)定的運行。 作者:薛小艷,支小莉 來源:《微計算機(jī)信息》(嵌入式與SOC)2009年第7-2期 |