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