嵌入式 Linux 的基礎知識介紹
嵌入式Linux是Linux核心的改編版,用於嵌入式系統。嵌入式Linux最流行的例子是Android作業系統。
但是,需要大量硬體資源來支援嵌入式Linux,特別是如果它將部署在實時機器對機器(M2M)通訊、機器人控制或複雜計時應用等用例中時.這些資源至少包括支援乙太網和其他基本介面的嵌入式硬體平臺(板卡或片上系統),以及用於容納作業系統、庫、檔案系統、應用程式、引導載入程式、等等。
桌面Linux與嵌入式Linux
嵌入式Linux是開源的、可修改的、用C編寫的。而桌面Linux或任何其他作業系統一樣,嵌入式Linux的作用是從底層處理器中抽象出使用者和應用程式,記憶體和其他硬體元件;為各種功能分配和交付系統資源;同時管理多個任務和應用程式等等。
儘管如此,如果您現在還沒有注意到,嵌入式Linux和傳統桌面Linux之間存在許多顯著差異。這些包括例如直接從快閃記憶體而不是硬碟啟動的能力。
下面提供了一張圖表,比較了嵌入式Linux和桌面Linux之間的一些主要差異。
嵌入式Linux:交叉編譯器、庫和引導載入程式
由於嵌入式Linux是為特定應用程式設計的,因此在開始進行需要開源作業系統的系統設計時,工程師必須使用一些特定的開發工具。以下當然不是一個詳盡的列表,但一個好的起點是使用正確的庫、強大的交叉編譯器和與Linux核心配對的高效引導載入程式。
交叉編譯器
對於不熟悉的人來說,交叉編譯器是一種編譯器,它執行編寫的程式碼,以便在編譯器所在的機器之外的其他機器上執行。例如,在您的PC或膝上型電腦上執行的交叉編譯器能夠生成為Android智慧手機等嵌入式系統編寫的程式碼。
嵌入式Linux系統需要交叉編譯器,因為這些裝置通常沒有在本地編譯程式碼所需的資源,因此必須在其他地方編譯然後交付給目標。
對於提供大小優化、支援控制處理的特性等功能的交叉編譯器,有多種選擇。但是這裡列出了一些最常見的交叉編譯器:Buildroot、Crosstool-NG、Yocto。
C庫
C庫提供核心和應用程式之間的介面,因此必須是交叉編譯過程的一部分。嵌入式Linux系統中的任何程式,無論是用python、java還是其他語言編寫的,都必須在執行時呼叫C庫才能通過Linux核心訪問硬體資源。
下面是一些在嵌入式Linux系統中使用的流行C庫。
glibc–標準的GNUC庫功能豐富,但代價是佔用大量記憶體。它也沒有任何配置選項。
uClibc–“u”表示uClibc是一個小型的微控制器C庫,用於嵌入式系統。
musl–musl也很小,在RAM和儲存量有限的系統中是一個不錯的選擇。
eglibc–eglibc與glibc相同,但做了一些修改,使其更適合在嵌入式裝置中使用,例如支援配置。
特定於應用程式的庫
嵌入式Linux核心的功能有限,因此需要特定的庫。下面列出了一些受歡迎的。
libgpiod–如今,標準命令列並不是與Linux裝置檔案互動的唯一方式。libgpiod用於與Linux裝置中的GPIO硬體互動。
libusb–libusb是一個C庫,它從單一平臺為所有通用USB裝置提供驅動程式。
Socket—Socket庫可連線網路上的節點。
serdisplib–該庫可以驅動多個顯示器,如OLED、USB顯示器或帶有內建控制器的顯示器。
Pigpio–Pigpio庫可用於控制RaspberryPiGPIO。
opc-ua–opc-ua協議是一種適用於時間敏感網路的協議。
lockdev–鎖定和解鎖裝置
libxls–該庫用於讀取和轉換Excel檔案。
libstroke–用於識別滑鼠筆觸和手勢的庫。
libserialport–在編寫使用串列埠的軟體時抽象作業系統特定的細節
hidapi–用於與USB和藍芽HID裝置通訊的庫。乙肝
mjpg_streamer–用於從一個或多個輸入捕獲JPEG幀並通過IP網路流式傳輸它們
cheese—cheese可以幫助您使用網路攝像頭拍攝視訊、照片等。
Elisa–它是一個簡單的音樂播放器,因此您可以播放任何音訊。
引導載入程式
引導載入程式是系統開機後執行的第一個程式碼,它處理基本的硬體初始化並從可引導裝置(如硬碟驅動器或SD卡或嵌入式Linux系統中的快閃記憶體)載入作業系統。一旦引導載入程式為Linux核心設定了可執行環境並且核心開始執行,就不再需要引導載入程式。
引導載入程式有各種形狀和大小,可以根據使用者或系統需求進行定製。事實上,一些嵌入式電路板帶有引導載入程式。
這裡介紹了一些常用的引導載入程式及其支援的處理器架構。
名稱 |
支援的架構 |
DasU-Boot |
ARC、ARM、Blackfin、Microblaze、MIPS、NiosII、OpenRice、PowerPC、SuperH |
RedBoot |
ARM、MIPS、PowerPC、SuperH |
Barebox |
ARM、Blackfin、MIPS、NiosII、PowerPC |
GRUB2 |
x86、x86_64 |
LittleKernel |
arm |
YAMON |
MIPS |
CFE |
BroadcomMIPS |
這些是您可能每天使用的各種基於Linux的嵌入式系統背後的關鍵構建塊,您可能甚至不知道它們執行Linux,例如智慧電視、無線路由器和網路附加儲存裝置。
本文由朗銳智科(www.lrist.com)編輯整理,如有侵權請聯絡本站。