?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

金冠游戲:嵌入式設備上的 Linux 系統開發

?

假如您剛打仗嵌入式開拓,那么大年夜量可用的向導裝載法度榜樣(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 和向導裝載法度榜樣的浩繁選項中的一部分。

向導裝載法度榜樣

向導裝載法度榜樣平日是在任何硬件上履行的第一段代碼。在象臺式機這樣的老例系統中,平日將向導裝載法度榜樣裝入主向導記錄(Master Boot Record,(MBR))中,或者裝入 Linux 駐留的磁盤的第一個扇區中。平日,在臺式機或其它系統上,BIOS 將節制移交給向導裝載法度榜樣。這就提出了一個有趣的問題:誰將向導裝載法度榜樣裝入(在大年夜多半環境中)沒有 BIOS 的嵌入式設備上呢?

辦理這個問題有兩種老例技巧:專用軟件和微小的向導代碼(tiny bootcode)。

專用軟件可以直接與遠程系統上的閃存設備進行交互并將向導裝載法度榜樣安裝在閃存的給定位置中。閃存設備是與存儲設備功能類似的特殊芯片,而且它們能持久存儲信息 — 即,在從新向導時不會擦除其內容。

這個軟件應用目標(在嵌入式開拓中,嵌入式設備平日被稱為目標)上的 JTAG 端口,它是用于履行外部輸入(平日來自立機機械)的指令的接口。JFlash-linux 是一種用于直接寫閃存的盛行對象。它支持為數浩繁的閃存芯片;它在主機機械(平日是 i386 機械 — 本文中我們把一臺 i386 機械稱為主機)上履行并經由過程 JTAG 接口應用并行端口造訪目標的閃存芯片。當然,這意味著目標必要有一個并行接口使它能與主機通信。Jflash-linux 在 Linux 和 Windows 版本中都可應用,可以在敕令行頂用以下敕令啟動它:

Jflash-linux

某些種類的嵌入式設備具有微小的向導代碼 — 根據幾個字節的指令 — 它將初始化一些 DRAM 設置并啟用目標上的一個串行(或者 USB,或者以太網)端口與主機法度榜樣通信。然后,主機法度榜樣或裝入法度榜樣可以應用這個連接將向導裝載法度榜樣傳送到目標上,并將它寫入閃存。

在安裝它并給予其節制后,這個向導裝載法度榜樣履行下列種種功能:

·初始化 CPU 速率

·初始化內存,包括啟用內存庫、初始化內存設置設置設備擺設擺設寄存器等

·初始化串行端口(假如在目標上有的話)

·啟用指令/數據高速緩存

·設置客棧指針

·設置參數區域并構造參數布局和標記(這是緊張的一步,由于內核在標識根設備、頁面大年夜小、內存大年夜小以及更多內容時要應用向導參數)

·履行 POST(加電自檢)來標識存在的設備并申報任何問題

是以能夠從因特網上得到已預編譯的二進制文件是一件好事(但不太好的一點是,今朝它們大年夜多半只限于基于 ARM 的系統,但遲早會改變的)。一些對照盛行的已預編譯的對象鏈包括那些來自 Compaq(Familiar Linux )、LART(LART Linux)和 Embedian(基于 Debian 但與它無關)的對象鏈 — 所有這些對象鏈都用于基于 ARM 的平臺。

內核設置

Linux 社區正積極地為新硬件添加功能部件和支持、在內核中修正差錯并且及時地進行老例改進。這導致大年夜約每 6 個月(或 6 個月不到)就有一個穩定的 Linux 樹的新發行版。不合的掩護者掩護針對特定體系布局的不合內核樹和補丁。當為一個項目選擇了一個內核時,您必要評估最新發行版的穩定性若何、它是否相符項目請乞降硬件平臺、從編程角度來看它的舒適程度以及其它難以確定的方面。還有一點也異常緊張:找到必要利用于基礎內核的所有補丁,以便為特定的體系布局調劑內核。

內核結構

內核結構分為特定于體系布局的部分和與體系布局無關的部分。內核中特定于體系布局的部分首先履行,設置硬件寄存器、設置設置設備擺設擺設內存映射、履行特定于體系布局的初始化,然后將節制轉給內核中與體系布局無關的部分。系統的另外部分在這第二個階段時代進行初始化。內核樹下的目錄 arch/ 由不合的子目錄組成,每個子目任命于一個不合的體系布局(MIPS、ARM、i386、SPARC、PPC 等)。每一個這樣的子目錄都包孕 kernel/ 和 mm/ 子目錄,它們包孕特定于體系布局的代碼來完成象初始化內存、設置 IRQ、啟用高速緩存、設置內核頁面表等操作。一旦裝入內核并給予其節制,就首先調用這些函數,然后初始化系統的另外部分。

根據可用的系統資本和向導裝載法度榜樣的功能,內核可以編譯成 vmlinux、Image 或 zImage。vmlinux 和 zImage 之間的主要差別在于 vmlinux 是實際的(未壓縮的)可履行文件,而 zImage 是或多或少包孕相同信息的自解壓壓縮文件金冠游戲 — 只是壓縮它以處置懲罰(平日是 Intel 強制的)640 KB 向導光陰的限定。有關所有這些的勢力巨子性解釋,請參閱 Linux Magazine 的文章“Kernel Configuration: dealing with the unexpected”(請參閱參考資料)。

LMA 是裝入模塊地址;它表示將要裝入內核的目標虛擬內存中的地址。TEXTADDR 是內核的虛擬肇端地址,并且在 arch// 下的 Makefile 中指定它的值。這個地址必須與向導裝載法度榜樣應用的地址相匹配。

一旦向導裝載法度榜樣將內核復制到閃存或 DRAM 中,內核就被從新定位到 TEXTADDR — 它平日在 DRAM 中。然后,向導裝載法度榜樣將節制轉給這個地址,以便內核能開始履行。

參數通報和內核向導

stext 是內核進口點,這意味著在內核向導時將首先履行這一節下的代碼。它平日用匯編說話編寫,并且平日它在 arch// 內核目錄下。這個代碼設置內核頁面貌錄、創建身份內核映射、標識體系布局和處置懲罰器以及履行分支 start_kernel(初始化系統的主例程)。

start_kernel 調用 setup_arch 作為履行的第一步,在此中完成特定于體系布局的設置。這包括初始化硬件寄存器、標識根設備和系統中可用的 DRAM 和閃存的數量、指定系統中可用頁面的數目、文件系統大年夜小等等。所有這些信息都以參數形式從向導裝載法度榜樣通報到內核。

將參數從向導裝載法度榜樣通報到內核有兩種措施:parameter_structure 和標記列表。在這兩種措施中,不同意應用參數布局,由于它強加了限定:指定在內存中,每個參數必須位于 param_struct 中的特定偏移量處。最新的內核期望參數作為標記列表的款式來通報,并將參數轉化為已標記款式。param_struct 定義在 include/asm/setup.h 中。它的一些緊張字段是:

清單 3. 樣本參數布局struct param_struct {

unsigned long page_size; /* 0: Size of the page */

unsigned long nr_pages; /* 4: Number of pages in the system */

unsigned long ramdisk /* 8: ramdisk size */

unsigned long rootdev; /* 16: Number representing the root device */

unsigned long initrd_start; /* 64:金冠游戲 starting address of initial ramdisk */

/* This can be either in flash/dram */

unsigned long initrd_size; /* 68: size of initial ramdisk */

}

設備驅動法度榜樣

嵌入式系統平日有許多設備用于與用戶交互,象觸摸屏、小鍵盤、滾動輪、傳感器、RA232 接口、LCD 等等。除了這些設備外,還有許多其它專用設備,包括閃存、USB、GSM 等。內核經由過程所有這些設備各自的設備驅動法度榜樣來節制它們,包括 GUI 用戶利用法度榜樣也經由過程造訪這些驅動法度榜樣來造訪設備。本節著重評論爭論平日險些在每個嵌入式情況中都邑應用的一些緊張設備的設備驅動法度榜樣。

幀緩沖區驅動法度榜樣

這是最緊張的驅動法度榜樣之一,由于經由過程這個驅動法度榜樣才能使系統屏幕顯示內容。幀緩沖區驅動法度榜樣平日有三層。最底層是基礎節制臺驅動法度榜樣 drivers/char/console.c,它供給了文本節制臺老例接口的一部分。經由過程應用節制臺驅動法度榜樣函數,我們能將文本打印到屏幕上 — 但圖形或動畫還不能(這樣做必要應用視頻模式功能,平日呈現在中心層,也便是 drivers/video/fbcon.c 中)。這個第二層驅動法度榜樣供給了視頻模式中繪圖的老例接口。

幀緩沖區是顯卡上的內存,必要將它內存映射到用戶空間以便可以將圖形和文本能寫到這個內存段上:然后這個信息將反應到屏幕上。幀緩沖區支持前進了繪圖的速率和整體機能。這也是頂層驅動法度榜樣惹人留意之處:頂層是異常特定于硬件的驅動法度榜樣,它必要支持顯卡不合的硬件方面 — 象啟用/禁用顯卡節制器、深度和模式的支持以及調色板等。所有這三層都互相依附以實現精確的視頻功能。與幀緩沖區有關的設備是 /dev/fb0(主設備號 29,次設備號 0)。

輸入設備驅動法度榜樣

可觸摸板是用于嵌入式設備的最基礎的用戶交互設備之一 — 小鍵盤、傳感器和滾動輪也包孕在許多不合設備中以用于不合的用途。

觸摸板設備的主要功能是隨時申報用戶的觸摸,并標識觸摸的坐標。這平日在每次發生觸摸時,經由過程天生一其中斷來實現。

有兩個盛行的用戶模塊可啟用對閃存的造訪: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 的簡單閃存設備分區struct mtd_partition sample_partition = {

{

/* First partition */

name : bootloader, /* Bootloader section */

size : 0x00010000, /* Size */

offset : 0, /* Offset from start of flash- location 0x0*/金冠游戲

mask_flags : MTD_WRITEABLE /* This partition is not writable */

},

{ /* Second partition */

name : Kerne金冠游戲l, /* Kernel section */

size : 0x00100000, /* Size */

offset : MTDPART_OFS_APPEND, /* Append after bootloader section */

mask_flags : MTD_WRITEABLE /* This partition is not writa金冠游戲ble */

},

{ /* Third partition */

name : JFFS2, /* JFFS2 filesystem */

size : MTDPART_SIZ_FULL, /* Occupy rest of flash */

offset : MTDPART_OFS_APPEND /* Append after kernel section */

}

}

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

河北十一选五开奖的 qq游戏陕西麻将外挂 西宁小姐上门服务 快乐扑克 3d总汇图谜 篮网对开拓者 江苏时时彩 有你的校园 足球比分网90vs 东商期货配资 彩票河内五分彩开奖 爵士vs马刺今天那里有直播 日本女优mode面膜 吉泽明步在线观看亚洲 山东11选5玩法 俺去也黄色片 直播国王vs