我們先對嵌入式Linux做一個高層次的了解,看看它為什么受歡迎,開放源碼許可證有什么意義,以及你需要什么樣的硬件來運行Linux。
1999年左右,Linux首次成為嵌入式設(shè)備的可行的選擇。那是在Axis (https://www.axis.com)發(fā)布他們的第一臺Linux驅(qū)動的網(wǎng)絡(luò)攝像機(jī)和TiVo (https://business.tivo.com)發(fā)布他們的第一臺數(shù)字視頻錄像機(jī)(DVR)時。自1999年以來,Linux變得越來越流行,以至于今天它是許多類別產(chǎn)品的首選操作系統(tǒng)。2021年,有超過20億臺設(shè)備運行Linux。這包括大量運行Android的智能手機(jī),它使用Linux內(nèi)核,以及數(shù)以億計的機(jī)頂盒、智能電視和Wi-Fi路由器,更不用說非常多樣化的設(shè)備,如車輛診斷、地磅、工業(yè)設(shè)備和醫(yī)療監(jiān)測裝置等。
選擇Linux
為什么Linux會如此普及?為什么像電視這樣簡單的東西需要運行像Linux這樣復(fù)雜的東西才能在屏幕上顯示流媒體視頻?
簡單的答案是摩爾定律: 英特爾公司的聯(lián)合創(chuàng)始人戈登-摩爾(Gordon Moore)在1965年觀察到,芯片上的元件密度大約每兩年就會增加一倍。這適用于我們在日常生活中設(shè)計和使用的設(shè)備,正如它適用于臺式機(jī)、筆記本電腦和服務(wù)器一樣。大多數(shù)嵌入式設(shè)備的核心是一個高度集成的芯片,它包含一個或多個處理器內(nèi)核以及與主存儲器、大容量存儲和多種類型的外設(shè)的接口。這被稱為片上系統(tǒng),或SoC(System on Chip),而且SoC的復(fù)雜程度正按照摩爾定律不斷提高。典型的SoC有一本技術(shù)參考手冊,長達(dá)數(shù)千頁。你的電視不是簡單地顯示一個視頻流,就像以前的模擬機(jī)那樣。
該數(shù)據(jù)流是數(shù)字的,可能是加密的,它需要處理以創(chuàng)建一個圖像。你的電視已經(jīng)(或很快將)與互聯(lián)網(wǎng)連接。它可以接收來自智能手機(jī)、平板電腦和家庭媒體服務(wù)器的內(nèi)容。它可以(或很快就會)用來玩游戲等等。你需要完整的操作系統(tǒng)來管理這種程度的復(fù)雜性。
以下是推動采用Linux的一些要點:
- Linux有必要的功能。它有好的調(diào)度器個好的網(wǎng)絡(luò)堆棧,支持USB、Wi-Fi、藍(lán)牙、多種存儲介質(zhì),對多媒體設(shè)備有很好的支持,等等。它滿足了所有的要求。
- Linux已經(jīng)被移植到廣泛的處理器架構(gòu)上,包括一些在SoC設(shè)計中非常常見的架構(gòu)--Arm、MIPS、x86和PowerPC。
- Linux是開放源碼的,所以你可以自由地獲得源代碼并修改它以滿足你的需要。你,或代表你工作的人,可以為你的特定SoC板或設(shè)備創(chuàng)建板卡支持包。你可以添加協(xié)議、功能和技術(shù),這些可能是主線源代碼中所缺少的。你可以刪除你不需要的功能,以減少內(nèi)存和存儲要求。Linux是靈活的。
- Linux有一個活躍的社區(qū);就Linux內(nèi)核而言,非?;钴S。每隔8到10周就會個新的內(nèi)核版本,每個版本都包含1000多個開發(fā)者的代碼?;钴S的社區(qū)意味著Linux是最新的,支持當(dāng)前的硬件、協(xié)議和標(biāo)準(zhǔn)。
- 開放源碼許可證保證你可以獲得源代碼。沒有供應(yīng)商的束縛。
由于這些原因,Linux是復(fù)雜設(shè)備的理想選擇。但在這里我應(yīng)該提到一些注意事項。復(fù)雜性使它更難理解。再加上快速發(fā)展的開發(fā)過程和開源的分散結(jié)構(gòu),你必須付出一些努力來學(xué)習(xí)如何使用它,并隨著它的變化而不斷地重新學(xué)習(xí)。我希望這本書能在這個過程中有所幫助。
什么時候不選擇Linux
Linux適合你的項目嗎?在所要解決的問題能夠證明其復(fù)雜性的情況下,Linux的效果很好。在需要連接性、穩(wěn)健性和復(fù)雜的用戶界面的地方,它尤其好。然而,它不能解決所有的問題,所以在你加入之前有一些事情需要考慮:
- 你的硬件是否能勝任這項工作?與傳統(tǒng)的實時操作系統(tǒng)(RTOS)如VxWorks或QNX相比,Linux需要更多的資源。它至少需要一個32位的處理器和大量的內(nèi)存。我將在關(guān)于典型硬件的章節(jié)中更詳細(xì)地介紹。
- 你有正確的技能組合嗎?一個項目的早期部分,即電路板的搭建,需要詳細(xì)了解Linux以及它與你的硬件之間的關(guān)系。同樣地,在調(diào)試和調(diào)整你的應(yīng)用程序時,你需要能夠解釋結(jié)果。如果你內(nèi)部沒有這些技能,你可能想把一些工作外包出去。當(dāng)然,讀這本書會有幫助
- 你的系統(tǒng)是實時的嗎?Linux可以處理許多實時活動,只要你要注意某些細(xì)節(jié),我將在第21章詳細(xì)介紹這些細(xì)節(jié):實時編程。
- 你的代碼是否需要監(jiān)管部門的批準(zhǔn)(醫(yī)療、汽車、航空等等)?監(jiān)管部門的核查和驗證的負(fù)擔(dān)可能使另一個操作系統(tǒng)成為更好的選擇。即使你選擇Linux用于這些環(huán)境,從一個已經(jīng)為現(xiàn)有產(chǎn)品(如你正在建造的產(chǎn)品)提供Linux的公司購買商業(yè)上可用的發(fā)行版可能是有意義的。
仔細(xì)考慮這些問題。成功的最佳指標(biāo)可能是四處尋找運行Linux的類似產(chǎn)品,看看他們是如何做到的;遵循最佳實踐。
參與者
開源軟件從哪里來?誰寫的?特別是,這與嵌入式開發(fā)的關(guān)鍵組件--工具鏈、引導(dǎo)程序、內(nèi)核和根文件系統(tǒng)中的基本實用程序--有何關(guān)系?
主要的參與者如下:
- 開源社區(qū): 畢竟,這是產(chǎn)生你將要使用的軟件的引擎。這個社區(qū)是一個松散的開發(fā)者聯(lián)盟,其中許多人以某種方式得到資助,也許是由一個非營利組織、學(xué)術(shù)機(jī)構(gòu)或一業(yè)公司資助。他們一起工作,以進(jìn)一步實現(xiàn)各種項目的目標(biāo)。有許多這樣的項目--有些小,有些大。在本書的其余部分,我們將使用的一些項目是Linux本身、U-Boot、BusyBox、Buildroot、Yocto項目以及GNU旗下的許多項目。
- CPU架構(gòu)師: 這些是設(shè)計我們使用的CPU的組織。這里重要的是Arm/Linaro(Arm Cortex-A)、Intel(x86和x86_64)、SiFive(RISC-V)和IBM(PowerPC)。他們實現(xiàn)或至少影響對基本CPU架構(gòu)的支持。
- SoC供應(yīng)商(Broadcom、Intel、Microchip、NXP、Qualcomm、TI和許多其他公司): 他們從CPU架構(gòu)師那里獲得內(nèi)核和工具鏈,并修改它們以支持他們的芯片。他們還創(chuàng)建了參考板:下一級使用的設(shè)計,以創(chuàng)建開發(fā)板和工作產(chǎn)品。
- 板卡供應(yīng)商和OEMs: 這些人從SoC供應(yīng)商那里獲得參考設(shè)計,并將其構(gòu)建到特定的產(chǎn)品中,例如機(jī)頂盒或相機(jī),或創(chuàng)建更多的通用開發(fā)板,如研華和控創(chuàng)的開發(fā)板。一個重要的類別是廉價的開發(fā)板,如BeagleBoard/BeagleBone和Raspberry Pi,它們創(chuàng)造了自己的軟件和硬件附加組件的生態(tài)系統(tǒng)。
- 商業(yè)Linux供應(yīng)商: 西門子(Mentor)、Timesys和風(fēng)河等公司提供商業(yè)Linux發(fā)行版,這些發(fā)行版在多個行業(yè)(醫(yī)療、汽車、航空航天等)都經(jīng)過了嚴(yán)格的法規(guī)驗證和確認(rèn)。
這些構(gòu)成了一個鏈條,你的項目通常在最后,這意味著你不能自由選擇組件。你不能簡單地從https://www.kernel.org/,除非在少數(shù)情況下,因為它不支持你正在使用的芯片或電路板。
這是嵌入式開發(fā)中的一個持續(xù)問題。理想情況下,鏈條上每個環(huán)節(jié)的開發(fā)者都會把他們的變化推到上游,但他們沒有這樣做。發(fā)現(xiàn)一個內(nèi)核有成千上萬的補丁沒有被合并的情況并不少見。此外,SoC供應(yīng)商傾向于只為其最新的芯片積極開發(fā)開源組件,這意味著對任何超過幾年前的芯片的支持將被凍結(jié),不會收到任何更新。
其結(jié)果是,大多數(shù)嵌入式設(shè)計是基于舊版本的軟件。他們不會收到安全修復(fù)、性能增強或較新版本的功能。諸如Heartbleed(OpenSSL庫中的一個錯誤)和ShellShock(bash shell中的一個錯誤)等問題都沒有得到修復(fù)。我將在本章后面的安全主題下進(jìn)一步討論這個問題。
你能做什么呢?首先,向你的供應(yīng)商(恩智浦、德州儀器和賽靈思,僅舉幾例)提問:他們的更新政策是什么,他們多久修改一次內(nèi)核版本,當(dāng)前的內(nèi)核版本是什么,之前的版本是什么,他們向上游合并變化的政策是什么?一些供應(yīng)商在這方面正在取得長足進(jìn)步。你應(yīng)該首選他們的芯片。
第二,你可以采取措施使自己更加自給自足。第1節(jié)中的各章更詳細(xì)地解釋了依賴性,并告訴你在哪些方面可以幫助自己。不要只是接受SoC或電路板供應(yīng)商提供給你的軟件包,而不考慮其他選擇,盲目地使用它。
在項目生命周期中前進(jìn)
本書分為四個部分,反映了一個項目的各個階段。這些階段不一定是有順序的。通常情況下,它們是重疊的,你需要跳回去重新審視以前做過的事情。然而,它們代表了開發(fā)人員在項目進(jìn)展過程中所關(guān)注的問題:
- 嵌入式Linux的要素(第1至8章)將幫助你建立開發(fā)環(huán)境,并為后面的階段創(chuàng)建一個工作平臺。它通常被稱為 "板塊建立 "階段。
- 系統(tǒng)結(jié)構(gòu)和設(shè)計選擇(第9章到第15章)將幫助你研究一些你必須做出的設(shè)計決定,涉及程序和數(shù)據(jù)的存儲,如何在內(nèi)核設(shè)備驅(qū)動程序和應(yīng)用程序之間進(jìn)行分工,以及如何初始化系統(tǒng)。
- 編寫嵌入式應(yīng)用程序(第16至18章)展示了如何打包和部署Python應(yīng)用程序,有效利用Linux進(jìn)程和線程模型,以及如何在一個資源受限的設(shè)備中管理內(nèi)存。
- 調(diào)試和優(yōu)化性能(第19章到21章)描述了如何在應(yīng)用程序和內(nèi)核中跟蹤、剖析和調(diào)試你的代碼。最后一章解釋了在需要時如何設(shè)計實時行為。
嵌入式Linux的四個要素
每個項目都是從獲得、定制和部署這四個要素開始的:工具鏈、引導(dǎo)程序、內(nèi)核和根文件系統(tǒng)。這就是本書第一節(jié)的主題。
- 工具鏈: 為你的目標(biāo)設(shè)備創(chuàng)建代碼所需的編譯器和其他工具。
- Bootloader: 初始化電路板并加載Linux內(nèi)核的程序。
- 內(nèi)核: 這是系統(tǒng)的核心,管理系統(tǒng)資源和與硬件的接口。
- 根文件系統(tǒng): 包含庫和程序,一旦內(nèi)核完成初始化就會運行。
當(dāng)然,還有一個第五元素,這里沒有提到。這就是專門針對你的嵌入式應(yīng)用的程序集合,使設(shè)備做任何它應(yīng)該做的事情,無論是稱雜貨、顯示電影、控制機(jī)器人,還是駕駛無人機(jī)。
通常情況下,當(dāng)你購買SoC或電路板時,你會被提供一些或所有這些元素作為一個包。但是,由于前一段中提到的原因,它們可能不是你的最佳選擇。我將在前八章中給你提供背景,讓你做出正確的選擇,我還將向你介紹兩個工具,為你自動完成整個過程: Buildroot和Yocto項目。
瀏覽開放源代碼
嵌入式Linux的組件都是開源的,所以現(xiàn)在是考慮這意味著什么的好時機(jī),為什么開源以它們的方式工作,以及這對你將用它創(chuàng)建的通常是專有的嵌入式設(shè)備有什么影響。
許可證
在談?wù)撻_源時,經(jīng)常使用自由這個詞。剛接觸這個話題的人往往認(rèn)為它意味著無需付費,而開源軟件許可證確實保證你可以免費使用該軟件來開發(fā)和部署系統(tǒng)。然而,這里更重要的含義是自由,因為你可以自由地獲得源代碼,以任何你認(rèn)為合適的方式修改它,并在其他系統(tǒng)中重新部署它。這些許可證給了你這個權(quán)利。與免費軟件許可證相比,后者允許你免費復(fù)制二進(jìn)制文件,但不給你源代碼,或者其他許可證允許你在某些情況下免費使用該軟件,例如,用于個人用途,但不用于商業(yè)。這些都不是開源的。
為了幫助你理解使用開放源碼許可證的意義,我將提供以下評論,但我想指出,我是一名工程師,而不是一名律師。以下是我對許可證的理解和對它們的解釋方式。
開源許可證大致分為兩類:自由復(fù)制許可證,如GNU通用公共許可證(GPL),以及允許性許可證,如BSD和MIT許可證。
允許性許可證實質(zhì)上是說,只要你不以任何方式修改許可證的條款,你就可以修改源代碼并在你自己選擇的系統(tǒng)中使用它。換句話說,有了這一限制,你就可以隨心所欲地使用它,包括將它構(gòu)建到可能的專有系統(tǒng)中。
GPL許可證是類似的,但有條款迫使你把獲得和修改軟件的權(quán)利轉(zhuǎn)給你的最終用戶。換句話說,你要分享你的源代碼。一種選擇是把它放到一個公共服務(wù)器上,使其完全公開。另一種方法是通過書面形式提供給你的最終用戶,當(dāng)他們要求時,你可以提供代碼。GPL進(jìn)一步指出,你不能將GPL代碼納入專有程序。任何這樣做的嘗試都會使GPL適用于整體。換句話說,你不能在一個程序中結(jié)合GPL和專有代碼。除了Linux內(nèi)核,GNU編譯器集和GNU調(diào)試器以及許多其他與GNU項目相關(guān)的免費工具都屬于GPL的保護(hù)范圍。
那么,庫呢?如果它們獲得了GPL的許可,任何與之鏈接的程序也將獲得GPL的許可。然而,大多數(shù)庫是以GNU小公共許可證(LGPL)授權(quán)的。如果是這種情況,你可以從一個專有程序中與它們鏈接。
重要提示
所有前面的描述都與GPL v2和LGPL v2.1特別相關(guān)。我應(yīng)該提到最新版本的GPL v3和LGPL v3。這些都是有爭議的,我承認(rèn)我并不完全了解其含義。然而,其目的是確保任何系統(tǒng)中的GPL v3和LGPL v3組件都可以被終端用戶替換,這符合開放源碼軟件對所有人的精神。
不過,GPL v3和LGPL v3也有其問題。有安全方面的問題。如果一個設(shè)備的所有者能夠訪問系統(tǒng)代碼,那么不受歡迎的入侵者也可能會訪問。通常的防御措施是擁有由權(quán)威機(jī)構(gòu)(如供應(yīng)商)簽署的內(nèi)核鏡像,這樣未經(jīng)授權(quán)的更新就不可能發(fā)生。這是否侵犯了我修改設(shè)備的權(quán)利?眾說紛紜。
重要說明
TiVo機(jī)頂盒是這場辯論的一個重要部分。它使用的是Linux內(nèi)核,該內(nèi)核在GPL v2下獲得許可。TiVo已經(jīng)發(fā)布了他們的內(nèi)核版本的源代碼,因此遵守了該許可。TiVo也有一個引導(dǎo)程序,只能加載由他們簽名的內(nèi)核二進(jìn)制文件。因此,你可以為TiVo盒子建立一個修改過的內(nèi)核,但你不能在硬件上加載它。自由軟件基金會(FSF)認(rèn)為這不符合開源軟件的精神,并將這種程序稱為Tivo化。GPL v3和LGPL v3的編寫是為了明確地防止這種情況的發(fā)生。一些項目,特別是Linux內(nèi)核,一直不愿意采用GPL第3版許可證,因為它們會給設(shè)備制造商帶來限制。
為嵌入式Linux選擇硬件
如果你正在為一個嵌入式Linux項目設(shè)計或選擇硬件,你要注意什么?
首先,一個內(nèi)核支持的CPU架構(gòu)--當(dāng)然,除非你打算自己添加一個新的架構(gòu) 看一下Linux 5.4的源代碼,有25個架構(gòu),每個架構(gòu)都由arch/目錄下的一個子目錄代表。它們都是
32位或64位架構(gòu),大多數(shù)有MMU,但有些沒有。嵌入式設(shè)備中最常見的是Arm、MIPS、PowerPC和x86,它們都有32位和64位的變體,都有內(nèi)存管理單元(MMU)。
本書的大部分內(nèi)容都是針對這類處理器而寫的。還有一類處理器沒有MMU(memory management units),運行Linux的一個子集,稱為微控制器Linux或uClinux。這些處理器架構(gòu)包括ARC(Argonaut RISC Core)、Blackfin、MicroBlaze和Nios。我將不時地提到uClinux,但我不會詳細(xì)介紹,因為這是一個相當(dāng)專業(yè)的話題。
第二,你將需要合理數(shù)量的內(nèi)存。16 MiB是一個很好的最低限度,盡管使用一半的內(nèi)存也很有可能運行Linux。如果你準(zhǔn)備對系統(tǒng)的每個部分進(jìn)行優(yōu)化,甚至有可能用4MB來運行Linux。甚至有可能更低,但有一點是,它不再是Linux了。
第三,有非易失性存儲,通常是閃存。對于一個簡單的設(shè)備,如網(wǎng)絡(luò)攝像頭或一個簡單的路由器,8兆字節(jié)就足夠了。與內(nèi)存一樣,如果你真的想,你可以用更少的存儲空間創(chuàng)建一個可行的Linux系統(tǒng),但你走得越低,就越難。Linux對閃存設(shè)備有廣泛的支持,包括原始的NOR和NAND閃存芯片,以及SD卡、eMMC芯片、USB閃存等形式的管理閃存。
第四,一個串行端口是非常有用的,最好是基于UART的串行端口。它不一定要安裝在生產(chǎn)板上,但可以使板子的安裝、調(diào)試和開發(fā)更容易。
第五,從頭開始時,你需要一些加載軟件的手段。許多微控制器板都配備了一個聯(lián)合測試行動組(JTAG)接口,用于這一目的?,F(xiàn)代SoC也有能力直接從可移動媒體,特別是SD和微型SD卡,或UART或USB等串行接口加載啟動代碼。
除了這些基本要素外,還有與你的設(shè)備所需的特定硬件位的接口,以完成其工作。主線Linux為數(shù)以千計的不同設(shè)備配備了開源驅(qū)動程序,還有來自SoC制造商和可能包含在設(shè)計中的第三方芯片的OEM廠商的驅(qū)動程序(質(zhì)量不一),但記得我對一些制造商的承諾和能力的評論。作為一個嵌入式設(shè)備的開發(fā)者,你會發(fā)現(xiàn)你花了相當(dāng)多的時間來評估和調(diào)整第三方代碼(如果你有的話),或者與制造商聯(lián)系(如果你沒有的話)。最后,你將不得不為設(shè)備特有的接口編寫設(shè)備支持,或者找人幫你寫。
獲得本書的硬件
本書中的例子是通用的,但為了使它們具有相關(guān)性并易于學(xué)習(xí),我不得不選擇特定的硬件。我選擇了三個示范設(shè)備:Raspberry Pi 4、BeagleBone Black和QEMU。第一個是迄今為止市場上最流行的基于Arm的單板計算機(jī)。第二種是廣泛提供的、廉價的開發(fā)板,可用于嚴(yán)重的嵌入式硬件。第三種是一個機(jī)器模擬器,可以用來創(chuàng)建一系列典型的嵌入式硬件的系統(tǒng)。完全使用QEMU是很誘人的,但是,像所有的仿真器一樣,它與真實的東西不太一樣。使用Raspberry Pi 4和BeagleBone Black,你就有了與真正的硬件互動和看到真正的LED燈閃爍的滿足。雖然BeagleBone Black已經(jīng)有幾年歷史了,但它仍然是開源硬件(與樹莓派不同)。這意味著板子的設(shè)計材料是免費提供的,任何人都可以將BeagleBone Black或其衍生品制作成他們的產(chǎn)品。
在任何情況下,我鼓勵你使用這三個平臺中的任何一個,或者你手頭可能有的任何嵌入式硬件,盡可能多地嘗試這些例子。
Raspberry Pi 4
在寫這篇文章的時候,Raspberry Pi 4 Model B是Raspberry Pi基金會生產(chǎn)的旗艦型小型雙顯示器臺式電腦。他們的網(wǎng)站是
https://raspberrypi.org/。Pi 4的技術(shù)規(guī)格包括以下內(nèi)容:
- 博通BCM2711 1.5 GHz四核Cortex-A72(Arm? v8)64位SoC
- 2、4或8 GiB DDR4內(nèi)存
- 2.4 GHz和5.0 GHz 802.11ac無線網(wǎng)絡(luò)、藍(lán)牙5.0、BLE
- 一個用于調(diào)試和開發(fā)的串行端口
- 一個MicroSD插槽,可作為啟動設(shè)備使用
- 一個USB-C接口,用于為電路板供電
- 2個全尺寸的USB 3.0和2個全尺寸的USB 2.0主機(jī)端口
- 一個千兆位以太網(wǎng)端口
- 2個用于視頻和音頻輸出的micro-HDMI端口
此外,還有一個40針的擴(kuò)展頭,有各種各樣的子板,被稱為HATs(硬件附加在上面),允許你調(diào)整板子做許多不同的事情。然而,在本書的例子中,你將不需要任何HATs。相反,你將利用Pi 4的內(nèi)置Wi-Fi和藍(lán)牙(BeagleBone Black缺乏這種功能)。
除了電路板本身之外,你還需要以下東西:
- 一個5V的USB-C電源,能夠提供3A或更大的電流
- 一條帶有3.3V邏輯電平引腳的USB至TTL串行電纜,如Adafruit 954
- 一張MicroSD卡,以及從你的開發(fā)電腦或筆記本電腦上寫入該卡的方法,這將需要將軟件加載到電路板上。
- 一根以太網(wǎng)電纜和一個路由器,因為有些例子需要網(wǎng)絡(luò)連接。
BeagleBone Black
BeagleBone和后來的BeagleBone Black是由CircuitCo LLC生產(chǎn)的小型信用卡大小的開發(fā)板的開放硬件設(shè)計。主要的信息庫是在https://beagleboard.org/。規(guī)格的要點如下:
- 一個TI AM335x 1 GHz Arm? Cortex-A8 Sitara SoC
- 512 MiB DDR3 RAM
- 2或4 GiB 8位eMMC板載閃存
- 一個用于調(diào)試和開發(fā)的串行端口
- 一個MicroSD插槽,可作為啟動設(shè)備使用
- 一個迷你USB OTG客戶端/主機(jī)端口,也可用于為電路板供電
- 一個全尺寸的USB 2.0主機(jī)端口
- 一個10/100以太網(wǎng)端口
- 一個用于視頻和音頻輸出的HDMI端口
此外,還有兩個46針的擴(kuò)展頭,有各種各樣的子板,被稱為 "披風(fēng)",使你可以使板子做許多不同的事情。然而,在本書的例子中,你不需要安裝任何capes。
除了板子本身之外,你還需要以下東西:
- 一條Mini-USB到USB-A的電纜(隨板提供)。
- 一條能與板子提供的6針3.3V TTL電平信號連接的串行電纜。
- 一條可以與板子提供的6針3.3V TTL電平信號連接的串行電纜。BeagleBoard網(wǎng)站有兼容電纜的鏈接。
- 一張MicroSD卡和一種從你的開發(fā)電腦或筆記本上寫入卡的方法,這將需要將軟件加載到板子上。
- 一根以太網(wǎng)電纜和一個連接路由器,因為有些例子需要網(wǎng)絡(luò)連接。
- 一個能夠提供1 A或更多的5V電源。
除了上述內(nèi)容外,第12章 "用突破板進(jìn)行原型開發(fā) "還需要
以下物品:
- 一塊SparkFun公司的GPS-15193分線板。
- 一個Saleae Logic 8邏輯分析器。這個儀器將被用來探測BeagleBone Black和NEO-M9N之間的SPI通信的引腳。
QEMU
QEMU是一個機(jī)器仿真器。它有許多不同的版本,每個版本都可以模擬一個處理器架構(gòu)和一些使用該架構(gòu)的板子。例如,我們有以下幾種:
- qemu-system-arm: 32位Arm
- qemu-system-mips: MIPS
- qemu-system-ppc: PowerPC
- qemu-system-x86: x86和x86_64
對于每個架構(gòu),QEMU都模擬了一系列的硬件,你可以通過使用-machine幫助選項查看。每臺機(jī)器都模擬了該板上通常會有的大部分硬件。有一些選項可以將硬件與本地資源聯(lián)系起來,比如使用一個本地文件來模擬磁盤驅(qū)動器。
下面是一個具體的例子:
$ qemu-system-arm -machine vexpress-a9 -m 256M -drive file=rootfs.ext4,sd -net nic -net use -kernel zImage -dtb vexpress- v2p-ca9.dtb -append "console=ttyAMA0,115200 root=/dev/mmcblk0" -serial stdio -net nic,model=lan9118 -net tap,ifname=tap0
前面的命令行中使用的選項如下:
- -machine vexpress-a9: 創(chuàng)建一個帶有Cortex A-9處理器的Arm Versatile Express開發(fā)板的仿真系統(tǒng)。
- -m 256M: 用256MB的內(nèi)存填充它
- -drive file=rootfs.ext4,sd: 將SD接口連接到本地文件rootfs.ext4(其中包含一個文件系統(tǒng)鏡像)。
- -kernel zImage: 從名為zImage的本地文件中加載Linux內(nèi)核。
- -dtb vexpress-v2p- ca9.dtb: 從本地文件vexpress-v2p-ca9.dtb中加載設(shè)備樹。
- -append "...": 添加這個字符串作為內(nèi)核命令行
- -serial stdio: 將串口連接到啟動QEMU的終端,通常這樣你就可以通過串口控制臺登錄到仿真機(jī)上。
- -net nic,model=lan9118: 創(chuàng)建一個網(wǎng)絡(luò)接口。
- -net tap,ifname=tap0: 將網(wǎng)絡(luò)接口連接到虛擬網(wǎng)絡(luò)接口tap0。
要配置網(wǎng)絡(luò)的主機(jī)端,你需要用戶模式Linux(UML)項目中的tunctl命令;在Debian和Ubuntu上,該軟件包名為uml-utilites:
$ sudo tunctl -u $(whoami) -t tap0
這將創(chuàng)建一個名為tap0的網(wǎng)絡(luò)接口,連接到模擬的QEMU機(jī)器的網(wǎng)絡(luò)控制器上。你配置tap0的方式與配置其他接口的方式完全一樣。
所有這些選項在下面的章節(jié)中都有詳細(xì)描述。我將在我的大多數(shù)例子中使用Versatile Express,但使用不同的機(jī)器或架構(gòu)應(yīng)該是很容易的。文章來源:http://www.zghlxwxcb.cn/news/detail-467010.html
配置你的開發(fā)環(huán)境
我只使用了開源軟件,無論是開發(fā)工具還是目標(biāo)操作系統(tǒng)和應(yīng)用程序。我假設(shè)你將在你的開發(fā)系統(tǒng)上使用Linux。我使用Ubuntu 20.04 LTS測試了所有的主機(jī)命令,所以對這個特定的版本有一點偏愛,但任何現(xiàn)代的Linux發(fā)行版都可能工作得很好。文章來源地址http://www.zghlxwxcb.cn/news/detail-467010.html
到了這里,關(guān)于掌握嵌入式Linux編程1開始的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!