一個嵌入式 linux 系統從軟件的角度看通常可以分為四個層次: 1. 引導加載程序。 包括固化在固件(firmware)中的 boot 代碼(可選),和 Boot Loader 兩大部分。 2. Linux 內核。 特定于嵌入式板子的定制內核以及內核的啟動參數。 3. 文件系統。 包括根文件系統和建立于 Flash 內存設備之上文件系統。通常用 ram disk 來作為 rootfs。 4. 用戶應用程序。 特定于用戶的應用程序。有時在用戶應用程序和內核層之間可能還會包括一個嵌入式圖形用戶界面常用的嵌入式 GUI 有:MicroWindows、MiniGUI、QPE 等 。 引導加載程序是系統加電后運行的第一段軟件代碼。回憶一下 PC 的體系結構我們可以知道,PC機中的引導加載程序由 BIOS(其本質就是一段固件程序)和位于硬盤 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起組成。BIOS 在完成硬件檢測和資源分配后,將硬盤 MBR 中的 Boot Loader 讀到系統的 RAM 中,然后將控制權交給 OS Boot Loader。Boot Loader 的主要運行任務就是將內核映象從硬盤上讀到 RAM 中,然后跳轉到內核的入口點去運行,也即開始啟動操作系統。而在嵌入式系統中,通常并沒有像 BIOS 那樣的固件程序(注,有的嵌入式 CPU 也會內嵌一段短小的啟動程序),因此整個系統的加載啟動任務就完全由 Boot Loader 來完成。比如在一個基于ARM7TDMI core 的嵌入式系統中,系統在上電或復位時通常都從地址 0x00000000 處開始執行,而在這個地址處安排的通常就是系統的 Boot Loader 程序。 主機和目標機之間一般通過串口建立連接,Boot Loader 軟件在執行時通常會通過串口來進行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。 大多數 Boot Loader 都包含兩種不同的操作模式:”啟動加載”模式和”下載”模式,這種區別僅對于開發人員才有意義。但從最終用戶的角度看,Boot Loader 的作用就是用來加載操作系統,而并不存在所謂的啟動加載模式與下載工作模式的區別。 啟動加載(Boot loading)模式:這種模式也稱為”自主”(Autonomous)模式。也即 Boot Loader從目標機上的某個固態存儲設備上將操作系統加載到 RAM 中運行,整個過程并沒有用戶的介入。這種模式是 Boot Loader 的正常工作模式,因此在嵌入式產品發布的時侯,Boot Loader 顯然必須工作在這種模式下。 下載(Downloading)模式:在這種模式下,目標機上的 Boot Loader 將通過串口連接或網絡連接等通信手段從主機(Host)下載文件,比如:下載內核映像和根文件系統映像等。從主機下載的文件通常首先被 Boot Loader 保存到目標機的 RAM 中,然后再被 Boot Loader 寫到目標機上的 FLASH類固態存儲設備中。Boot Loader 的這種模式通常在第一次安裝內核與根文件系統時被使用;此外,以后的系統更新也會使用 Boot Loader 的這種工作模式。工作于這種模式下的 Boot Loader 通常都會向它的終端用戶提供一個簡單的命令行接口。 BootLoader 與主機之間進行文件傳輸所用的通信設備及協議最常見的情況就是,目標機上的 Boot Loader 通過串口與主機之間進行文件傳輸,傳輸協議通常是 xmodem/ymodem/zmodem 協議中的一種。但是,串口傳輸的速度是有限的,因此通過以太網連接并借助 TFTP 協議來下載文件是個更好的選擇。
新聞熱點
疑難解答