當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]微控制器制造商的開(kāi)發(fā)板,以及他們與開(kāi)發(fā)板一起提供的軟件項(xiàng)目例程,在工程師著手一個(gè)新設(shè)計(jì)時(shí)可以提供很大幫助。但在設(shè)計(jì)項(xiàng)目完成其早期階段后,進(jìn)一步設(shè)計(jì)時(shí),制造商提供

微控制器制造商的開(kāi)發(fā)板,以及他們與開(kāi)發(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)題的最好方式,是使用基于開(kāi)源、經(jīng)過(guò)驗(yàn)證、可擴(kuò)展、可運(yùn)行在不同硬件平臺(tái)的操作系統(tǒng)Linux開(kāi)始新的設(shè)計(jì)。就已經(jīng)被移植到各種計(jì)算機(jī)硬件平臺(tái)的操作系統(tǒng)的數(shù)量來(lái)說(shuō),Linux首屈一指。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,開(kāi)始一個(gè)新的設(shè)計(jì)項(xiàng)目,該指南共分為五個(gè)步驟。為了說(shuō)明該指南,本文介紹了在意法半導(dǎo)體的STM32F429微控制器(ARMCortex-M4內(nèi)核,最高180MHz)上的一個(gè)μClinux項(xiàng)目實(shí)現(xiàn),使用了Emcraft 的STM32F429DiscoveryLinux板支持包(BSP)。

步驟1:Linux工具和項(xiàng)目布局

每個(gè)嵌入式軟件設(shè)計(jì)都從選擇合適的工具開(kāi)始。

工具鏈?zhǔn)且唤M連接(或鏈接)在一起的軟件開(kāi)發(fā)工具,它包含諸如GNU編譯器集合(GCC)、binutils(一組包括連接器、匯編器和其它用于目標(biāo)文件和檔案工具的開(kāi)發(fā)工具)和glibc(提供系統(tǒng)調(diào)用和基本函數(shù)的C函數(shù)庫(kù))等組件;在某些情況下,還可能包括編譯器和調(diào)試器等其它工具。

用于嵌入式開(kāi)發(fā)的工具鏈?zhǔn)且粋€(gè)交叉工具鏈,更常見(jiàn)的叫法是交叉編譯器。

GNUBinutils是嵌入式Linux工具鏈的第一個(gè)組件。GNUBinutils包含兩款重要工具:

●“as”,匯編器,將匯編代碼(GCC所生成)轉(zhuǎn)換成二進(jìn)制代碼

●“ld”,連接器,將離散目標(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)開(kāi)發(fā)用戶空間應(yīng)用。它通過(guò)系統(tǒng)調(diào)用與內(nèi)核對(duì)接,并提供高階服務(wù)。

工程師有幾種C函數(shù)庫(kù)選擇:

●glibc是開(kāi)源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是另一款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,這種工具將通常最需要的工具整合在一起。根據(jù) BusyBox的信息頁(yè)面介紹,“它將許多常用UNIX工具的微型版本整合成一個(gè)小的可執(zhí)行文件。它提供了對(duì)大多數(shù)你通常會(huì)在GNUfileutils和 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或處理器的主板專門(mén)做的。

BSP包括預(yù)先配置的工具,以及將操作系統(tǒng)加載到主板的引導(dǎo)加載程序。它還為內(nèi)核和器件驅(qū)動(dòng)器提供源代碼(見(jiàn)圖1)。

 


圖1:用于STM32F429Discovery板的EmcraftBSP的主要部件

步驟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)(initramfs)作為根文件系統(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í)行(ExecuteInPlace——XIP)可以顯著縮短啟動(dòng)時(shí)間、提升整體性能,XIP是從閃存執(zhí)行代碼的方法。通常,Linux代碼是從閃存加載到外部存儲(chǔ)器,然后從外部存儲(chǔ)器執(zhí)行。通過(guò)從閃存執(zhí)行,因不再需復(fù)制這步,從而只需較少的存儲(chǔ)器,且只讀存儲(chǔ)器不再占程序空間。

本文的示例項(xiàng)目基于STM32F429MCU。事實(shí)上,用戶可能會(huì)發(fā)現(xiàn),開(kāi)始時(shí),STM32F4系列MCU的外設(shè)初始化不容易掌握。幸運(yùn)的是,意法半導(dǎo)體開(kāi)發(fā)了一些工具來(lái)幫助解決這一問(wèn)題。STM32CubeMX初始化代碼生成器(部件編號(hào)UM1718)屬于最新的。該工具包括外設(shè)初始化的每一個(gè)細(xì)節(jié),在配置外設(shè)時(shí),會(huì)顯示警告和錯(cuò)誤、并警告硬件沖突。[!--empirenews.page--]

對(duì)小型嵌入式Linux項(xiàng)目來(lái)說(shuō),STM32F429MCU內(nèi)部閃存足夠用。重要的是要記?。呵度胧絃inux項(xiàng)目中使用多個(gè)二進(jìn)制映像(引導(dǎo)加載程序、Linux內(nèi)核和根文件系統(tǒng)):這些都需要閃存扇區(qū)邊界對(duì)齊。這就避免了在裝載一個(gè)圖像時(shí),另一圖像被部分刪除或損壞的風(fēng)險(xiǎn)。

步驟3:在主機(jī)上安裝Linux

要構(gòu)建一個(gè)嵌入式Linux項(xiàng)目,一臺(tái)Linux主機(jī)是必需的。對(duì)于WindowsPC,最好是安裝OracleVirtualBox,以創(chuàng)建“一臺(tái)”512MbyteRAM和16Gbyte硬盤(pán)的新虛擬機(jī)。

有許多Linux版本可用;據(jù)筆者的經(jīng)驗(yàn),Debian就是與VirtualBox環(huán)境相匹配的一款。這款Linux主機(jī)必須能夠訪問(wèn)互聯(lián)網(wǎng),以便下載針對(duì)這款A(yù)RMCortex-M目標(biāo)MCU的GNU交叉編譯工具。設(shè)計(jì)師將創(chuàng)建一個(gè)類似于圖1所示的樹(shù)形結(jié)構(gòu),并將交叉構(gòu)建工具提存到/tools文件夾。

在這點(diǎn)上,有必要建立一個(gè)ACTIVATE.sh腳本。只需使用下列代碼就可實(shí)現(xiàn)。(......>是提取到的GNU工具文件夾路徑):

exportINSTALL_ROOT=.......>

exportPATH=$INSTALL_ROOT/bin:$PATH

exportCROSS_COMPILE=arm-uclinuxeabiexport

CROSS_COMPILE_APPS=arm-uclinuxeabiexport

MCU=STMDISCO

exportARCH=arm

在干凈的Linux系統(tǒng)中安裝GNU工具,但其使用并非自給自足,實(shí)際上還需要其它系統(tǒng)的配合。其運(yùn)行實(shí)際上依賴于若干其它系統(tǒng)組件(如主機(jī)C/C++ 編譯器、標(biāo)準(zhǔn)C函數(shù)庫(kù)頭文件,以及一些系統(tǒng)工具)。獲得這些必要組件的一種方法是安裝用于C的Eclipse集成開(kāi)發(fā)環(huán)境(IDE)。除解決這個(gè)迫在眉睫的問(wèn)題外,EclipseIDE還可在開(kāi)發(fā)過(guò)程中的許多其它方面提供幫助,當(dāng)然,詳述EclipseIDE的特性不是本文目的。

現(xiàn)在,是時(shí)候啟用Linux終端工具了:點(diǎn)擊“應(yīng)用程序(Applications)”,然后“附件(Accessories)”和“終端(Terminal)”(見(jiàn)圖2)。

 

圖2:Linux包含的“終端(Terminal)”工具和“文件(Files)”、一種類似Windows資源管理器的圖形化工具。

終端是用于配置Linux主機(jī)和構(gòu)建嵌入式Linux應(yīng)用程序的主要工具。鍵入以下命令來(lái)安裝Eclipse和其它所需工具:

su[輸入根用戶密碼]

apt-getinstalleclipse-cdt

apt-getinstallgenromfs

apt-getinstalllibncurses5-dev

apt-getinstallgit

apt-getinstallmc

準(zhǔn)備該Linux項(xiàng)目的最后一步是下載STM32F429DiscoveryBuildroot,并解壓到/uclinux文件夾。

步驟4:用Buildroot構(gòu)建μClinux

現(xiàn)在有必要關(guān)閉先前使用根用戶配置文件的終端,并啟動(dòng)一個(gè)新終端。在命令行中輸入“mc”,并使用導(dǎo)航器導(dǎo)航到“Documents”,然后輸入 “uClinux”命令。按Ctrl+O并激活LinuxARMCortex-M開(kāi)發(fā)部分,并運(yùn)行“.ACTIVATE.sh”命令。再次按下 Ctrl+O并進(jìn)入“stm32f429-linux-builder-master”文件夾。

用戶現(xiàn)在有兩個(gè)選擇。如果使用VirtualBox中的示例項(xiàng)目,請(qǐng)遵循“makeclean”和“makeall”命令序列。如果準(zhǔn)備一個(gè)全新環(huán)境,使用“make”命令。約30分鐘后,新的μClinux映像將可用,如下所示:

outubootu-boot.bin

outkernelarcharmbootxipuImage.bin

outromfs.bin

將這些新映像寫(xiě)入閃存。如果使用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)試器(serialconsole)連接到目標(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)行。開(kāi)機(jī)輸出將顯示在串行調(diào)試器上,顯示屏將出現(xiàn)Linux的企鵝標(biāo)識(shí)。

步驟5:創(chuàng)建“你好,世界”應(yīng)用

現(xiàn)在,按照代碼示例和下面的說(shuō)明,將一個(gè)用戶應(yīng)用添加到μClinux項(xiàng)目中。

創(chuàng)建:“stm32f429-linux-builder-master/user/src/hello.c”文件:

#include

intmain(){

printf(“Hello,worldn”);

return0;

}

必要時(shí)使用Tab鍵,創(chuàng)建:“stm32f429-linux-builder-master/user/Makefile”文件:

CC=$(CROSS_COMPILE)gcc

LDFLAGS?=$(CFLAGS)

target_out?=out

all:checkdirs

[Tab]$(CC)$(LDFLAGS)src/hello/hello.c-o$(target_out)/bin/

hello$(LDLIBS)

[Tab]-rm-rf$(target_out)/bin/*.gdb

checkdirs:

[Tab]mkdir-p$(target_out)/bin

clean:

[Tab]-rm-rf$(target_out)

通過(guò)activate.sh腳本,在不激活交叉編譯環(huán)境下,在主機(jī)測(cè)試“Hello,world”這個(gè)應(yīng)用。

在/user文件夾下,輸入:

makeall

./out/bin/hello

為將hello.c嵌入到LinuxBuildroot里的腳本,修改mk/rootf.mak文件,必要時(shí),使用Tab鍵。(粗體字表示新行開(kāi)始處):

...

user_hello:

[Tab]make-C$(user_dir)CROSS_COMPILE=$(CROSS_

COMPILE)CFLAGS=$(ROOTFS_CFLAGS)target_

out=$(target_out_user)

$(rootfs_target):$(rootfs_dir)$(target_out_busybox)/.config

user_hello

[Tab]cp-af$(rootfs_dir)/*$(target_out_romfs)

[Tab]cp-f$(target_out_kernel)/fs/ext2/ext2.ko$(target_out_romfs)/lib/modules

[Tab]cp-f$(target_out_kernel)/fs/mbcache.ko$(target_out_romfs)/lib/modules

[Tab]cp-f$(target_out_user)/bin/*$(target_out_romfs)/usr/bin[!--empirenews.page--]

需對(duì)mk/defs.mak文件做最后修改。加入以下幾行:

...

user_dir:=$(root_dir)/user

target_out_user:=$(target_out)/user

user_dir:=$(root_dir)/user

target_out_user:=$(target_out)/user

一旦在目標(biāo)MCU上建成、下載并運(yùn)行映像,就可在/usr/bin目錄中找到該應(yīng)用程序以及其它已有的應(yīng)用程序。在連接到Discovery板的終端上鍵入“hello[回車]”,可對(duì)該應(yīng)用進(jìn)行測(cè)試。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉