如果您剛接觸嵌入式開發,那麼大量可用的引導裝載程序(bootloader)、規模縮小的分發版(distribution)、文件系統和 GUI 看起來可能太多了。但是這些豐富的選項實際上是一種恩賜,允許您調整開發或用戶環境以完全符合您的需要。對 Linux 嵌入式開發的概述將幫助您理解所有這些選項。 Linux 正在嵌入式開發領域穩步發展。因爲 Linux 使用 GPL(請參閱本文後面的參考資料), 所以任何對將 Linux 定製於 PDA、掌上機或者可佩帶設備感興趣的人都可以從因特網免費下載其內核和應用程序,並開始移植或開發。許多 Linux 改良品種迎合了嵌入式/實時市場。它們包括 RTLinux(實時 Linux)、uclinux(用於非 MMU 設備的 Linux)、Montavista Linux(用於 ARM、MIPS、PPC 的 Linux 分發版)、ARM-Linux(ARM 上的 Linux)和其它 Linux 系統(請參閱參考資料以鏈接到本文中提到的這些和其它術語及產品。) 嵌入式 Linux 開發大致涉及三個層次:引導裝載程序、Linux 內核和圖形用戶界面(或稱 GUI)。在本文中,我們將集中討論涉及這三層的一些基本概念;深入瞭解引導裝載程序、內核和文件系統是如何交互的;並將研究可用於文件系統、GUI 和引導裝載程序的衆多選項中的一部分。 引導裝載程序 解決這個問題有兩種常規技術:專用軟件和微小的引導代碼(tiny bootcode)。 專用軟件可以直接與遠程系統上的閃存設備進行交互並將引導裝載程序安裝在閃存的給定位置中。閃存設備是與存儲設備功能類似的特殊芯片,而且它們能持久存儲信息 — 即,在重新引導時不會擦除其內容。 這個軟件使用目標(在嵌入式開發中,嵌入式設備通常被稱爲目標)上的 JTAG 端口,它是用於執行外部輸入(通常來自主機機器)的指令的接口。JFlash-linux 是一種用於直接寫閃存的流行工具。它支持爲數衆多的閃存芯片;它在主機機器(通常是 i386 機器 — 本文中我們把一臺 i386 機器稱爲主機)上執行並通過 JTAG 接口使用並行端口訪問目標的閃存芯片。當然,這意味着目標需要有一個並行接口使它能與主機通信。Jflash-linux 在 Linux 和 Windows 版本中都可使用,可以在命令行中用以下命令啓動它: 某些種類的嵌入式設備具有微小的引導代碼 — 根據幾個字節的指令 — 它將初始化一些 DRAM 設置並啓用目標上的一個串行(或者 USB,或者以太網)端口與主機程序通信。然後,主機程序或裝入程序可以使用這個連接將引導裝載程序傳送到目標上,並將它寫入閃存。 在安裝它並給予其控制後,這個引導裝載程序執行下列各類功能: 初始化 CPU 速度 初始化內存,包括啓用內存庫、初始化內存配置寄存器等 初始化串行端口(如果在目標上有的話) 啓用指令/數據高速緩存 設置堆棧指針 設置參數區域並構造參數結構和標記(這是重要的一步,因爲內核在標識根設備、頁面大小、內存大小以及更多內容時要使用引導參數) 執行 POST(加電自檢)來標識存在的設備並報告任何問題 爲電源管理提供掛起/恢復支持 跳轉到內核的開始
帶有引導裝載程序、參數結構、內核和文件系統的系統典型內存佈局可能如下所示: 清單 1. 典型內存佈局
嵌入式設備上一些流行的並可免費使用的 Linux 引導裝載程序有 Blob、Redboot 和 Bootldr(請參閱參考資料獲得鏈接)。所有這些引導裝載程序都用於基於 ARM 設備上的 Linux,並需要 Jflash-linux 工具用於安裝。 一旦將引導裝載程序安裝到目標的閃存中,它就會執行我們上面提到的所有初始化工作。然後,它準備接收來自主機的內核和文件系統。一旦裝入了內核,引導裝載程序就將控制轉給內核。 設置工具鏈 工具鏈由一套用於編譯、彙編和鏈接內核及應用程序的組件組成。 這些組件包括: Binutils — 用於操作二進制文件的實用程序集合。它們包括諸如 ar、as、objdump、objcopy 這樣的實用程序。 Gcc — GNU C 編譯器。 Glibc — 所有用戶應用程序都將鏈接到的 C 庫。避免使用任何 C 庫函數的內核和其它應用程序可以在沒有該庫的情況下進行編譯。
構建工具鏈建立了一個交叉編譯器環境。本地編譯器編譯與本機同類的處理器的指令。交叉編譯器運 行在某一種處理器上,卻可以編譯另一種處理器的指令。重頭設置交叉編譯器工具鏈可不是一項簡單的任務:它包括下載源代碼、修補補丁、配置、編譯、設置頭文 件、安裝以及很多很多的操作。另外,這樣一個徹底的構建過程對內存和硬盤的需求是巨大的。如果沒有足夠的內存和硬盤空間,那麼在構建階段由於相關性、配置 或頭文件設置等問題會突然冒出許多問題。 因此能夠從因特網上獲得已預編譯的二進制文件是一件 好事(但不太好的一點是,目前它們大多數只限於基於 ARM 的系統,但遲早會改變的)。一些比較流行的已預編譯的工具鏈包括那些來自 Compaq(Familiar Linux )、LART(LART Linux)和 Embedian(基於 Debian 但與它無關)的工具鏈 — 所有這些工具鏈都用於基於 ARM 的平臺。 內核設置 內核佈局 根據可用的系統資源和引導裝載程序的功能,內核可以編譯成 vmlinux、Image 或 zImage。vmlinux 和 zImage 之間的主要區別在於 vmlinux 是實際的(未壓縮的)可執行文件,而 zImage 是或多或少包含相同信息的自解壓壓縮文件 — 只是壓縮它以處理(通常是 Intel 強制的)640 KB 引導時間的限制。有關所有這些的權威性解釋,請參閱 Linux Magazine 的文章"Kernel Configuration: dealing with the unexpected"(請參閱參考資料)。 內核鏈接和裝入 內核可執行文件由許多鏈接在一起的對象文件組成。對象文件有許多節,如文本、數據、init 數據、bass 等等。這些對象文件都是由一個稱爲鏈接器腳本的文件鏈接並裝入的。這個鏈接器腳本的功能是將輸入對象文件的各節映射到輸出文件中;換句話說,它將所有輸入對象文件都鏈接到單一的可執行文件中,將該可執行文件的各節裝入到指定地址處。vmlinux.lds 是存在於 arch/<target>/ 目錄中的內核鏈接器腳本,它負責鏈接內核的各個節並將它們裝入內存中特定偏移量處。典型的 vmlinux.lds 看起來象這樣: 清單 2. 典型的 vmlinux.lds 文件
LMA 是裝入模塊地址;它表示將要裝入內核的目標虛擬內存中的地址。TEXTADDR 是內核的虛擬起始地址,並且在 arch/<target>/ 下的 Makefile 中指定它的值。這個地址必須與引導裝載程序使用的地址相匹配。 一旦引導裝載程序將內核複製到閃存或 DRAM 中,內核就被重新定位到 TEXTADDR — 它通常在 DRAM 中。然後,引導裝載程序將控制轉給這個地址,以便內核能開始執行。 參數傳遞和內核引導 start_kernel 調用 setup_arch 作爲執行的第一步,在其中完成特定於體系結構的設置。這包括初始化硬件寄存器、標識根設備和系統中可用的 DRAM 和閃存的數量、指定系統中可用頁面的數目、文件系統大小等等。所有這些信息都以參數形式從引導裝載程序傳遞到內核。 將參數從引導裝載程序傳遞到內核有兩種方法: parameter_structure 和標記列表。在這兩種方法中,不贊成使用參數結構,因爲它強加了限制:指定在內存中,每個參數必須位於 param_struct 中的特定偏移量處。最新的內核期望參數作爲標記列表的格式來傳遞,並將參數轉化爲已標記格式。param_struct 定義在 include/asm/setup.h 中。它的一些重要字段是: 清單 3. 樣本參數結構
請注意:這些數表示定義字段的參數結構中的偏移量。 這意味着如果引導裝載程序將參數結構放置在地址 0xc0000100,那麼 rootdev 參數將放置在 0xc0000100 + 16,initrd_start 將放置在 0xc0000100 + 64 等等 — 否則,內核將在解釋正確的參數時遇到困難。 正如上面提到的,因爲從引導裝載程序到內核的參數傳 遞會有一些約束條件,所以大多數 2.4.x 系列內核期望參數以已標記的列表格式傳遞。在已標記的列表中,每個標記由標識被傳遞參數的 tag_header 以及其後的參數值組成。標記列表中標記的常規格式可以如下所示: 清單 4. 樣本標記格式。內核通過 <ATAG_TAGNAME> 頭來標識每個標記。
setup_arch 還需要對閃存存儲庫、系統寄存器和其它特定設備執行內存映射。一旦完成了特定於體系結構的設置,控制就返回到初始化系統其餘部分的 start_kernel 函數。這些附加的初始化任務包含: 設置陷阱 初始化中斷 初始化計時器 初始化控制檯 調用 mem_init,它計算各種區域、高內存區等內的頁面數量 初始化 slab 分配器併爲 VFS、緩衝區高速緩存等創建 slab 高速緩存 建立各種文件系統,如 proc、ext2 和 JFFS2 創建 kernel_thread,它執行文件系統中的 init 命令並顯示 lign 提示符。 如果在 /bin、/sbin 或 /etc 中沒有 init 程序,那麼內核將執行文件系統的 /bin 中的 shell。
設備驅動程序 幀緩衝區驅動程序 幀緩衝區是顯卡上的內存,需要將它內存映射到用戶空 間以便可以將圖形和文本能寫到這個內存段上:然後這個信息將反映到屏幕上。幀緩衝區支持提高了繪圖的速度和整體性能。這也是頂層驅動程序引人注意之處:頂 層是非常特定於硬件的驅動程序,它需要支持顯卡不同的硬件方面 — 象啓用/禁用顯卡控制器、深度和模式的支持以及調色板等。所有這三層都相互依賴以實現正確的視頻功能。與幀緩衝區有關的設備是 /dev/fb0(主設備號 29,次設備號 0)。 輸入設備驅動程序 觸摸板設備的主要功能是隨時報告用戶的觸摸,並標識觸摸的座標。這通常在每次發生觸摸時,通過生成一箇中斷來實現。 然後,這個設備驅動程序的角色是每當出現中斷時就查詢觸摸屏控制器,並請求控制器發送觸摸的座標。一旦驅動程序接收到座標,它就將有關觸摸和任何可用數據的信號發送給用戶應用程序,並將數據發送給應用程序(如果可能的話)。然後用戶應用程序根據它的需要處理數據。 幾乎所有輸入設備 — 包括小鍵盤 — 都以類似原理工作。 閃存 MTD 驅動程序 MTD 驅動程序是在 Linux 下專門爲嵌入式環境開發的新的一類驅動程序。相對於常規塊設備驅動程序,使用 MTD 驅動程序的主要優點在於 MTD 驅動程序是專門爲基於閃存的設備所設計的,所以它們通常有更好的支持、更好的管理和基於扇區的擦除和讀寫操作的更好的接口。Linux 下的 MTD 驅動程序接口被劃分爲兩類模塊:用戶模塊和硬件模塊。 用戶模塊 硬件模塊 MTD 驅動程序設置 有兩個流行的用戶模塊可啓用對閃存的訪問:MTD_CHAR 和 MTD_BLOCK。 MTD_CHAR 提供對閃存的原始字符訪問,而 MTD_BLOCK 將閃存設計爲可以在上面創建文件系統的常規塊設備(象 IDE 磁盤)。與 MTD_CHAR 關聯的設備是 /dev/mtd0、mtd1、mtd2(等等),而與 MTD_BLOCK 關聯的設備是 /dev/mtdblock0、mtdblock1(等等)。由於 MTD_BLOCK 設備提供象塊設備那樣的模擬,通常更可取的是在這個模擬基礎上創建象 FTL 和 JFFS2 那樣的文件系統。 爲了進行這個操作,可能需要創建分區表將閃存設備分拆到引導裝載程序節、內核節和文件系統節中。樣本分區表可能包含以下信息: 清單 5. MTD 的簡單閃存設備分區
上面的分區表使用了 MTD_BLOCK 接口對閃存設備進行分區。這些分區的設備節點是: 簡單閃存分區的設備節點
在本例中,引導裝載程序必須將有關 root 設備節點(/dev/mtdblock2)和可以在閃存中找到文件系統的地址(本例中是 FLASH_BASE_ADDRESS + 0x04000000)的正確參數傳遞到內核。一旦完成分區,閃存設備就準備裝入或掛裝文件系統。 Linux 中 MTD 子系統的主要目標是在系統的硬件驅動程序和上層,或用戶模塊之間提供通用接口。硬件驅動程序不需要知道象 JFFS2 和 FTL 那樣的用戶模塊使用的方法。所有它們真正需要提供的就是一組對底層閃存系統進行 read、 write 和 erase 操作的簡單例程。 嵌入式設備的文件系統 用戶可以根據可靠性、健壯性和/或增強的功能的需求來選擇文件系統的類型。下一節將討論幾個可用選項及其優缺點。 第二版擴展文件系統(Ext2fs)
因爲 Ext2 文件系統的穩定性、可靠性和健壯性,所以幾乎在所有基於 Linux 的系統(包括臺式機、服務器和工作站 — 並且甚至一些嵌入式設備)上都使用 Ext2 文件系統。然而,當在嵌入式設備中使用 Ext2fs 時,它有一些缺點: Ext2fs 是爲象 IDE 設備那樣的塊設備設計的,這些設備的邏輯塊大小是 512 字節,1 K 字節等這樣的倍數。這不太適合於扇區大小因設備不同而不同的閃存設備。 Ext2 文件系統沒有提供對基於扇區的擦除/寫操作的良好管理。在 Ext2fs 中,爲了在一個扇區中擦除單個字節,必須將整個扇區複製到 RAM,然後擦除,然後重寫入。考慮到閃存設備具有有限的擦除壽命(大約能進行 100,000 次擦除),在此之後就不能使用它們,所以這不是一個特別好的方法。 在出現電源故障時,Ext2fs 不是防崩潰的。 Ext2 文件系統不支持損耗平衡,因此縮短了扇區/閃存的壽命。(損耗平衡確保將地址範圍的不同區域輪流用於寫和/或擦除操作以延長閃存設備的壽命。) Ext2fs 沒有特別完美的扇區管理,這使設計塊驅動程序十分困難。
由於這些原因,通常相對於 Ext2fs,在嵌入式環境中使用 MTD/JFFS2 組合是更好的選擇。 用 Ramdisk 掛裝 Ext2fs 清單 6. 創建一個簡單的基於 Ext2fs 的 Ramdisk
mke2fs 是用於在任何設備上創建 ext2 文件系統的實用程序 — 它創建超級塊、索引節點以及索引節點表等等。 在上面的用法中,/dev/ram 是上面構建有 4096 個塊的 ext2 文件系統的設備。然後,將這個設備(/dev/ram)掛裝在名爲 /mnt 的臨時目錄上並且複製所有必需的文件。一旦複製完這些文件,就卸裝這個文件系統並且設備(/dev/ram)的內容被轉儲到一個文件 (ext2ramdisk)中,它就是所需的 Ramdisk(Ext2 文件系統)。 上面的順序創建了一個 4 MB 的 Ramdisk,並用必需的文件實用程序來填充它。 一些要包含在 Ramdisk 中的重要目錄是: /bin — 保存大多數象 init、busybox、shell、文件管理實用程序等二進制文件。 /dev — 包含用在設備中的所有設備節點 /etc — 包含系統的所有配置文件 /lib — 包含所有必需的庫,如 libc、libdl 等
日誌閃存文件系統,版本 2(JFFS2)
因爲本文主要是寫關於閃存設備的使用,所以在嵌入式環境中使用 JFFS2 的缺點很少: 當文件系統已滿或接近滿時,JFFS2 會大大放慢運行速度。這是因爲垃圾收集的問題(更多信息,請參閱參考資料)。
創建 JFFS2 文件系統 清單 7. 創建 JFFS2 文件系統
上面顯示了 mkfs.jffs2 的典型用法。-e 選項確定閃存的擦除扇區大小(通常是 64 千字節)。-p 選項用來在映像的剩餘空間用零填充。-o 選項用於輸出文件,通常是 JFFS2 文件系統映像 — 在本例中是 jffs.image。一旦創建了 JFFS2 文件系統,它就被裝入閃存中適當的位置(引導裝載程序告知內核查找文件系統的地址)以便內核能掛裝它。 tmpfs tmpfs 是基於內存的文件系統,它主要用於減少對系統的不必要的閃存寫操作這一唯一目的。因爲 tmpfs 駐留在 RAM 中,所以寫/讀/擦除的操作發生在 RAM 中而不是在閃存中。因此,日誌消息寫入 RAM 而不是閃存中,在重新引導時不會保留它們。tmpfs 還使用磁盤交換空間來存儲,並且當爲存儲文件而請求頁面時,使用虛擬內存(VM)子系統。 tmpfs 的優點包括: 動態文件系統大小 — 文件系統大小可以根據被複制、創建或刪除的文件或目錄的數量來縮放。使得能夠最理想地使用內存。 速度 — 因爲 tmpfs 駐留在 RAM,所以讀和寫幾乎都是瞬時的。即使以交換的形式存儲文件,I/O 操作的速度仍非常快。
tmpfs 的一個缺點是當系統重新引導時會丟失所有數據。因此,重要的數據不能存儲在 tmpfs 上。 掛裝 tmpfs 清單 8. 掛裝 tmpfs
上面的命令將在 /var 上創建 tmpfs 並將 tmpfs 的最大大小限制爲 512 K。同時,tmp/ 和 log/ 目錄成爲 tmpfs 的一部分以便在 RAM 中存儲日誌消息。 如果您想將 tmpfs 的一個項添加到 /etc/fstab,那麼它可能看起來象這樣: 這將在 /var 上掛裝一個新的 tmpfs 文件系統。 圖形用戶界面(GUI)選項 另一個要考慮的重要方面涉及許可證問題。一些 GUI 分發版具有允許免費使用的許可證,甚至在一些商業產品中也是如此。另一些許可證要求如果想將 GUI 合併入項目中則要支付版稅。 最後,大多數開發人員可能會選擇 XFree86,因爲 XFree86 爲他們提供了一個能使用他們喜歡的工具的熟悉環境。但是市場上較新的 GUI,象 Century Software 的 Microwindows(Nano-X)和 Trolltech 的 QT/Embedded,與 X 在嵌入式 Linux 的競技舞臺中展開了激烈競爭,這主要是因爲它們佔用很少的資源、執行的速度很快並且具有定製窗口構件的支持。 讓我們看一看這些選項中的每一個。 Xfree86 4.X(帶幀緩衝區支持的 X11R6.4) 它的優點包括: 幀緩衝區體系結構的使用提高了性能。 佔用的資源相對很小 — 大小在 600 K 到 700 K 字節的範圍內,這使它很容易在小型設備上運行。 非常好的支持:在線有許多文檔可用,還有許多專用於 XFree86 開發的郵遞列表。 X API 非常適合擴展。
它的缺點包括: 比最近出現的嵌入式 GUI 工具性能差。 此外,當與 GUI 中最新的開發 — 象專門爲嵌入式環境設計的 Nano-X 或 QT/Embedded — 相比時,XFree86 似乎需要更多的內存。
Microwindows Microwindows 體系結構是基於客戶機/服務器的並且具有分層設計。最底層是屏幕和輸入設備驅動程序(關於鍵盤或鼠標)來與實際硬件交互。在中間層,可移植的圖形引擎提供對線的繪製、區域的填充、多邊形、裁剪以及顏色模型的支持。 在最上層,Microwindows 支持兩種 API:Win32/WinCE API 實現,稱爲 Microwindows;另一種 API 與 GDK 非常相似,它稱爲 Nano-X。Nano-X 用在 Linux 上。它是象 X 的 API,用於佔用資源少的應用程序。 Microwindows 支持 1、2、4 和 8 bpp(每像素的位數)的 palletized 顯示,以及 8、16、24 和 32 bpp 的真彩色顯示。Microwindows 還支持使它速度更快的幀緩衝區。Nano-X 服務器佔用的資源大約在 100 K 到 150 K 字節。 原始 Nano-X 應用程序的平均大小在 30 K 到 60 K。由於 Nano-X 是爲有內存限制的低端設備設計的,所以它不象 X 那樣支持很多函數,因此它實際上不能作爲微型 X(Xfree86 4.1)的替代品。 可以在 Microwindows 上運行 FLNX,它是針對 Nano-X 而不是 X 進行修改的 FLTK(快速輕巧工具箱(Fast Light Toolkit))應用程序開發環境的一個版本。本文中描述 FLTK。 Nano-X 的優點包括: 與 Xlib 實現不同,Nano-X 仍在每個客戶機上同步運行,這意味着一旦發送了客戶機請求包,服務器在爲另一個客戶機提供服務之前一直等待,直到整個包都到達爲止。這使服務器代碼非常簡單,而運行的速度仍非常快。 佔用很小的資源Nano-X 的缺點包括: 聯網功能部件至今沒有經過適當地調整(特別是網絡透明性)。 還沒有太多現成的應用程序可用。 與 X 相比,Nano-X 雖然近來正在加速開發,但仍沒有那麼多文檔說明而且沒有很好的支持,但這種情形會有所改變。Microwindows 上的 FLTK API 針對 Microwindows GUI 引擎的 FLTK 的 Linux 版本被稱爲 FLNX。FLNX 由兩個組件構成:Fl_Widget 和 FLUID。Fl_Widget 由所有基本窗口構件 API 組成。FLUID(快速輕巧的用戶界面設計器(Fast Light User Interface Designer, FLUID))是用來產生 FLTK 源代碼的圖形編輯器。總的來說,FLNX 是能用來爲嵌入式環境創建應用程序的一個出色的 UI 構建器。 Fl_Widget 佔用的資源大約是 40 K 到 48 K,而 FLUID(包括了每個窗口構件)大約佔用 380 K。這些非常小的資源佔用率使 Fl_Widget 和 FLUID 在嵌入式開發世界中非常受歡迎。 優點包括: 習慣於在象 Windows 這樣已建立得較好的環境中開發基於 GUI 的應用程序的任何人都會非常容易地適應 FLTK 環境。 它的文檔包括一本十分完整且編寫良好的手冊。 它使用 LGPL 進行分發,所以開發人員可以靈活地發放他們應用程序的許可證。 FLTK 是一個 C++ 庫(Perl 和 Python 綁定也可用)。面向對象模型的選擇是一個好的選擇,因爲大多數現代 GUI 環境都是面向對象的;這也使將編寫的應用程序移植到類似的 API 中變得更容易。 Century Software 的環境提供了幾個有用的工具,諸如 ScreenToP 和 ViewML 瀏覽器。它的缺點是: 普通的 FLTK 可以與 X 和 Windows API 一同工作,而 FLNX 不能。它與 X 的不兼容性阻礙了它在許多項目中的使用。Qt/Embedded Qt/Embedded 以原始 Qt 爲基礎,並做了許多出色的調整以適用於嵌入式環境。Qt Embedded 通過 Qt API 與 Linux I/O 設施直接交互。那些熟悉並已適應了面向對象編程的人員將發現它是一個理想環境。而且,面向對象的體系結構使代碼結構化、可重用並且運行快速。與其它 GUI 相比,Qt GUI 非常快,並且它沒有分層,這使得 Qt/Embedded 成爲用於運行基於 Qt 的程序的最緊湊環境。 Trolltech 還推出了 Qt 掌上機環境(Qt Palmtop Environment,俗稱 Qpe)。Qpe 提供了一個基本桌面窗口,並且該環境爲開發提供了一個易於使用的界面。Qpe 包含全套的個人信息管理(Personal Information Management (PIM))應用程序、因特網客戶機、實用程序等等。然而,爲了將 Qt/Embedded 或 Qpe 集成到一個產品中,需要從 Trolltech 獲得商業許可證。(原始 Qt 自版本 2.2 以後就可以根據 GPL 獲得 。) 它的優點包括: 面向對象的體系結構有助於更快地執行 佔用很少的資源,大約 800 K 抗鋸齒文本和混合視頻的象素映射它的缺點是: Qt/Embedded 和 Qpe 只能在獲得商業許可證的情況下才能使用。
結束語 我們希望這篇對嵌入式 Linux 領域的介紹性概述能激起您進行試驗的慾望,並且希望您將體會擺弄微型設備的樂趣以滿足您的愛好。爲進一步有助於您的項目,請參閱下面的"參考資料",鏈接到有關我們這裏已經概述的技術的更深入的信息。 參考資料 · 引導: 如需獲得對 vmlinux 和 zimage 之間區別的極好解釋,請在 Alessandro Rubini 編寫的"Kernel Configuration: dealing with the unexpected(Linux Magazine)的一文中找到"Booting your kernel"一節。 有關內核、映像和引導過程的更多信息,請閱讀中央昆士蘭大學(Central Queensland University)的系統管理文本的第 13 章。 要進一步瞭解引導過程的工作原理,請參閱 ROLO: A Developer's Guide,它討論了在不利用 BIOS 的情況下引導 Linux(Embedded Linux Works,2001 年 6 月)。· 小型分發版: The Embedded Linux Distributions Quick Reference Guide 涵蓋了許多商業的和開放源碼的分發版(Linux Devices,2001 年 8 月)。 請查看另一個詳盡的分發版和有用的工具的清單(Linux-embedded.com)。· 工具鏈: Wiki 工具鏈頁面包含到本文提到的所有三個工具鏈的鏈接,還有對它們的評論。· 設備驅動程序: Memory Technology Device (MTD) Subsystem for Linux 的目的是簡化內存設備(特別是閃存設備)的驅動程序的創建。 Vipin Malik 編寫的 The Linux MTD, JFFS HOWTO 將幫助您使 MTD 和 JFFS2 一起工作。 Linux for PowerPC Embedded Systems HOWTO 有一個很好的設備驅動程序清單。 理解 Linux device drivers 有助於理解本篇介紹性文章(Penguin Magazine)。 要精通 Linux 設備驅動程序,請閱讀 O'Reilly 的 Linux Device Drivers,第 2 版一書。· 有用的工具: 請查看 LART 上的 Jflash-linux。 Binutils、GCC 和 Glibc 都可從 Free Software Foundation 下載獲得。 許多有用的下載都可從 Netwinder.org 獲得,這是一個致力於 NetWinder 平臺上開發工作的志願者站點。 請在 Mark Nielsen 寫得非常棒的 How to use a Ramdisk for Linux 一文中閱讀有關 Ramdisk 的所有信息。 FLNX 是以 FLTK(快速輕巧的工具箱)爲基礎的。· 文件系統: 第二版擴展文件系統 Ext2fs 的主頁在 SourceForge。 Red Hat 英國公司的 David Woodhouse 概述了大量有關 JFFS2:日誌閃存文件系統,第 2 版的背景知識。 Vipin Malik 的 JFFS - A practical guide 一文也詳細討論了 JFFS,包括垃圾收集的問題(Embedded Linux Works,2001 年 5 月)。 您可以在 Linux HeadQuarters 閱讀更多有關 tmpfs 的信息。 Cliff Brake 和 Jeff Sutherland 編寫的 Flash Filesystems for Embedded Linux Systems 一文論述了用於閃存設備的更多文件系統(Embedded Linux Journal)。· GUI: Xfree86 是 X 開發的主頁。 在 Microwindows 站點上可以找到有關 Microwindows 和 Nano-X 的信息。 請查看一篇對 Microwindows 的一些缺點(GNOME gtk 開發人員的郵遞列表)的討論(時間比較長了)。 您將在 Microwindows Project Links 上找到豐富的 Microwindows/Nano-X 鏈接。 在 Trolltech 上查找有關 Qt/Embedded 的更多信息。 The Embedded Linux GUI/Windowing Quick Reference Guide 中有豐富的鏈接(Linux Devices,2002 年 2 月)。· 一般參考資料: General Public License 或 GPL 確保用戶複製、分發和修改軟件的權利。 ARM Linux 是您瞭解有關 Linux 用於 ARM 處理器的信息的一個非常好的站點。它由 ARM 的創建者 Russell King 來維護。 Penguinppc.org 是關於 Linux 用於 PowerPC 系列處理器的的主頁。該站點上有一個關於爲基於 PPC 的體系結構建立工具鏈的資料豐富的教程。 Linux Devices 是一個非常全面的站點,它包含有關 Linux 和嵌入式開發的出版發行、快速參考、新聞和特色報告等各種信息。 Silicon Penguin 列表站點上擁有嵌入式 Linux 參考資料的詳盡集合。 ARMLinux - the book 可從 Aleph One 上獲得。您可以定購一本,也可以在線閱讀。 嵌入式 Linux 協會(Embedded Linux Consortium)是一個非贏利的互助協會,它歡迎致力於嵌入式 Linux 領域的開發人員成爲會員。 訪問 IBM 關於嵌入式 Linux 的主頁,獲得新聞、產品和開發人員參考資料。 IBM 的 Linux wristwatch 是運行 Linux 的微型嵌入式設備的示例;本文的作者之一,Vishal Kulkarni 也參與了它的研發。請在 IBM's Linux Watch: The Challenge of Miniaturization(PDF 格式),或本文(FreeOS.com,2001 年 3 月)中閱讀有關它的信息。 在 developerWorks 上瀏覽更多 Linux 參考資料。 在 developerWorks 上瀏覽更多無線領域的參考資料。 |
嵌入式設備上的 Linux 系統開發[ 轉]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.