嵌入式項(xiàng)目運(yùn)用Linux技巧的步驟流程_第1頁(yè)
嵌入式項(xiàng)目運(yùn)用Linux技巧的步驟流程_第2頁(yè)
嵌入式項(xiàng)目運(yùn)用Linux技巧的步驟流程_第3頁(yè)
嵌入式項(xiàng)目運(yùn)用Linux技巧的步驟流程_第4頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 嵌入式項(xiàng)目運(yùn)用linux技巧的步驟流程 微控制器制造商的開發(fā)板,以及他們與開發(fā)板一起提供的軟件項(xiàng)目例程,在工程師著手一個(gè)新設(shè)計(jì)時(shí)可以提供很大幫助。但在設(shè)計(jì)項(xiàng)目完成其早期階段后,進(jìn)一步設(shè)計(jì)時(shí),制造商提供的軟件也可能會(huì)導(dǎo)致一些問(wèn)題。使用實(shí)時(shí)操作系統(tǒng)作為應(yīng)用程序代碼平臺(tái)的設(shè)計(jì)還面臨著許多挑戰(zhàn),比如如何將功能分配給不同的并行任務(wù)、如何設(shè)計(jì)高可靠的進(jìn)程間通信、以及如何在硬件上測(cè)試整個(gè)軟件包等問(wèn)題。越來(lái)越多的oem廠商發(fā)現(xiàn),避免上述兩個(gè)問(wèn)題的最好方式,是使用基于開源、經(jīng)過(guò)驗(yàn)證、可擴(kuò)展、可運(yùn)行在不同硬件平臺(tái)的操作系統(tǒng)linux開始新的設(shè)計(jì)。就已經(jīng)被移植到各種計(jì)算機(jī)硬件平臺(tái)的操作系統(tǒng)的數(shù)量來(lái)說(shuō),linux首

2、屈一指。linux的衍生版本已運(yùn)行在非常廣泛的嵌入式系統(tǒng)中,包括:網(wǎng)絡(luò)路由器、移動(dòng)電話、建筑自動(dòng)化控制、電視機(jī)和視頻游戲控制臺(tái)。雖然linux被成功使用,但并不意味著它很容易使用。linux包含的代碼超過(guò)一百萬(wàn)行,其運(yùn)作帶有鮮明的linux方法論味道,初學(xué)者可能難以迅速掌握。因此,本文的主旨是為使用linux的嵌入式操作系統(tǒng)版本clinux,開始一個(gè)新的設(shè)計(jì)項(xiàng)目,該指南共分為五個(gè)步驟。為了說(shuō)明該指南,本文介紹了在意法半導(dǎo)體的stm32f429微控制器(arm cortex-m4內(nèi)核,最高180mhz)上的一個(gè)clinux項(xiàng)目實(shí)現(xiàn),使用了emcraft的stm32f429 discovery l

3、inux板支持包(bsp)。步驟1:linux工具和項(xiàng)目布局每個(gè)嵌入式軟件設(shè)計(jì)都從選擇合適的工具開始。工具鏈?zhǔn)且唤M連接(或鏈接)在一起的軟件開發(fā)工具,它包含諸如gnu編譯器集合(gcc)、binutils(一組包括連接器、匯編器和其它用于目標(biāo)文件和檔案工具的開發(fā)工具)和glibc(提供系統(tǒng)調(diào)用和基本函數(shù)的c函數(shù)庫(kù))等組件;在某些情況下,還可能包括編譯器和調(diào)試器等其它工具。用于嵌入式開發(fā)的工具鏈?zhǔn)且粋€(gè)交叉工具鏈,更常見的叫法是交叉編譯器。gnu binutils是嵌入式linux工具鏈的第一個(gè)組件。gnu binutils包含兩款重要工具:“as”,匯編器,將匯編代碼(gcc所生成)轉(zhuǎn)換成二進(jìn)制

4、代碼“l(fā)d”,連接器,將離散目標(biāo)代碼段連接到庫(kù)或形成可執(zhí)行文件編譯器是工具鏈的第二個(gè)重要組成部分。在嵌入式linux,它被稱為gcc,支持許多種微控制器和處理器架構(gòu)。接下來(lái)是c函數(shù)庫(kù)。它實(shí)現(xiàn)linux的傳統(tǒng)posix應(yīng)用編程接口(api),該api可被用來(lái)開發(fā)用戶空間應(yīng)用。它通過(guò)系統(tǒng)調(diào)用與內(nèi)核對(duì)接,并提供高階服務(wù)。工程師有幾種c函數(shù)庫(kù)選擇:glibc是開源gnu項(xiàng)目提供的可用c函數(shù)庫(kù)。該庫(kù)是全功能、可移植的,它符合linux標(biāo)準(zhǔn)。嵌入式glibc(eglibc)是一款針對(duì)嵌入式系統(tǒng)優(yōu)化的衍生版。其代碼是精簡(jiǎn)的,支持交叉編譯和交叉測(cè)試,其源代碼和二進(jìn)制代碼與glibc的兼容。uclibc是另一款

5、c函數(shù)庫(kù),可在閃存空間有限、和/或內(nèi)存占用必須最小的情況下使用。調(diào)試器通常也是工具鏈的一部分,因?yàn)樵谀繕?biāo)機(jī)上調(diào)試應(yīng)用程序運(yùn)行時(shí),需要一個(gè)交叉調(diào)試器。在嵌入式linux領(lǐng)域,gdb是常用調(diào)試器。上述工具是如此地不可或缺,但當(dāng)它們各自為戰(zhàn)時(shí),會(huì)花太長(zhǎng)時(shí)間來(lái)編譯linux源代碼并將其整合成最終映像(image)。幸運(yùn)的是,buildroot(自動(dòng)生成交叉編譯工具的工具)會(huì)自動(dòng)完成構(gòu)建一個(gè)完整嵌入式系統(tǒng)的過(guò)程,并通過(guò)產(chǎn)生下述任一或所有任務(wù),簡(jiǎn)化了交叉編譯:交叉編譯工具鏈根文件系統(tǒng)內(nèi)核映像引導(dǎo)映像對(duì)嵌入式系統(tǒng)設(shè)計(jì)師來(lái)說(shuō),還可以方便地使用一種工具(utility)聚合工具,如busybox,這種工具將通常

6、最需要的工具整合在一起。根據(jù)busybox的信息頁(yè)面介紹,“它將許多常用unix工具的微型版本整合成一個(gè)小的可執(zhí)行文件。它提供了對(duì)大多數(shù)你通常會(huì)在gnu fileutils和shellutils等工具中看到的工具的替代。busybox里的工具通常比其全功能gnu對(duì)應(yīng)版本的選擇少;但所包含選項(xiàng)所提供的預(yù)期功能和行為則與對(duì)應(yīng)的gnu所提供的幾無(wú)差別。對(duì)任何小或嵌入式系統(tǒng)來(lái)說(shuō),busybox提供的環(huán)境都是相當(dāng)完整的?!弊詈笠粋€(gè)重要工具是一款bsp,是為搭載了項(xiàng)目目標(biāo)mcu或處理器的主板專門做的。bsp包括預(yù)先配置的工具,以及將操作系統(tǒng)加載到主板的引導(dǎo)加載程序。它還為內(nèi)核和器件驅(qū)動(dòng)器提供源代碼(見圖1

7、)。圖1:用于stm32f429 discovery板的emcraft bsp的主要部件。步驟2:引導(dǎo)序列、時(shí)鐘系統(tǒng)、存儲(chǔ)器和串行接口典型的嵌入式linux啟動(dòng)順序執(zhí)行如下:1)引導(dǎo)加載程序固件(示例項(xiàng)目里的u-boot)運(yùn)行于目標(biāo)mcu內(nèi)置閃存(無(wú)需外部存儲(chǔ)器),并在上電/復(fù)位后,執(zhí)行所有必需的初始化工作,包括設(shè)置串口和用于外部存儲(chǔ)器(ram)訪問(wèn)的存儲(chǔ)器控制器。2)u-boot可將linux映像從外部flash轉(zhuǎn)移到外部ram,并將控制交接到ram中的內(nèi)核入口點(diǎn)??蓧嚎slinux映像以節(jié)省閃存空間,代價(jià)是在啟動(dòng)時(shí)要付出解壓縮時(shí)間。3)linux進(jìn)行引導(dǎo)并安裝基于ram的文件系統(tǒng)(initr

8、amfs)作為根文件系統(tǒng)。在項(xiàng)目構(gòu)建時(shí),initramfs被填充以所需的文件和目錄,然后被簡(jiǎn)單地鏈接到內(nèi)核。4)在linux內(nèi)核下,執(zhí)行/sbin/init。/sbin/init程序按照/etc/inittab中配置文件的描述對(duì)系統(tǒng)進(jìn)行初始化。5)一旦初始化進(jìn)程完成運(yùn)行級(jí)執(zhí)行和/sbin/init里的命令,它會(huì)啟動(dòng)一個(gè)登錄進(jìn)程。6)殼初始化文件/etc/profile的執(zhí)行,標(biāo)志著啟動(dòng)過(guò)程的完成。通過(guò)使能就地執(zhí)行(execute in placexip)可以顯著縮短啟動(dòng)時(shí)間、提升整體性能,xip是從閃存執(zhí)行代碼的方法。通常,linux代碼是從閃存加載到外部存儲(chǔ)器,然后從外部存儲(chǔ)器執(zhí)行。通過(guò)從閃

9、存執(zhí)行,因不再需復(fù)制這步,從而只需較少的存儲(chǔ)器,且只讀存儲(chǔ)器不再占程序空間。本文的示例項(xiàng)目基于stm32f429 mcu。事實(shí)上,用戶可能會(huì)發(fā)現(xiàn),開始時(shí),stm32f4系列mcu的外設(shè)初始化不容易掌握。幸運(yùn)的是,意法半導(dǎo)體開發(fā)了一些工具來(lái)幫助解決這一問(wèn)題。stm32cubemx初始化代碼生成器(部件編號(hào)um1718)屬于最新的。該工具包括外設(shè)初始化的每一個(gè)細(xì)節(jié),在配置外設(shè)時(shí),會(huì)顯示警告和錯(cuò)誤、并警告硬件沖突。對(duì)小型嵌入式linux項(xiàng)目來(lái)說(shuō),stm32f429 mcu內(nèi)部閃存足夠用。重要的是要記住:嵌入式linux項(xiàng)目中使用多個(gè)二進(jìn)制映像(引導(dǎo)加載程序、linux內(nèi)核和根文件系統(tǒng)):這些都需要閃

10、存扇區(qū)邊界對(duì)齊。這就避免了在裝載一個(gè)圖像時(shí),另一圖像被部分刪除或損壞的風(fēng)險(xiǎn)。步驟3:在主機(jī)上安裝linux要構(gòu)建一個(gè)嵌入式linux項(xiàng)目,一臺(tái)linux主機(jī)是必需的。對(duì)于windows pc,最好是安裝oracle virtualbox,以創(chuàng)建“一臺(tái)”512mbyte ram和16gbyte硬盤的新虛擬機(jī)。有許多l(xiāng)inux版本可用;據(jù)筆者的經(jīng)驗(yàn),debian就是與virtualbox環(huán)境相匹配的一款。這款linux主機(jī)必須能夠訪問(wèn)互聯(lián)網(wǎng),以便下載針對(duì)這款arm cortex-m目標(biāo)mcu的gnu交叉編譯工具。設(shè)計(jì)師將創(chuàng)建一個(gè)類似于圖1所示的樹形結(jié)構(gòu),并將交叉構(gòu)建工具提存到/tools文件夾。在

11、這點(diǎn)上,有必要建立一個(gè)activate.sh腳本。只需使用下列代碼就可實(shí)現(xiàn)。(。.。.是提取到的gnu工具文件夾路徑):export install_root=。.。.。 export path=$install_root/bin:$path export cross_compile=arm-uclinuxeabiexport cross_compile_apps=arm-uclinuxeabiexport mcu=stmdisco export arch=arm在干凈的linux系統(tǒng)中安裝gnu工具,但其使用并非自給自足,實(shí)際上還需要其它系統(tǒng)的配合。其運(yùn)行實(shí)際上依賴于若干其它系統(tǒng)組件(如主機(jī)

12、c/c+編譯器、標(biāo)準(zhǔn)c函數(shù)庫(kù)頭文件,以及一些系統(tǒng)工具)。獲得這些必要組件的一種方法是安裝用于c的eclipse集成開發(fā)環(huán)境(ide)。除解決這個(gè)迫在眉睫的問(wèn)題外,eclipse ide還可在開發(fā)過(guò)程中的許多其它方面提供幫助,當(dāng)然,詳述eclipse ide的特性不是本文目的。現(xiàn)在,是時(shí)候啟用linux終端工具了:點(diǎn)擊“應(yīng)用程序(applications)”,然后“附件(accessories)”和“終端(terminal)”(見圖2)。圖2:linux包含的“終端(terminal)”工具和“文件(files)”、一種類似windows資源管理器的圖形化工具。終端是用于配置linux主機(jī)和構(gòu)建

13、嵌入式linux應(yīng)用程序的主要工具。鍵入以下命令來(lái)安裝eclipse和其它所需工具:su 輸入根用戶密碼 apt-get install eclipse-cdt apt-get install genromfs apt-get install libncurses5-dev apt-get install git apt-get install mc準(zhǔn)備該linux項(xiàng)目的最后一步是下載stm32f429 discovery buildroot,并解壓到/uclinux文件夾。步驟4:用buildroot構(gòu)建clinux現(xiàn)在有必要關(guān)閉先前使用根用戶配置文件的終端,并啟動(dòng)一個(gè)新終端。在命令行中輸入

14、“mc”,并使用導(dǎo)航器導(dǎo)航到“documents”,然后輸入“uclinux”命令。按ctrl+o并激活linux arm cortex-m開發(fā)部分,并運(yùn)行“.activate.sh”命令。再次按下ctrl+o并進(jìn)入“stm32f429-linux-builder-master”文件夾。用戶現(xiàn)在有兩個(gè)選擇。如果使用virtualbox中的示例項(xiàng)目,請(qǐng)遵循“make clean”和“make all”命令序列。如果準(zhǔn)備一個(gè)全新環(huán)境,使用“make”命令。約30分鐘后,新的clinux映像將可用,如下所示:outubootu-boot.bin outkernelarcharmboot xipuim

15、age.bin outromfs.bin將這些新映像寫入閃存。如果使用windows和st-link工具,下面的代碼將工作:st-link_cli.exe -me st-link_cli.exe -p “u-boot.bin” 0x08000000 st-link_cli.exe -p “xipuimage.bin” 0x08020000 st-link_cli.exe -p “romfs.bin” 0x08120000將串行調(diào)試器(serial console)連接到目標(biāo)電路板(外部rx=pc10、外部tx=pc11、115200bits/s、8個(gè)數(shù)據(jù)位、無(wú)奇偶校驗(yàn)、1個(gè)停止位模式),然后按下復(fù)位按鈕,該clinux項(xiàng)目將啟動(dòng)運(yùn)行。開機(jī)輸出將顯示在串行調(diào)試器上,顯示屏將出現(xiàn)linux的企鵝標(biāo)識(shí)。步驟5:創(chuàng)建“你好,世界”應(yīng)用現(xiàn)在,按照代碼示例和下面的說(shuō)明,將一個(gè)用戶應(yīng)用添加到clinux項(xiàng)目中。通過(guò)activ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論