楊延慶
(西安醫學院 信息技術處,陜西 西安710021)
計算機技術的飛速發展使得計算機硬件的性能不斷提高,計算機由原來的大體積、單一的性能逐漸變得體積越來越小,集成度越來越高,性能越來越強.硬件復雜程度的增加對軟件的設計也提出了新的要求.計算機軟件的開發成本上升、周期增大,嵌入式系統性能越來越高,在應用中充分發揮了硬件性能的同時降低開發成本和開發難度.
解決硬件與軟件矛盾的做法是引入嵌入式操作系統.嵌入式操作系統是一種用途廣泛的系統軟件,通常包括與硬件相關的底層驅動程序、系統內核、設備驅動接口、通信協議、圖形界面及標準化瀏覽器等[1-2].嵌入式操作系統負責嵌入式系統的全部軟、硬件資源的分配、任務調度,控制、協調開發活動,通過裝卸某些模塊來達到系統所要求的功能[3-5].由于微內核與機器特征相關的代碼隔離在微內核的底層,因此在移植過程中只需修改內核中的代碼,嵌入式操作系統就可移植到不同的硬件平臺.本文在構建基于8086CPU的單芯片系統設計的基礎上研究將Linux操作系統移植到目標平臺.
單芯片計算機是將傳統PC的CPU、內存、顯卡等集成到單個芯片中.單芯片計算機與傳統PC相比具有體積小、質量好、能耗底等優點,同時系統的性能也有了很大的改善.促進計算機的迅速普及.
單芯片計算機的設計是一個基于某一型號CPU及其外圍I/O接口的SoC設計過程.本文選擇標準的Intel 8086CPU.
8086CPU芯片有最小模式與最大模式兩種工作模式.所謂最小模式,是指系統中只有一個8086微處理器,在這種情況下,所有的總線控制信號,都直接由8086CPU產生,系統的總線控制邏輯電路被減到最少,該模式適用于規模較小的微機應用系統.本文提及的8086CPU單芯片計算機采用最小工作模式進行設計.8086CPU單芯片計算機系統由硬件系統和軟件系統兩部分組成.

圖1 8086單芯片計算機硬件系統結構Fig.1 The 8086single chip computer hardware system structure
(1)硬件系統:硬件系統包括CPU子系統、接口部件子系統和存儲器子系統.CPU子系統包括8086CPU、數據收發控制器、地址鎖存器和存儲器譯碼電路等.接口部件子系統都掛載在Wishbone總線上,包括如下接口模塊:8254定時器/計數器、8255通用I/O接口、VGA顯示接口等.存儲器子系統包括RAM與ROM.搭建的8086單芯片計算機硬件系統如圖1所示.
(2)軟件系統包括操作系統和在此平臺上的應用軟件.Linux操作系統就是在上述硬件系統的基礎上進行移植的軟件系統.通過對開源的Linux操作系統內核進行裁剪來滿足用戶的需求.應用軟件指的是在操作系統移植成功以后,為滿足用戶的一些需求在8086單芯片計算機上安裝的一些應用軟件及進行的一系列的操作.
嵌人式系統開發采用的是宿主機-目標機模式,宿主機是PC機,宿主機上裝有操作系統 Windows XP,在Windows XP系統中裝有虛擬機vmware并在vmware上裝RedHatLinux5企業版;目標機采用Intel公司的推出的16位標準的Intel8086微處理器,有29 000只晶體管,速度可分為5MHz,8MHz,10MHz,16位的內部結構,16位雙向數據信號線,20位地址信號線,可尋址1M字節存儲單元,可利用第16位的地址總線來進行I/O端口尋址,可尋址64K個I/O端口,單一的5V電源.嵌入式Linux的載入通??梢酝ㄟ^在宿主機上運行專門的Flash燒寫工具來實現,運行該軟件后,宿主機能直接訪問目標板上的Flash器件.
本文所提到的8086單芯片計算機系統就是將Intel8086微處理器及其外圍設備運用硬件描述語言VHDL"軟化",實現8086微處理器的硬件功能.并在Xilinx公司推出的嵌入式系統開發板Virtex-ⅡPRO上實現了功能演示.
Linux內核移植前首先建立交叉編譯器編譯內核文件及應用程序[6-8],這是一個比較復雜的過程同時也是相當重要的過程.所謂交叉編譯就是在宿主機上進行編譯[9],生成目標機Intel8086處理器可執行的二進制位流文件.到網上下載交叉編譯工具鏈Crosstool-ng-1.5.3.因為Crosstool-ng能建立一個新的工具鏈以支持對最新kernel的編譯,然后在文件crosstool-ng-1.5.3中選擇適合目標板的gcc編譯器和函數庫glibc,選擇下面的行:

在已經安裝好的交叉編譯工具Crosstool-ng的基礎上對內核進行編譯,編譯內核整體上分為3個步驟:1、配置內核(就是確定哪些功能要保留在編譯好的內核中,哪些功能要從內核中刪除),生成一個編譯配置文件.config.2、編譯內核.3、安裝內核.具體步驟如下:


圖2 內核配置圖形化界面Fig.2 Kernel configuration graphical interface
該處也可以用make zImage,但必須確保所編譯的新內核在640K之下.新內核編譯成功之后,這些指令會在/usr/src/linux/arch/X86/boot/下生成bzImage.elf內核文件.
嵌入式系統的使用還需要根文件系統的支持,它是Linux系統的根本所在,啟動時必須加載以支持系統的運行.一般包括以下目錄內容:/bin(包含了應用程序);/boot(包含了內核和啟動文件);/dev(設備文件目錄);/proc(proc文件系統目錄);/etc(系統配置文件的目錄);/sbin(系統程序的目錄);/lib(共享函數庫的目錄);/mnt(裝載其它磁盤節點的目錄);/usr(附加應用程序的目錄),同時還要提供一些實用的基本工具,像ls、chmod、cd等.
有兩種基本的根文件系統制作方法,將system.ace文件放在壓縮flash卡進行有盤引導的本地文件系統LFS(local file system);通過網絡進行的無盤引導即網絡文件系統NFS(network file system).本文使用第一種方法,采用BusyBox制作一個去構件根文件系統,BusyBox具有shell的功能,它能提供系統所需要的大部分工具,包括編輯工具、網絡工具、模塊加載工具、壓縮解壓縮工具、查找工具、帳號密碼管理工具和進程相關工具等.其體積很小,這就使得我們能將根文件系統以及Linux內核存放在64KB的flash卡上.
下載并編譯BusyBox,Klingauf[7]詳細地介紹如何使用BusyBox制作根文件系統,按照其步驟只要修改mkrootfs.sh腳本的幾個地方就可生成根文件系統,因此節省了許多時間.修改如下:

還要改變兩個文件權限,如下:

將根文件系統拷貝到CF卡上.步驟如下:
(1)在Linux的/etc/fstab中輸入:

文件/etc/fstab下存放的是系統文件相關信息.如果該文件設置正確,則能夠通過"mount/directoryname"命令加載文件系統,不同的文件系統對應不同的行.“noauto”意思是當使用“mount-a”命令時文件系統不加載,“user”指的是允許一般用戶掛載文件系統,兩個零表示文件系統不需要轉儲、不需要啟動時被掃描.
運行命令:

表示對設備進行邏輯上的分區,將CF卡分成3個區,第一個區格式為FAT16,大小保證能夠放下system.ace文件就可以,第二個區為Linux Swap交換分區,第三個區用來存放根文件系統.
(2)在網站上下載mkdosfs工具,在windows操作系統下格式化CF卡上第一個區,然后運行命令:

將system.ace拷貝第一個分區上準備引導.
(3)在Linux操作系統下格式化第二個分區,運行命令:

一切準備就緒,將bzImage.elf和文件系統system.ace文件拷貝到CF卡中第一個分區,本地引導Linux,載入運行,在開發板上看到Linux的提示符后,移植就成功了.
(1)結合嵌入式Linux操作系統和8086單芯片計算機的特點,解決了Linux操作系統移植的關鍵技術,移植過程對于其他類型微處理器上Linux的移植具有參考價值.
(2)移植為構建完整的8086單芯片計算機系統提供了系統軟件,為應用軟件的運行提供了操作系統平臺.
[1]孫璐,陶晶,張勇智,等.基于8086CPU的單芯片計算機系統的設計[J].中國集成電路,2010(9):45-49.SUN Lu,TAO Jing,ZHANG Yongzhi,et al.The design of the single chip computer system based on 8086CPU[J].China Integrated Circuit,2010(9):45-49.
[2]李艷芳,唐云.EMU8086和 DEBUG在《微機原理》課程教學中的應用[J].湖南科技學院學報,2013,34(8):41-43.LI Yanfang,TANG Yun.EMU8086and DEBUG in the application of the course“microcomputer principle”teaching[J].Journal of Hunan University of Science and Engineering,2013,34(8):41-43.
[3]SAVITZKY E,STEPHEN R.Real-time microprocessor systems[M].NewYork:Van Nostrand Reinhold Company,2012:35-60.
[4]王亞剛.嵌入式Bootloader機制的分析與移植[J].計算機工程,2010,36(6):267-269.WANG Yagang.Embedded Bootloader mechanism analysis and transplantation[J].Computer Engineering,2010,36(6):267-269.
[5]陳國強.嵌入式Linux操作系統的研究[J].計算機光盤軟件與應用,2014,12(1):144-145.CHEN Guoqiang.Research of embedded Linux operating system[J].Computer CD Software and Applications,2014,12(1):144-145.
[6]李曉寧,李曉峰.基于嵌入式Linux操作系統的研究[J].長春師范學院學報,2010,22(2):93-96.LI Xiaoning,LI Xiaofeng.Based on the research of embedded Linux operating system[J].Journal of Changchun Normal University,2010,22(2):93-96.
[7]劉文峰,李程遠,李善平.嵌入式Linux操作系統的研究[J].浙江大學學報:理學版,2010,14(4):112-113.LIU Wenfeng,LI Chengyuan,LI Shanping.Research of embedded Linux operating system[J].Journal of Zhejiang University:Science Edition,2010,14(4):112-113.
[8]武苗苗,郭雯雯.嵌入式Linux操作系統通信管理的設計研究[J].電子技術與軟件工程,2013,12(10):102-103.WU Miaomiao,GUO Wenwen.Communication management of embedded Linux operating system design research[J].Electronic Technology and Software Engineering,2013,12(10):102-103.
[9]Kernel org.The public site for downloading linux kernel archives[EB/OL].(2011-02-17)[2015-01-10].http://www.klingauf.de/v2p/index.phtml.
[10]武杰.基于 ARM9的嵌入式Linux移植[J].自動化技術與應用,2014(3):59-62.WU Jie.Based on ARM9embedded Linux transplantation[J].Techniques of Automation and Application,2014(3):59-62.
[11]韓守謙,裴海龍,王清陽.基于 Xenomai實時嵌入式Linux操作系統的構建[J].計算機工程與設計,2011,35(1):123-124.HAN Shouqian,PEI Hailong,WANG Qingyang.Build based on Xenomai real-time embedded Linux operating system[J].Computer Engineering and Design,2011,35(1):123-124.