鮑尚東 王杰
摘 要:針對(duì)嵌入式系統(tǒng)的特點(diǎn),本文較詳細(xì)的給出了嵌入式linux系統(tǒng)的構(gòu)建流程和方法。主要分為開發(fā)環(huán)境的建立,linux的安裝和編譯器的制作。bootloader、linux內(nèi)核、文件系統(tǒng)的移植以及驅(qū)動(dòng)程序編寫。
關(guān)鍵詞:linux;bootloader;根文件系統(tǒng);驅(qū)動(dòng)程序
DOI:10.16640/j.cnki.37-1222/t.2019.05.144
企業(yè)對(duì)嵌入式linux工程師的需求量大,所以嵌入式linux的開發(fā)是一門熱門的領(lǐng)域。嵌入式linux系統(tǒng)的開發(fā)涉及到硬件電路的設(shè)計(jì)、操作系統(tǒng)的移植、驅(qū)動(dòng)程序的編寫、應(yīng)用程序的開發(fā)等主要方面。本文研究了基于S3C2410X的嵌入式linux系統(tǒng)的構(gòu)建。
1 系統(tǒng)總體硬件設(shè)計(jì)
硬件系統(tǒng)采用模塊化的設(shè)計(jì)思想,核心部分是三星公司的S3C2410X處理器。外圍擴(kuò)展有LCD液晶顯示屏、UART通道、以太網(wǎng)、鍵盤、主從USB,總線接口等主要器件。
2 開發(fā)環(huán)境的建立
2.1 宿主機(jī)linux的安裝
嵌入式linux開發(fā)需要在計(jì)算機(jī)上安裝linux操作系統(tǒng)提供編譯開發(fā)環(huán)境,通常稱為宿主機(jī)。有多種方案可行,一是直接在計(jì)算機(jī)上安裝雙操作系統(tǒng),二是建立獨(dú)立的linux服務(wù)器,三是在windows環(huán)境下安裝WMware虛擬機(jī)(linux)的方式,本文采用第三種方案適合初學(xué)者。在WMware中安裝Red Hat9操作系統(tǒng)[1]。
2.2 構(gòu)建交叉開發(fā)工具鏈
交叉工具鏈俗稱編譯器,一是直接從相關(guān)網(wǎng)站下載,二是分步式構(gòu)建交叉工具鏈,三是通過crosstool腳本工具集構(gòu)建,這里采用的是crosstool-0.43版本,查看crosstool里的匹配文本,從相關(guān)網(wǎng)站下載工具鏈所需要的軟件包,主要包含gcc、binutils、glibc、linux內(nèi)核頭文件。所有文本無需解壓直接放在相關(guān)目錄里,利用vi編輯器打開demo-arm9tdmi.sh文件進(jìn)行修改,修改完后運(yùn)行該腳本程序,最終在宿主機(jī)的linux系統(tǒng)相關(guān)目錄里生成gcc編譯器。
3 bootloader的移植
啟動(dòng)引導(dǎo)程序bootloader主要完成系統(tǒng)啟動(dòng)時(shí)的硬件初始化工作并能夠?qū)⒉僮飨到y(tǒng)給啟動(dòng)引導(dǎo)起來,另外其包含必要的驅(qū)動(dòng)程序和命令,能與宿主機(jī)進(jìn)行通信執(zhí)行下載等現(xiàn)關(guān)操作。u-boot可以針對(duì)多種處理器并不是為某一處理器而開發(fā)的,適用范圍更廣,但其在使用前需要針對(duì)特定硬件平臺(tái)做修改,完成移植工作。vivi是韓國mizi公司針對(duì)三星的ARM系列處理器開發(fā)的一款bootloader具有專用性,使用方便等特點(diǎn)。網(wǎng)上也有該bootloader的變種,功能更強(qiáng)大。利用vivi編輯器打開Makefile文件,修改ARCH=arm,CROSS_COMPILE=gcc的絕對(duì)路徑。執(zhí)行make menuconfig執(zhí)行相關(guān)的配置,最后運(yùn)行make生成可執(zhí)行文件vivi 。
4 Linux-2.6內(nèi)核的移植
linux內(nèi)核是整個(gè)系統(tǒng)的核心與靈魂。它是一種開源軟件,可以從相關(guān)網(wǎng)站下載,目前主流的處理器均能支持。在移植之前需要對(duì)其進(jìn)行修改,首先要針對(duì)特定硬件平臺(tái)的軟件部分進(jìn)行修改,由于linux社區(qū)的維護(hù)工作,這部分工作已經(jīng)大大減輕,修改Makefile文件,輸入make menuconfig對(duì)linux-2.6內(nèi)核進(jìn)行必要的配置,該項(xiàng)工作很重要,關(guān)系到可執(zhí)行內(nèi)核的大小和實(shí)用性。
5 根文件系統(tǒng)的構(gòu)建
文件系統(tǒng)是計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行某種組織和管理的方式,根文件系統(tǒng)是linux啟動(dòng)后掛載的第一個(gè)文件系統(tǒng)[2]。首先制作根目錄例如etc、dev、sbin、bin等目錄,盡可能按著文件系統(tǒng)標(biāo)準(zhǔn)來制作目錄。linux是類似于unix的命令系統(tǒng),在嵌入式開發(fā)中可以通過busybox來制作相關(guān)的命令。編寫etc目錄下的腳步配置文件,例如rcS、inittab、profile等腳步程序。
6 驅(qū)動(dòng)程序的編寫
驅(qū)動(dòng)程序的編寫屬于底層開發(fā),其工作量相對(duì)較小,但難度較大,要求開發(fā)者具有較深厚的硬件,C語言和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。Linux驅(qū)動(dòng)程序分為字符驅(qū)動(dòng),快驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)。字符驅(qū)動(dòng)是我們經(jīng)常要編寫的驅(qū)動(dòng)程序,所有要理解字符驅(qū)動(dòng)的編寫規(guī)則。驅(qū)動(dòng)程序稱為設(shè)備文件,字符驅(qū)動(dòng)通過open()函數(shù)打開,read()、write()等對(duì)其讀寫,所有這些操作函數(shù)都是通過file_operations這個(gè)數(shù)據(jù)結(jié)構(gòu)對(duì)其進(jìn)行訪問[3]。
7 結(jié)論
本文針對(duì)S3C2410X處理器構(gòu)建了linux系統(tǒng),該系統(tǒng)是一個(gè)完整的嵌入式系統(tǒng),屬于底層開發(fā),能夠可靠運(yùn)行,能支持后續(xù)多種應(yīng)用程序的開發(fā)。
參考文獻(xiàn):
[1]陳賾等.ARM嵌入式技術(shù)原理與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2011:288-290.
[2]文宇波.構(gòu)建和移植嵌入式Linux的根文件系統(tǒng)[J].微計(jì)算機(jī)信息,2010年26-5-2:65-67.
[3]韋東山.嵌入式Linux應(yīng)用開發(fā)安全手冊(cè)[M].北京:人民郵電出版社,2008:384-389.
基金項(xiàng)目:國家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目:基于ARM的嵌入式linux研究(編號(hào):201810383059)
作者簡介:鮑尚東(1980-),男,安徽巢湖人,碩士研究生,助教,研究方向:嵌入式系統(tǒng)。