<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 【E問(wèn)E答】嵌入式項目中使用Linux有哪些技巧?

【E問(wèn)E答】嵌入式項目中使用Linux有哪些技巧?

作者: 時(shí)間:2017-09-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  微控制器制造商的開(kāi)發(fā)板,以及他們與開(kāi)發(fā)板一起提供的軟件項目例程,在工程師著(zhù)手一個(gè)新設計時(shí)可以提供很大幫助。但在設計項目完成其早期階段后,進(jìn)一步設計時(shí),制造商提供的軟件也可能會(huì )導致一些問(wèn)題。

本文引用地址:http://dyxdggzs.com/article/201709/364890.htm

  使用實(shí)時(shí)操作系統作為應用程序代碼平臺的設計還面臨著(zhù)許多挑戰,比如如何將功能分配給不同的并行任務(wù)、如何設計高可靠的進(jìn)程間通信、以及如何在硬件上測試整個(gè)軟件包等問(wèn)題。

  越來(lái)越多的OEM廠(chǎng)商發(fā)現,避免上述兩個(gè)問(wèn)題的最好方式,是使用基于開(kāi)源、經(jīng)過(guò)驗證、可擴展、可運行在不同硬件平臺的操作系統開(kāi)始新的設計。就已經(jīng)被移植到各種計算機硬件平臺的操作系統的數量來(lái)說(shuō),首屈一指。的衍生版本已運行在非常廣泛的系統中,包括:網(wǎng)絡(luò )路由器、移動(dòng)電話(huà)、建筑自動(dòng)化控制、電視機和視頻游戲控制臺。

  雖然Linux被成功使用,但并不意味著(zhù)它很容易使用。Linux包含的代碼超過(guò)一百萬(wàn)行,其運作帶有鮮明的Linux方法論味道,初學(xué)者可能難以迅速掌握。

  因此,本文的主旨是為使用Linux的操作系統版本——μClinux,開(kāi)始一個(gè)新的設計項目,該指南共分為五個(gè)步驟。為了說(shuō)明該指南,本文介紹了在意法半導體的STM32F429微控制器(ARMCortex-M4內核,最高180MHz)上的一個(gè)μClinux項目實(shí)現,使用了Emcraft 的STM32F429DiscoveryLinux板支持包(BSP)。

  步驟1:Linux工具和項目布局

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

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

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

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

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

  ●“l(fā)d”,連接器,將離散目標代碼段連接到庫或形成可執行文件

  編譯器是工具鏈的第二個(gè)重要組成部分。在嵌入式Linux,它被稱(chēng)為GCC,支持許多種微控制器和處理器架構。

  接下來(lái)是C函數庫。它實(shí)現Linux的傳統POSIX應用編程接口(API),該API可被用來(lái)開(kāi)發(fā)用戶(hù)空間應用。它通過(guò)系統調用與內核對接,并提供高階服務(wù)。

  工程師有幾種C函數庫選擇:

  ●glibc是開(kāi)源GNU項目提供的可用C函數庫。該庫是全功能、可移植的,它符合Linux標準。

  ●嵌入式GLIBC(EGLIBC)是一款針對嵌入式系統優(yōu)化的衍生版。其代碼是精簡(jiǎn)的,支持交叉編譯和交叉測試,其源代碼和二進(jìn)制代碼與GLIBC的兼容。

  ●uClibc是另一款C函數庫,可在閃存空間有限、和/或內存占用必須最小的情況下使用。

  調試器通常也是工具鏈的一部分,因為在目標機上調試應用程序運行時(shí),需要一個(gè)交叉調試器。在嵌入式Linux領(lǐng)域,GDB是常用調試器。

  上述工具是如此地不可或缺,但當它們各自為戰時(shí),會(huì )花太長(cháng)時(shí)間來(lái)編譯Linux源代碼并將其整合成最終映像(image)。幸運的是,Buildroot(自動(dòng)生成交叉編譯工具的工具)會(huì )自動(dòng)完成構建一個(gè)完整嵌入式系統的過(guò)程,并通過(guò)產(chǎn)生下述任一或所有任務(wù),簡(jiǎn)化了交叉編譯:

  ●交叉編譯工具鏈

  ●根文件系統

  ●內核映像

  ●引導映像

  對嵌入式系統設計師來(lái)說(shuō),還可以方便地使用一種工具(utility)聚合工具,如BusyBox,這種工具將通常最需要的工具整合在一起。根據 BusyBox的信息頁(yè)面介紹,“它將許多常用UNIX工具的微型版本整合成一個(gè)小的可執行文件。它提供了對大多數你通常會(huì )在GNUfileutils和 shellutils等工具中看到的工具的替代。BusyBox里的工具通常比其全功能GNU對應版本的選擇少;但所包含選項所提供的預期功能和行為則與對應的GNU所提供的幾無(wú)差別。對任何小或嵌入式系統來(lái)說(shuō),BusyBox提供的環(huán)境都是相當完整的?!?/p>

  最后一個(gè)重要工具是一款BSP,是為搭載了項目目標MCU或處理器的主板專(zhuān)門(mén)做的。

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

    

1.jpg

 

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


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 嵌入式 Linux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>