嵌入式設(shè)備上的 Linux 系統(tǒng)開發(fā)(一)
——
Linux 正在嵌入式開發(fā)領(lǐng)域穩(wěn)步發(fā)展。因?yàn)?nbsp;Linux 使用 GPL(請(qǐng)參閱本文后面的參考資料),所以任何對(duì)將 Linux 定制于 PDA、掌上機(jī)或者可佩帶設(shè)備感興趣的人都可以從因特網(wǎng)免費(fèi)下載其內(nèi)核和應(yīng)用程序,并開始移植或開發(fā)。許多 Linux 改良品種迎合了嵌入式/實(shí)時(shí)市場(chǎng)。它們包括 RTLinux(實(shí)時(shí) Linux)、uclinux(用于非 MMU 設(shè)備的 Linux)、Montavista Linux(用于 ARM、MIPS、PPC 的 Linux 分發(fā)版)、ARM-Linux(ARM 上的 Linux)和其它 Linux 系統(tǒng)(請(qǐng)參閱參考資料以鏈接到本文中提到的這些和其它術(shù)語(yǔ)及產(chǎn)品。)
嵌入式 Linux 開發(fā)大致涉及三個(gè)層次:引導(dǎo)裝載程序、Linux 內(nèi)核和圖形用戶界面(或稱 GUI)。在本文中,我們將集中討論涉及這三層的一些基本概念;深入了解引導(dǎo)裝載程序、內(nèi)核和文件系統(tǒng)是如何交互的;并將研究可用于文件系統(tǒng)、GUI 和引導(dǎo)裝載程序的眾多選項(xiàng)中的一部分。
引導(dǎo)裝載程序
引導(dǎo)裝載程序通常是在任何硬件上執(zhí)行的第一段代碼。在象臺(tái)式機(jī)這樣的常規(guī)系統(tǒng)中,通常將引導(dǎo)裝載程序裝入主引導(dǎo)記錄(Master Boot Record,(MBR))中,或者裝入 Linux 駐留的磁盤的第一個(gè)扇區(qū)中。通常,在臺(tái)式機(jī)或其它系統(tǒng)上,BIOS 將控制移交給引導(dǎo)裝載程序。這就提出了一個(gè)有趣的問(wèn)題:誰(shuí)將引導(dǎo)裝載程序裝入(在大多數(shù)情況中)沒有 BIOS 的嵌入式設(shè)備上呢?
解決這個(gè)問(wèn)題有兩種常規(guī)技術(shù):專用軟件和微小的引導(dǎo)代碼(tiny bootcode)。
專用軟件可以直接與遠(yuǎn)程系統(tǒng)上的閃存設(shè)備進(jìn)行交互并將引導(dǎo)裝載程序安裝在閃存的給定位置中。閃存設(shè)備是與存儲(chǔ)設(shè)備功能類似的特殊芯片,而且它們能持久存儲(chǔ)信息 — 即,在重新引導(dǎo)時(shí)不會(huì)擦除其內(nèi)容。
這個(gè)軟件使用目標(biāo)(在嵌入式開發(fā)中,嵌入式設(shè)備通常被稱為目標(biāo))上的 JTAG 端口,它是用于執(zhí)行外部輸入(通常來(lái)自主機(jī)機(jī)器)的指令的接口。JFlash-linux 是一種用于直接寫閃存的流行工具。它支持為數(shù)眾多的閃存芯片;它在主機(jī)機(jī)器(通常是 i386 機(jī)器 — 本文中我們把一臺(tái) i386 機(jī)器稱為主機(jī))上執(zhí)行并通過(guò) JTAG 接口使用并行端口訪問(wèn)目標(biāo)的閃存芯片。當(dāng)然,這意味著目標(biāo)需要有一個(gè)并行接口使它能與主機(jī)通信。Jflash-linux 在 Linux 和 Windows 版本中都可使用,可以在命令行中用以下命令啟動(dòng)它:
Jflash-linux <bootloader>
某些種類的嵌入式設(shè)備具有微小的引導(dǎo)代碼 — 根據(jù)幾個(gè)字節(jié)的指令 — 它將初始化一些 DRAM 設(shè)置并啟用目標(biāo)上的一個(gè)串行(或者 USB,或者以太網(wǎng))端口與主機(jī)程序通信。然后,主機(jī)程序或裝入程序可以使用這個(gè)連接將引導(dǎo)裝載程序傳送到目標(biāo)上,并將它寫入閃存。
在安裝它并給予其控制后,這個(gè)引導(dǎo)裝載程序執(zhí)行下列各類功能:
評(píng)論