嵌入式設備上的Linux 系統開發 - 藍色情懷
文章推薦指數: 80 %
嵌入式設備上的Linux 系統開發Anand K Santhanam, 軟件工程師, IBM Global ServicesVishal Kulkarni, 軟件工程師, IBM Global Se.
藍色情懷
跳到主文
歡迎光臨藍色情懷在痞客邦的小天地
部落格全站分類:數位生活
相簿
部落格
留言
名片
Mar02Sat200207:13
嵌入式設備上的Linux系統開發
嵌入式設備上的Linux系統開發AnandKSanthanam,軟件工程師,IBMGlobalServicesVishalKulkarni,軟件工程師,IBMGlobalServices如果您剛接觸嵌入式開發,那麼大量可用的引導裝載程序(bootloader)、規模縮小的分發版
(distribution)、文件系統和GUI
看起來可能太多了。
但是這些豐富的選項實際上是一種恩賜,允許您調整開發或用戶環境以完全符合您的需要。
對Linux
嵌入式開發的概述將幫助您理解所有這些選項。
Linux正在嵌入式開發領域穩步發展。
因為Linux使用GPL(請參閱本文後面的
參考資料),
所以任何對將Linux定製於PDA、掌上機或者可佩帶設備感興趣的人都可以從因特網免費下載其內核和應用程序,並開始移植或開發。
許多
Linux改良品種迎合了嵌入式/實時市場。
它們包括RTLinux(實時Linux)、uclinux(用於非MMU設備的
Linux)、MontavistaLinux(用於ARM、MIPS、PPC的Linux分發版)、ARM-Linux(ARM上的
Linux)和其它Linux系統(請參閱參考資料以鏈接到本文中提到的這些和其它術語及產品。
)
嵌
入式Linux開發大致涉及三個層次:引導裝載程序、Linux內核和圖形用戶界面(或稱
GUI)。
在本文中,我們將集中討論涉及這三層的一些基本概念;深入了解引導裝載程序、內核和文件系統是如何交互的;並將研究可用於文件系統、GUI
和引導裝載程序的眾多選項中的一部分。
引導裝載程序引
導裝載程序通常是在任何硬件上執行的第一段代碼。
在象台式機這樣的常規系統中,通常將引導裝載程序裝入主引導記錄(MasterBoot
Record,(MBR))中,或者裝入Linux駐留的磁盤的第一個扇區中。
通常,在台式機或其它系統上,BIOS
將控制移交給引導裝載程序。
這就提出了一個有趣的問題:誰將引導裝載程序裝入(在大多數情況中)沒有BIOS的嵌入式設備上呢?解決這個問題有兩種常規技術:專用軟件和微小的引導代碼(tinybootcode)。
專用軟件可以直接與遠程系統上的閃存設備進行交互並將引導裝載程序安裝在閃存的給定位置中。
閃存設備是與存儲設備功能類似的特殊芯片,而且它們能持久存儲信息─即,在重新引導時不會擦除其內容。
這個軟件使用目標(在嵌入式開發中,嵌入式設備通常被稱為
目標)上的JTAG端口,它是用於執行外部輸入(通常來自主機機器)的指令的接口。
JFlash-linux是一種用於直接寫閃存的流行工具。
它支持為數眾多的閃存芯片;它在主機機器(通常是i386機器─本文中我們把一台i386機器稱為
主機)上執行並通過JTAG接口使用並行端口訪問目標的閃存芯片。
當然,這意味著目標需要有一個並行接口使它能與主機通信。
Jflash-linux在Linux和Windows版本中都可使用,可以在命令行中用以下命令啟動它:
Jflash-linux某些種類的嵌入式設備具有
微小的引導代碼─根據幾個字節的指令─它將初始化一些DRAM設置並啟用目標上的一個串行(或者USB,或者以太網)端口與主機程序通信。
然後,主機程序或裝入程序可以使用這個連接將引導裝載程序傳送到目標上,並將它寫入閃存。
在安裝它並給予其控制後,這個引導裝載程序執行下列各類功能:初始化CPU速度初始化內存,包括啟用內存庫、初始化內存配置寄存器等初始化串行端口(如果在目標上有的話)啟用指令/數據高速緩存設置堆棧指針設置參數區域並構造參數結構和標記(這是重要的一步,因為內核在標識根設備、頁面大小、內存大小以及更多內容時要使用引導參數)執行POST(加電自檢)來標識存在的設備並報告任何問題為電源管理提供掛起/恢復支持跳轉到內核的開始帶有引導裝載程序、參數結構、內核和文件系統的系統典型內存布局可能如下所示:清單1.典型內存布局/*TopOfMemory*/BootloaderParameterAreaKernelFilesystem/*EndOfMemory*/嵌入式設備上一些流行的並可免費使用的Linux引導裝載程序有Blob、Redboot和Bootldr(請參閱
參考資料獲得鏈接)。
所有這些引導裝載程序都用於基於ARM設備上的Linux,並需要Jflash-linux工具用於安裝。
一旦將引導裝載程序安裝到目標的閃存中,它就會執行我們上面提到的所有初始化工作。
然後,它準備接收來自主機的內核和文件系統。
一旦裝入了內核,引導裝載程序就將控制轉給內核。
設置工具鏈設置工具鏈在主機機器上創建一個用於編譯將在目標上運行的內核和應用程序的構建環境─這是因為目標硬件可能沒有與主機兼容的二進制執行級別。
工具鏈由一套用於編譯、彙編和鏈接內核及應用程序的組件組成。
這些組件包括:Binutils─用於操作二進制文件的實用程序集合。
它們包括諸如
ar、
as、
objdump、
objcopy這樣的實用程序。
Gcc─GNUC編譯器。
Glibc─所有用戶應用程序都將鏈接到的C庫。
避免使用任何C庫函數的內核和其它應用程序可以在沒有該庫的情況下進行編譯。
構建工具鏈建立了一個交叉編譯器環境。
本地編譯器編譯與本機同類的處理器的指令。
交叉編譯器運
行在某一種處理器上,卻可以編譯另一種處理器的指令。
重頭設置交叉編譯器工具鏈可不是一項簡單的任務:它包括下載源代碼、修補補丁、配置、編譯、設置頭文
件、安裝以及很多很多的操作。
另外,這樣一個徹底的構建過程對內存和硬盤的需求是巨大的。
如果沒有足夠的內存和硬盤空間,那麼在構建階段由於相關性、配置
或頭文件設置等問題會突然冒出許多問題。
因此能夠從因特網上獲得已預編譯的二進制文件是一件好事(但不太好的一點是,目前它們大多數只限於基於ARM
的系統,但遲早會改變的)。
一些比較流行的已預編譯的工具鏈包括那些來自Compaq(FamiliarLinux)、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強制的)640KB引導時間的限制。
有關所有這些的權威性解釋,請參閱
LinuxMagazine的文章「KernelConfiguration:dealingwiththeunexpected」(請參閱
參考資料)。
內核鏈接和裝入一
旦為目標系統編譯了內核後,通過使用引導裝載程序(它已經被裝入到目標的閃存中),內核就被裝入到目標系統的內存(在DRAM
中或者在閃存中)。
通過使用串行、USB或以太網端口,引導裝載程序與主機通信以將內核傳送到目標的閃存或DRAM
中。
在將內核完全裝入目標後,引導裝載程序將控制傳遞給裝入內核的地址。
內核可執行文件由許多鏈接在一起的對象文件組成。
對象文件有許多節,如文本、數據、init數據、bass等等。
這些對象文件都是由一個稱為
鏈接器腳本的文件鏈接並裝入的。
這個鏈接器腳本的功能是將輸入對象文件的各節映射到輸出文件中;換句話說,它將所有輸入對象文件都鏈接到單一的可執行文件中,將該可執行文件的各節裝入到指定地址處。
vmlinux.lds是存在於arch//目錄中的內核鏈接器腳本,它負責鏈接內核的各個節並將它們裝入內存中特定偏移量處。
典型的vmlinux.lds看起來像這樣:
清單2.典型的vmlinux.lds文件OUTPUT_ARCH()/*includesarchitecturetype*/ENTRY(stext)/*stextisthekernelentrypoint*/SECTIONS/*SECTIONScommanddescribesthelayoutoftheoutputfile*/{.=TEXTADDR;/*TEXTADDRisLMAforthekernel*/.init:{/*Initcodeanddata*/_stext=.;/*Firstsectionisstextfollowedby__initdatasection*/__init_begin=.;*(.text.init)__init_end=.;}.text:{/*Realtextsegmentfollows__init_datasection*/_text=.;*(.text)_etext=.;/*Endoftextsection*/}.data:{_data=.;/*Datasectioncomesaftertextsection*/*(.data)_edata=.;}/*Datasectionendshere*/.bss:{/*BSSsectionfollowssymboltablesection*/__bss_start=.;*(.bss)_end=.;/*BSSsectionendshere*/}}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.樣本參數結構structparam_struct{unsignedlongpage_size;/*0:Sizeofthepage*/unsignedlongnr_pages;/*4:Numberofpagesinthesystem*/unsignedlongramdisk/*8:ramdisksize*/unsignedlongrootdev;/*16:Numberrepresentingtherootdevice*/unsignedlonginitrd_start;/*64:startingaddressofinitialramdisk*//*Thiscanbeeitherinflash/dram*/unsignedlonginitrd_size;/*68:sizeofinitialramdisk*/}請注意:這些數表示定義字段的參數結構中的偏移量。
這意
味著如果引導裝載程序將參數結構放置在地址0xc0000100,那麼rootdev參數將放置在0xc0000100+
16,initrd_start將放置在0xc0000100+64等等─否則,內核將在解釋正確的參數時遇到困難。
正如上
面提到的,因為從引導裝載程序到內核的參數傳遞會有一些約束條件,所以大多數2.4.x
系列內核期望參數以已標記的列表格式傳遞。
在已標記的列表中,每個標記由標識被傳遞參數的tag_header
以及其後的參數值組成。
標記列表中標記的常規格式可以如下所示:清單4.樣本標記格式。
內核通過頭來標識每個標記。
#definestruct{u32;u32;};/*Exampletagforpassingmemoryinformation*/#defineATAG_MEM0x54410002/*Magicnumber*/structtag_mem32{u32size;/*sizeofmemory*/u32start;/*physicalstartaddressofmemory*/};setup_arch還需要對閃存存儲庫、系統寄存器和其它特定設備執行內存映射。
一旦完成了特定於體系結構的設置,控制就返回到初始化系統其餘部分的start_kernel函數。
這些附加的初始化任務包含:
設置陷阱初始化中斷初始化計時器初始化控制台調用
mem_init,它計算各種區域、高內存區等內的頁面數量
初始化slab分配器並為VFS、緩衝區高速緩存等創建slab高速緩存建立各種文件系統,如proc、ext2和JFFS2創建
kernel_thread,它執行文件系統中的init命令並顯示lign提示符。
如果在/bin、/sbin或/etc中沒有init程序,那麼內核將執行文件系統的/bin中的shell。
設備驅動程序嵌入式系統通常有許多設備
用於與用戶交互,象觸摸屏、小鍵盤、滾動輪、傳感器、RA232接口、LCD
等等。
除了這些設備外,還有許多其它專用設備,包括閃存、USB、GSM等。
內核通過所有這些設備各自的設備驅動程序來控制它們,包括GUI
用戶應用程序也通過訪問這些驅動程序來訪問設備。
本節著重討論通常幾乎在每個嵌入式環境中都會使用的一些重要設備的設備驅動程序。
幀緩衝區驅動程序這
是最重要的驅動程序之一,因為通過這個驅動程序才能使系統屏幕顯示內容。
幀緩衝區驅動程序通常有三層。
最底層是基本控制台驅動程序
drivers/char/console.c,它提供了文本控制台常規接口的一部分。
通過使用控制台驅動程序函數,我們能將文本打印到屏幕上─
但圖形或動畫還不能(這樣做需要使用視頻模式功能,通常出現在中間層,也就是drivers/video/fbcon.c
中)。
這個第二層驅動程序提供了視頻模式中繪圖的常規接口。
幀緩衝區是顯卡上的內存,需要將它內存映射到用戶空間以便可以將圖形和文本能寫
到這個內存段上:然後這個信息將反映到屏幕上。
幀緩衝區支持提高了繪圖的速度和整體性能。
這也是頂層驅動程序引人注意之處:頂層是非常特定於硬件的驅動程
序,它需要支持顯卡不同的硬件方面─
象啟用/禁用顯卡控制器、深度和模式的支持以及調色板等。
所有這三層都相互依賴以實現正確的視頻功能。
與幀緩衝區有關的設備是
/dev/fb0(主設備號29,次設備號0)。
輸入設備驅動程序可觸摸板是用於嵌入式設備的最基本的用戶交互設備之一─小鍵盤、傳感器和滾動輪也包含在許多不同設備中以用於不同的用途。
觸摸板設備的主要功能是隨時報告用戶的觸摸,並標識觸摸的坐標。
這通常在每次發生觸摸時,通過生成一個中斷來實現。
然後,這個設備驅動程序的角色是每當出現中斷時就查詢觸摸屏控制器,並請求控制器發送觸摸的坐標。
一旦驅動程序接收到坐標,它就將有關觸摸和任何可用數據的信號發送給用戶應用程序,並將數據發送給應用程序(如果可能的話)。
然後用戶應用程序根據它的需要處理數據。
幾乎所有輸入設備─包括小鍵盤─都以類似原理工作。
閃存MTD驅動程序MTD設備是象閃存芯片、小型閃存卡、記憶棒等之類的設備,它們在嵌入式設備中的使用正在不斷增長。
MTD
驅動程序是在Linux下專門為嵌入式環境開發的新的一類驅動程序。
相對於常規塊設備驅動程序,使用MTD驅動程序的主要優點在於MTD
驅動程序是專門為基於閃存的設備所設計的,所以它們通常有更好的支持、更好的管理和基於扇區的擦除和讀寫操作的更好的接口。
Linux下的MTD
驅動程序接口被劃分為兩類模塊:用戶模塊和硬件模塊。
用戶模塊這些模塊提供從用戶空間直接使用的接口:原始字符訪
問、原始塊訪問、FTL(閃存轉換層,FlashTransitionLayer─用在閃存上的一種文件系統)和
JFS(即日誌文件系統,JournaledFileSystem─在閃存上直接提供文件系統而不是模擬塊設備)。
用於閃存的JFS
的當前版本是JFFS2(稍後將在本文中描述)。
硬件模塊這些模塊提供對內存設備的物理訪問,但並不直接使用它們。
通過上述的用戶模塊來訪問它們。
這些模塊提供了在閃存上讀、擦除和寫操作的實際例程。
MTD驅動程序設置為了訪問特定的閃存設備並將文件系統置於其上,需要將MTD子系統編譯到內核中。
這包括選擇適當的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的簡單閃存設備分區structmtd_partitionsample_partition={{/*Firstpartition*/name:bootloader,/*Bootloadersection*/size:0x00010000,/*Size*/offset:0,/*Offsetfromstartofflash-location0x0*/mask_flags:MTD_WRITEABLE/*Thispartitionisnotwritable*/},{/*Secondpartition*/name:Kernel,/*Kernelsection*/size:0x00100000,/*Size*/offset:MTDPART_OFS_APPEND,/*Appendafterbootloadersection*/mask_flags:MTD_WRITEABLE/*Thispartitionisnotwritable*/},{/*Thirdpartition*/name:JFFS2,/*JFFS2filesystem*/size:MTDPART_SIZ_FULL,/*Occupyrestofflash*/offset:MTDPART_OFS_APPEND/*Appendafterkernelsection*/}}上面的分區表使用了
MTD_BLOCK接口對閃存設備進行分區。
這些分區的設備節點是:
簡單閃存分區的設備節點UserdevicenodeMajornumberMinornumberBootloader/dev/mtdblock0310Kernel/dev/mtdblock1311Filesystem/dev/mtdblock2312在本例中,引導裝載程序必須將有關root設備節點(/dev/mtdblock2)和可以在閃存中找到文件系統的地址(本例中是
FLASH_BASE_ADDRESS+0x04000000)的正確參數傳遞到內核。
一旦完成分區,閃存設備就準備裝入或掛裝文件系統。
Linux中MTD子系統的主要目標是在系統的硬件驅動程序和上層,或用戶模塊之間提供通用接口。
硬件驅動程序不需要知道象JFFS2和FTL那樣的用戶模塊使用的方法。
所有它們真正需要提供的就是一組對底層閃存系統進行
read、
write和
erase操作的簡單例程。
嵌入式設備的文件系統
系統需要一種以結構化格式存儲和檢索信息的方法;這就需要文件系統的參與。
Ramdisk(請參閱
參考資料)是通過將計算機的RAM用作設備來創建和掛裝文件系統的一種機制,它通常用於無盤系統(當然包括微型嵌入式設備,它只包含作為永久存儲媒質的閃存芯片)。
用戶可以根據可靠性、健壯性和/或增強的功能的需求來選擇文件系統的類型。
下一節將討論幾個可用選項及其優缺點。
第二版擴展文件系統(Ext2fs)
Ext2fs是Linux事實上的標準文件系統,它已經取代了它的前任─擴展文件系統(或Extfs)。
Extfs支持的文件大小最大為
2GB,支持的最大文件名稱大小為255個字符─而且它不支持索引節點(包括數據修改時間標記)。
Ext2fs做得更好;它的優點是:
Ext2fs支持達4TB的內存。
Ext2fs文件名稱最長可以到1012個字符。
當創建文件系統時,管理員可以選擇邏輯塊的大小(通常大小可選擇1024、2048和4096字節)。
Ext2fs了實現快速符號鏈接:不需要為此目的而分配數據塊,並且將目標名稱直接存儲在索引節點(inode)表中。
這使性能有所提高,特別是在速度上。
因為Ext2文件系統的穩定性、可靠性和健壯性,所以幾乎在所有基於Linux的系統(包括台式機、服務器和工作站─並且甚至一些嵌入式設備)上都使用Ext2文件系統。
然而,當在嵌入式設備中使用Ext2fs時,它有一些
缺點:
Ext2fs是為象IDE設備那樣的塊設備設計的,這些設備的邏輯塊大小是512字節,1K字節等這樣的倍數。
這不太適合於扇區大小因設備不同而不同的閃存設備。
Ext2
文件系統沒有提供對基於扇區的擦除/寫操作的良好管理。
在Ext2fs中,為了在一個扇區中擦除單個字節,必須將整個扇區複製到
RAM,然後擦除,然後重寫入。
考慮到閃存設備具有有限的擦除壽命(大約能進行100,000
次擦除),在此之後就不能使用它們,所以這不是一個特別好的方法。
在出現電源故障時,Ext2fs不是防崩潰的。
Ext2文件系統不支持損耗平衡,因此縮短了扇區/閃存的壽命。
(損耗平衡確保將地址範圍的不同區域輪流用於寫和/或擦除操作以延長閃存設備的壽命。
)Ext2fs沒有特別完美的扇區管理,這使設計塊驅動程序十分困難。
由於這些原因,通常相對於Ext2fs,在嵌入式環境中使用MTD/JFFS2組合是更好的選擇。
用Ramdisk掛裝Ext2fs通過使用Ramdisk的概念,可以在嵌入式設備中創建並掛裝Ext2文件系統(以及用於這一目的的任何文件系統)。
清單6.創建一個簡單的基於Ext2fs的Ramdiskmke2fs-vm0/dev/ram4096mount-text2/dev/ram/mntcd/mntcp/bin,/sbin,/etc,/dev...filesinmntcd../umount/mntddif=/dev/rambs=1kcount=4096of=ext2ramdiskmke2fs是用於在任何設備上創建ext2文件系統的實用程序—它創建超級塊、索引節點以及索引節點表等等。
在上面的用法中,
/dev/ram是上面構建有4096個塊的ext2文件系統的設備。
然後,將這個設備(
/dev/ram)掛裝在名為
/mnt的臨時目錄上並且複製所有必需的文件。
一旦複製完這些文件,就卸裝這個文件系統並且設備(
/dev/ram)的內容被轉儲到一個文件(ext2ramdisk)中,它就是所需的Ramdisk(Ext2文件系統)。
上面的順序創建了一個4MB的Ramdisk,並用必需的文件實用程序來填充它。
一些要包含在Ramdisk中的重要目錄是:/bin─保存大多數象
init、
busybox、
shell、文件管理實用程序等二進制文件。
/dev─包含用在設備中的所有設備節點
/etc─包含系統的所有配置文件
/lib─包含所有必需的庫,如libc、libdl等
日誌閃存文件系統,版本2(JFFS2)
瑞典的AxisCommunications開發了最初的JFFS,RedHat的DavidWoodhouse對它進行了改進。
第二個版本,JFFS2,作為用於微型嵌入式設備的原始閃存芯片的實際文件系統而出現。
JFFS2
文件系統是日誌結構化的,這意味著它基本上是一長列節點。
每個節點包含有關文件的部分信息─可能是文件的名稱、也許是一些數據。
相對於
Ext2fs,JFFS2因為有以下這些優點而在無盤嵌入式設備中越來越受歡迎:
JFFS2在扇區級別上執行閃存擦除/寫/讀操作要比Ext2文件系統好。
JFFS2
提供了比Ext2fs更好的崩潰/掉電安全保護。
當需要更改少量數據時,Ext2
文件系統將整個扇區複製到內存(DRAM)中,在內存中合併新數據,並寫回整個扇區。
這意味著為了更改單個字,必須對整個扇區(64
KB)執行讀/擦除/寫例程─這樣做的效率非常低。
要是運氣差,當正在DRAM
中合併數據時,發生了電源故障或其它事故,那麼將丟失整個數據集合,因為在將數據讀入DRAM後就擦除了閃存扇區。
JFFS2
附加文件而不是重寫整個扇區,並且具有崩潰/掉電安全保護這一功能。
這可能是最重要的一點:JFFS2是專門為象閃存芯片那樣的嵌入式設備創建的,所以它的整個設計提供了更好的閃存管理。
因為本文主要是寫關於閃存設備的使用,所以在嵌入式環境中使用JFFS2的
缺點很少:
當文件系統已滿或接近滿時,JFFS2會大大放慢運行速度。
這是因為垃圾收集的問題(更多信息,請參閱
參考資料)。
創建JFFS2文件系統在Linux下,用
mkfs.jffs2命令創建JFFS2文件系統(基本上是使用JFFS2的Ramdisk)。
清單7.創建JFFS2文件系統mkdirjffsfilecdjffsfile/*copyallthe/bin,/etc,/usr/bin,/sbin/binariesand/deventriesthatareneededforthefilesystemhere*//*TypethefollowingcommandunderjffsfiledirectorytocreatetheJFFS2Image*/./mkfs.jffs2-e0x40000-p-o../jffs.image上面顯示了mkfs.jffs2的典型用法。
-e選項確定閃存的擦除扇區大小(通常是64千字節)。
-p選項用來在映像的剩餘空間用零填充。
-o選項用於輸出文件,通常是JFFS2文件系統映像─在本例中是jffs.image。
一旦創建了JFFS2文件系統,它就被裝入閃存中適當的位置(引導裝載程序告知內核查找文件系統的地址)以便內核能掛裝它。
tmpfs
當Linux運行於嵌入式設備上時,該設備就成為功能齊全的單元,許多守護進程會在後台運行並生成許多日誌消息。
另外,所有內核日誌記錄機制,象
syslogd、dmesg和klogd,會在/var和/tmp
目錄下生成許多消息。
由於這些進程產生了大量數據,所以允許將所有這些寫操作都發生在閃存是不可取的。
由於在重新引導時這些消息不需要持久存儲,所以這個
問題的解決方案是使用tmpfs。
tmpfs是基於內存的文件系統,它主要用於減少對系統的不必要的閃存寫操作這一唯一目的。
因為tmpfs駐留在
RAM中,所以寫/讀/擦除的操作發生在RAM中而不是在閃存中。
因此,日誌消息寫入RAM
而不是閃存中,在重新引導時不會保留它們。
tmpfs還使用磁盤交換空間來存儲,並且當為存儲文件而請求頁面時,使用虛擬內存(VM)子系統。
tmpfs的
優點包括:
動態文件系統大小─文件系統大小可以根據被覆制、創建或刪除的文件或目錄的數量來縮放。
使得能夠最理想地使用內存。
速度─因為tmpfs駐留在RAM,所以讀和寫幾乎都是瞬時的。
即使以交換的形式存儲文件,I/O操作的速度仍非常快。
tmpfs的一個
缺點是當系統重新引導時會丟失所有數據。
因此,重要的數據不能存儲在tmpfs上。
掛裝tmpfs
諸如Ext2fs和JFFS2等大多數其它文件系統都駐留在底層塊設備之上,而tmpfs與它們不同,它直接位於VM上。
因而,掛裝tmpfs文件系統是很簡單的事:
清單8.掛裝tmpfs/*Entriesin/etc/rc.d/rc.sysinitforcreating/usingtmpfs*/#mount-ttmpfstmpfs/var-osize=512k#mkdir-p/var/tmp#mkdir-p/var/log#ln-s/var/tmp/tmp上面的命令將在/var上創建tmpfs並將tmpfs的最大大小限制為512K。
同時,tmp/和log/目錄成為tmpfs的一部分以便在RAM中存儲日誌消息。
如果您想將tmpfs的一個項添加到/etc/fstab,那麼它可能看起來像這樣:
tmpfs/vartmpfssize=32m00這將在/var上掛裝一個新的tmpfs文件系統。
圖形用戶界面(GUI)選項從用戶的觀
點來看,圖形用戶界面(GUI)是系統的一個最至關重要的方面:用戶通過GUI與系統進行交互。
所以GUI
應該易於使用並且非常可靠。
但它還需要是有內存意識的,以便在內存受限的、微型嵌入式設備上可以無縫執行。
所以,它應該是輕量級的,並且能夠快速裝入。
另一個要考慮的重要方面涉及許可證問題。
一些GUI分發版具有允許免費使用的許可證,甚至在一些商業產品中也是如此。
另一些許可證要求如果想將GUI合併入項目中則要支付版稅。
最
後,大多數開發人員可能會選擇XFree86,因為XFree86為他們提供了一個能使用他們喜歡的工具的熟悉環境。
但是市場上較新的
GUI,象CenturySoftware的Microwindows(Nano-X)和Trolltech的
QT/Embedded,與X在嵌入式Linux
的競技舞台中展開了激烈競爭,這主要是因為它們佔用很少的資源、執行的速度很快並且具有定製窗口構件的支持。
讓我們看一看這些選項中的每一個。
Xfree864.X(帶幀緩衝區支持的X11R6.4)XFree86
Project,Inc.是一家生產XFree86的公司,該產品是一個可以免費重複分發、開放源碼的XWindow系統。
X
Window系統(X11)為應用程序以圖形方式進行顯示提供了資源,並且它是UNIX和類UNIX
的機器上最常用的窗口系統。
它很小但很有效,它運行在為數眾多的硬件上,它對網絡透明並且有良好的文檔說明。
X11
為窗口管理、事件處理、同步和客戶機間通信提供強大的功能─並且大多數開發人員已經熟悉了它的
API。
它具有對內核幀緩衝區的內置支持,並佔用非常少的資源─這非常有助於內存相對較少的設備。
X服務器支持VGA和非VGA
圖形卡,它對顏色深度1、2、4、8、16和32提供支持,並對渲染提供內置支持。
最新的發行版是XFree864.1.0。
它的
優點包括:
幀緩衝區體系結構的使用提高了性能。
佔用的資源相對很小─大小在600K到700K字節的範圍內,這使它很容易在小型設備上運行。
非常好的支持:在線有許多文檔可用,還有許多專用於XFree86開發的郵遞列表。
XAPI非常適合擴展。
它的
缺點包括:
比最近出現的嵌入式GUI工具性能差。
此外,當與GUI中最新的開發─象專門為嵌入式環境設計的Nano-X或QT/Embedded─相比時,XFree86似乎需要更多的內存。
MicrowindowsMicrowindows是CenturySoftware的開放源代碼項目,設計用於帶小型顯示單元的微型設備。
它有許多針對現代圖形視窗環境的功能部件。
象X一樣,有多種平台支持Microwindows。
Microwindows體系結構是基於客戶機/服務器的並且具有分層設計。
最底層是屏幕和輸入設備驅動程序(關於鍵盤或鼠標)來與實際硬件交互。
在中間層,可移植的圖形引擎提供對線的繪製、區域的填充、多邊形、裁剪以及顏色模型的支持。
在
最上層,Microwindows支持兩種API:Win32/WinCEAPI實現,稱為Microwindows;另一種API與
GDK非常相似,它稱為Nano-X。
Nano-X用在Linux上。
它是象X的API,用於佔用資源少的應用程序。
Microwindows
支持1、2、4和8bpp(每像素的位數)的palletized顯示,以及8、16、24和32bpp
的真彩色顯示。
Microwindows還支持使它速度更快的幀緩衝區。
Nano-X服務器佔用的資源大約在100K到150K字節。
原始Nano-X應用程序的平均大小在30K到60K。
由於Nano-X是為有內存限制的低端設備設計的,所以它不像X那樣支持很多函數,因此它實際上不能作為微型X(Xfree864.1)的替代品。
可以在Microwindows上運行FLNX,它是針對Nano-X而不是X進行修改的FLTK(快速輕巧工具箱(FastLightToolkit))應用程序開發環境的一個版本。
本文中描述FLTK。
Nano-X的
優點包括:
與Xlib實現不同,Nano-X仍在每個客戶機上同步運行,這意味著一旦發送了客戶機請求包,服務器在為另一個客戶機提供服務之前一直等待,直到整個包都到達為止。
這使服務器代碼非常簡單,而運行的速度仍非常快。
佔用很小的資源Nano-X的
缺點包括:
聯網功能部件至今沒有經過適當地調整(特別是網絡透明性)。
還沒有太多現成的應用程序可用。
與X相比,Nano-X雖然近來正在加速開發,但仍沒有那麼多文檔說明而且沒有很好的支持,但這種情形會有所改變。
Microwindows上的FLTKAPIFLTK
是一個簡單但靈活的GUI工具箱,它在Linux世界中贏得越來越多的關注,它特別適用於佔用資源很少的環境。
它提供了您期望從GUI
工具箱中獲得的大多數窗口構件,如按鈕、對話框、文本框以及出色的「賦值器」選擇(用於輸入數值的窗口構件)。
還包括滑動器、滾動條、刻度盤和其它一些構
件。
針對MicrowindowsGUI引擎的FLTK的Linux版本被稱為FLNX。
FLNX
由兩個組件構成:Fl_Widget和FLUID。
Fl_Widget由所有基本窗口構件API
組成。
FLUID(快速輕巧的用戶界面設計器(FastLightUserInterfaceDesigner,FLUID))是用來產生
FLTK源代碼的圖形編輯器。
總的來說,FLNX是能用來為嵌入式環境創建應用程序的一個出色的UI構建器。
Fl_Widget佔用的資源大約是40K到48K,而FLUID(包括了每個窗口構件)大約佔用380K。
這些非常小的資源佔用率使Fl_Widget和FLUID在嵌入式開發世界中非常受歡迎。
優點包括:
習慣於在象Windows這樣已建立得較好的環境中開發基於GUI的應用程序的任何人都會非常容易地適應FLTK環境。
它的文檔包括一本十分完整且編寫良好的手冊。
它使用LGPL進行分發,所以開發人員可以靈活地發放他們應用程序的許可證。
FLTK是一個C++庫(Perl和Python綁定也可用)。
面向對象模型的選擇是一個好的選擇,因為大多數現代GUI環境都是面向對象的;這也使將編寫的應用程序移植到類似的API中變得更容易。
CenturySoftware的環境提供了幾個有用的工具,諸如ScreenToP和ViewML瀏覽器。
它的
缺點是:
普通的FLTK可以與X和WindowsAPI一同工作,而FLNX不能。
它與X的不兼容性阻礙了它在許多項目中的使用。
Qt/EmbeddedQt/Embedded
是Trolltech新開發的用於嵌入式Linux的圖形用戶界面系統。
Trolltech最初創建Qt作為跨平台的開發工具用於
Linux台式機。
它支持各種有UNIX特點的系統以及MicrosoftWindows。
KDE─最流行的Linux
桌面環境之一,就是用Qt編寫的。
Qt/Embedded以原始Qt為基礎,並做了許多出色的調整以適用於嵌入式環境。
Qt
Embedded通過QtAPI與LinuxI/O
設施直接交互。
那些熟悉並已適應了面向對象編程的人員將發現它是一個理想環境。
而且,面向對象的體系結構使代碼結構化、可重用並且運行快速。
與其它
GUI相比,QtGUI非常快,並且它沒有分層,這使得Qt/Embedded成為用於運行基於Qt的程序的最緊湊環境。
Trolltech
還推出了Qt掌上機環境(QtPalmtopEnvironment,俗稱Qpe)。
Qpe
提供了一個基本桌面窗口,並且該環境為開發提供了一個易於使用的界面。
Qpe包含全套的個人信息管理(PersonalInformation
Management(PIM))應用程序、因特網客戶機、實用程序等等。
然而,為了將Qt/Embedded或Qpe
集成到一個產品中,需要從Trolltech獲得商業許可證。
(原始Qt自版本2.2以後就可以根據GPL獲得。
)它的
優點包括:
面向對象的體系結構有助於更快地執行佔用很少的資源,大約800K抗鋸齒文本和混合視頻的像素映射它的
缺點是:
Qt/Embedded和Qpe只能在獲得商業許可證的情況下才能使用。
結束語嵌入式Linux
開發正迅速地發展著。
您必須學習並從引導裝載程序和分發版到文件系統和GUI
中的每一個事物的各種選項中作出選擇。
但是要感謝有這種選擇自由度以及非常活躍的Linux社區,Linux
上的嵌入式開發已經達到了新的境界,並且調整模塊以適合您的規範從未比現在更簡單。
這已經導致出現了許多時新的手持和微型設備作為開放盒,這是件好事
─因為事實是您不必成為一個專家從這些模塊中進行選擇來調整您的設備以滿足您自己的要求和需要。
我們希望這篇對嵌入式Linux領域的介紹性概述能激起您進行試驗的慾望,並且希望您將體會擺弄微型設備的樂趣以滿足您的愛好。
為進一步有助於您的項目,請參閱下面的「參考資料」,鏈接到有關我們這裡已經概述的技術的更深入的信息。
參考資料引導:
您可以參閱本文在developerWorks全球站點上的
英文原文.
如需獲得對vmlinux和zimage之間區別的極好解釋,請在AlessandroRubini編寫的「
KernelConfiguration:dealingwiththeunexpected(
LinuxMagazine)的一文中找到「Bootingyourkernel」一節。
有關內核、映像和引導過程的更多信息,請閱讀
中央昆士蘭大學(CentralQueenslandUniversity)的系統管理文本的第13章。
小型分發版:
TheEmbeddedLinuxDistributionsQuickReferenceGuide涵蓋了許多商業的和開放源碼的分發版(
LinuxDevices,2001年8月)。
請查看另一個
詳盡的分發版和有用的工具的清單(
Linux-embedded.com)。
工具鏈:
Wiki工具鏈頁面包含到本文提到的所有三個工具鏈的鏈接,還有對它們的評論。
設備驅動程序:
MemoryTechnologyDevice(MTD)SubsystemforLinux的目的是簡化內存設備(特別是閃存設備)的驅動程序的創建。
VipinMalik編寫的
TheLinuxMTD,JFFSHOWTO將幫助您使MTD和JFFS2一起工作。
LinuxforPowerPCEmbeddedSystemsHOWTO有一個很好的設備驅動程序清單。
理解
Linuxdevicedrivers有助於理解本篇介紹性文章(
PenguinMagazine)。
要精通Linux設備驅動程序,請閱讀O'Reilly的
LinuxDeviceDrivers,第2版一書。
有用的工具:
請查看LART上的
Jflash-linux。
Binutils、
GCC和
Glibc都可從FreeSoftwareFoundation下載獲得。
許多有用的下載都可從
Netwinder.org獲得,這是一個致力於NetWinder平台上開發工作的志願者站點。
請在MarkNielsen寫得非常棒的
HowtouseaRamdiskforLinux一文中閱讀有關Ramdisk的所有信息。
FLNX是以FLTK(快速輕巧的工具箱)為基礎的。
文件系統:
第二版擴展文件系統
Ext2fs的主頁在SourceForge。
RedHat英國公司的DavidWoodhouse概述了大量有關
JFFS2:日誌閃存文件系統,第2版的背景知識。
您可以在LinuxHeadQuarters閱讀更多有關
tmpfs的信息。
CliffBrake和JeffSutherland編寫的
FlashFilesystemsforEmbeddedLinuxSystems一文論述了用於閃存設備的更多文件系統(
EmbeddedLinuxJournal)。
GUI:
Xfree86是
X開發的主頁。
請查看一篇對
Microwindows的一些缺點(GNOMEgtk開發人員的郵遞列表)的討論(時間比較長了)。
您將在
MicrowindowsProjectLinks上找到豐富的Microwindows/Nano-X鏈接。
在Trolltech上查找有關
Qt/Embedded的更多信息。
TheEmbeddedLinuxGUI/WindowingQuickReferenceGuide中有豐富的鏈接(
LinuxDevices,2002年2月)。
一般參考資料:
GeneralPublicLicense或GPL確保用戶複製、分發和修改軟件的權利。
ARMLinux是您了解有關Linux用於ARM處理器的信息的一個非常好的站點。
它由ARM的創建者RussellKing來維護。
Penguinppc.org是關於Linux用於PowerPC系列處理器的的主頁。
該站點上有一個關於為基於PPC的體系結構建立工具鏈的資料豐富的教程。
LinuxDevices是一個非常全面的站點,它包含有關Linux和嵌入式開發的出版發行、快速參考、新聞和特色報告等各種信息。
SiliconPenguin列表站點上擁有嵌入式Linux參考資料的詳盡集合。
ARMLinux-thebook可從AlephOne上獲得。
您可以定購一本,也可以
在線閱讀。
嵌入式Linux協會(EmbeddedLinuxConsortium)是一個非贏利的互助協會,它歡迎致力於嵌入式Linux領域的開發人員成為會員。
IBM的
Linuxwristwatch是運行Linux的微型嵌入式設備的示例;本文的作者之一,VishalKulkarni也參與了它的研發。
請在
本文(
FreeOS.com,2001年3月)中閱讀有關它的信息。
在
developerWorks上瀏覽
更多Linux參考資料。
在
developerWorks上瀏覽
更多無線領域的參考資料。
作者簡介Anand
KSanthanam在印度Madras大學獲得計算機科學工學學士學位。
自1999年7月以來他一直在印度為IBMGlobal
Services(軟件實驗室)工作。
他是IBMLinux小組的成員,這個小組主要致力於嵌入式系統中的
ARM-Linux、設備驅動程序和電源管理的研究和開發。
他感興趣的其它領域是O/S本質和聯網。
可以通過[email protected]與他聯繫。
Vishal
Kulkarni從印度Maharashtra的Shivaji大學獲得電子工程的學士學位。
自1999年3月以來他一直在印度為
IBMGlobalServices(軟件實驗室)工作。
在此之前,他曾在美國IBMAustin工作了一年半多。
他是IBMLinux
小組的成員,這個小組主要致力於嵌入式設備上的ARM-Linux、設備驅動程序和GUI。
他感興趣的其它領域是O/S本質和聯網。
可以通過[email protected]與他聯繫。
名詞釋義
何謂嵌入式系統?
根據英國電機工程師協會的定義,嵌入式系統為控制、監視或輔助設備、機器或甚至工廠運作的裝置。
它具備了下列的特性:
1.
通常執行特定功能,與一般桌上型辦公設備或資料庫伺服系統有很大的區別。
2.
以微電腦與周邊構成核心,其規模可由如8051單晶片到先進的x86晶片系統不等。
3.
嚴格的時序與穩定度要求,例如在機器控制上,稍有不慎則可能失去控制,釀成災害。
4.
全自動操作循環,例如斷電時的緊急處理,使覆電後仍能回覆原有的狀態。
嵌入式系統幾乎涵蓋所有微電腦控制的裝置,這些裝置的應用領域從汽車、飛機、火車、太空船、工具機、照相機、消費性及辦公室器具、手機、個人數位助理和其他手持式產品、到包括機器人和玩具等。
何謂ARM?
位
於英國劍橋區的ARM(AdvancedRISCMachines),是由1980年代後期,一家叫做Acorn
Computer的公司所分出來的,該公司專門研發RISC(精簡指令集)處理器和各種支援晶片。
Acron
Computer當時生產一款類似AppleII的個人電腦,稱之為BBMicro,並且在英國大為暢銷。
BBMicro和AppleII
一樣,使用8位元的6502CPU作為個人電腦的核心,緊接著Acron
Computer想要將處理器由8位元轉成32位元,並且以不犧牲現有設計的效率為前提來進行,以應用於下一代的個人電腦中,於是這顆處理器開始出貨,並
且以ARM2(代表AcronRISCMachine2)為名。
ARM2也成為Acron
Computer的一系列個人電腦的核心,雖然價格低廉但展現優秀的效能。
隨後Acron
Computer在ARM2中加入快取記憶體,以加速處理器的操作速度,便是ARM3。
此時蘋果電腦需要一顆體積小、省電及操作速度非常快,可應用於蘋果
電腦由電池啟動的產品Netwon上的處理器,ARM處理器吸引了蘋果電腦的注意,並且在1990年和Acron
Computer合資成立了ARM公司。
ARM公司的設計部門完全來自AcronComputer,並且在1991年2月僱用新的執行長Mr.
RobinSaxby
。
新公司開始著手設計ARM6的核心和有快取記憶體、寫入緩衝區及完整的記憶體管理單元的ARM610,並將自己定位於微處理器的研發,而不是跨足於晶片
製造,並採取技術授權的商業模式,此一模式從一開始就被證實非常成功。
ARM也投資在軟體工具上,生產為ARM
CPU所做的編譯器、組譯器及聯結器。
在1995年所發表的SDT2.0,ARM展示了具圖形使用者介面的計劃管理及偵錯者工具。
而ARM之前所大量投資的軟體工具,有一些也成為嵌入式世界的最佳工具。
由於ARM6的工作電壓微5伏特,ARM7支援在3V工作的操作方式和增加嵌入式的偵錯能力。
ARM7TDMI是以ARM7為發展基礎,其中包括一組額外的16位元指令集,用來改善已經非常精簡的程式碼,減少所需的記憶體空間。
自1995年ARM7TDMI
問世以來它一直是ARM賣的最好的產品,它的價格、工作效能、低的消耗功率和精簡的程式碼等也一直是市場上的領先者,也因此就成為ARM眾多競爭者所想要趕上的產品。
在以von
Neuman架構設計的ARM7之後,ARM嘗試以資料匯流排和位址匯流排分開的Havard
架構來進行新的設計。
在ARM的這個設計中,這些獨立匯流排的設計都連接到各自獨立的快取記憶體。
這種設計所增加的額外費用非常少,ARM8
便是以這種方法設計的CPU,之後的ARM9也很快的跟隨這個架構,並很快的成為ARM7的後繼者。
ARM
的技術和其他的競爭者有哪些不同呢?ARM的技術最主要的基本優勢應該是效率。
在ARM
處理器的核心中,每一個電晶體都是恰到好處的存在,並且提供高於其本身所花費用的利益。
反之,當其他的設計者面對各式各樣的需求時,或許會使用稍微快一些
但通常較多電晶體的設計方法時,ARM的設計者通常是尋找最折衷的方法來完成設計。
例如最初的ARM2會成為一個低耗電的CPU幾乎是個意外,在當時它的
速度不僅比Intel286和386
CPU來的快,並且也是當時市面上(如Z80)嵌入式CPU的技術領先者,但是它僅僅使用非常少的電晶體和非常簡單的內部邏輯。
-Back-
何謂ARM-Linux?
ARMLinux主要是由Russell
King和其他人的共同努力,將Linux作業系統成功的移植在以ARM處理器為核心的機器上。
以下Linux系統好處的敘述,是從Linux核心的檔案中摘錄:Linux
是UNIX的重新實作,由Linus
Torvalds在一群由網路上組織鬆散的駭客群的協助下,所共同完成的作業系統,它的目標為和UNIX的POSIX規格完全相容。
它具備有完整UNIX
所有的功能如多工處理、虛擬記憶體、程式庫共享、依需求載入執行檔、執行檔的共享式寫入時拷貝(copy-on-write)分頁機制、適當的記憶體管理
和TCP/IP網路。
它是在GNUGeneralPublicLicense
之下可自由的散佈。
由軟體自由協會所提供的GNU工具來完成的Linux核心和大部分的程式,所組成的Linux系統都是屬於開放源碼。
因為開放源碼,ARM
Linux便是在這種情況下,由世界許多的人和組織所不斷發展而成的。
ARM
Linux正在被移植或已經移植到超過100種以上的不同種類機器,包括個人電腦、網路電腦和發展工具。
也有以計劃的方式移植Linux到Palm上面和PDAs(如Geofox),如需更多資訊請參考文件頁。
何謂uCLnux?
uCLinux是Linux
2.0核心的分支,是針對沒有記憶體管理單元的微控制器。
uCLinux
包括什麼?
一份正式的uClinux
CD套件,會收到以RPM的格式存在,以方便安裝的uClinux二進位執行碼及原始碼。
除此之外,還有展示用的Eagle
CAD,一些已經完成uClinux
測試的元件資料及一份程式不大但所有功能正常的SuSE的5.3版套件,這片CD包括在Linux工作站發展所需的所有軟體。
Linux和uClinux的比較?
因
為uClinux是創造來支援沒有記憶體管理單元的微處理器,因此多工處理的能力變得很微妙。
絕大部分在uClinux上執行的應用程式,並不需要多工處
理的能力。
除此之外,大部分的二進制執行碼和原始碼都會被重新寫過以便更緊縮和減少程式碼,這意味著uClinux和Linux2.0的核心比起來將是非
常非常的小,小到只要保留Linux作業系統的穩定度,優越的網路能力和一優秀的檔案系統支援等主要優勢。
uClinux是一個網路的作業系統環境嗎?
UClinux仍具備有完整的TCP/IP能力,而且支援除TCP/IP外的多數其餘網路協定,可以說幾乎所有網路協定均可支援。
事實上,uClinux是一具備支援網路協定的作業系統,對嵌入式系統而言更是完美的選擇。
uClinux支援何種檔案系統?
NFS,
ext2,MS-DOS和FAT16/32是目前uClinux所能支援的少數檔案系統。
何處可取得uClinux的相關資料?
可以經由
https://www.uclinux.com/orderdesk/來訂購uClinux的正式版本,另一個選擇,則是因uClinux為開放原始碼的計劃,也可以直接下載原始碼。
為何要使用嵌入式Linux?
Linux
的能力、穩定性、彈性及scalability,再結合它所支援許多微處理機的架構、硬體設備、圖形支援和通信協定,建立了Linux逐漸成為受歡迎的軟
體平台,並被廣泛的應用在各種計劃和產品中。
Linux的使用可以延伸到計算性應用的一系列產品,從IBM微小的Linux腕表到手持式裝置(包括PDA
和手機)和消費性娛樂系統到資訊家電產品、簡易型電腦、防火牆、機器人、電話網路建設之設備等和如以群為主的超級電腦。
因為Linux以
開放的和自由的原始碼的形式存在,它的許多差異性和結構及支援的軟體零件是,都是Linux逐步調適和發展以滿足市場和各種應用所需的多變化需求。
有小的
程式核心版本和加強即時處理的版本,而儘管最初的Linux是PC架構的作業系統,現在的Linux已經可以架構在各種非x86的CPU上,而且在不論是
否具有記憶體管理單元的CPU,其中包括PowerPC,ARM,MIPS,68K和甚至微控制器上。
■推薦閱讀
1.嵌入式Linux的資源、技術核心與發展課題(EEdesign)
不像Wintel陣營的PC世界,嵌入式Linux的一個很大優勢是它支援多種處理器,而且由於形成一個壯大的開放社群,在這裡有豐富的套件及開發工具,
其中有的是自由軟體,有的是廠商開發的版本。
本文將對嵌入式Linux的資源做一介紹。
2.uClinux與Linux在ARM9式處理器上上的ContextSwitching和IPC效能比較(Linuxdevices)
本篇為uClinux與Linux在ARM9處理器上使用的比較報告白皮書,比較的項目是contextswitching的速度和IPC(inter-process
communication)的速度,這是Samsung在發展采用Linux式Miniket的多功能且不需硬碟camcorder時所做的報告,它的結果會讓你對uClinux的效能有全新的認識。
原文:《ContextSwitchingandIPCPerformanceComparisonbetween
uClinuxandLinuxontheARM9basedProcessor》
3.
Linux如何成為即時作業系統(Metrowerks)
今日的Linux核心標準和可下載的patches已包含許多功能及強化的效能,例如:強化的排程功能、虛擬記憶體、分享記憶體、POSIX
Timers/AsynchronousI/O/threads、QoS功能、即時訊號等等,在在皆讓Linux更適合用在即時產品的發展上頭,本文將介紹Linux的即時作業系統特色。
原文:《LinuxasaReal-TimeOperatingSystem》
4.
嵌入式設備上的Linux系統開發(IBM)
嵌入式Linux
開發大致涉及三個層次:引導裝載程式、Linux內核和圖形用戶介面(或稱
GUI)。
在本文中,我們將集中討論涉及這三層的一些基本概念;深入瞭解引導裝載程式、內核和文件系統是如何交互的;並將研究可用於文件系統、GUI
和引導裝載程式的眾多選項中的一部分。
5.
Smartphone系統整合技術(EEdesign)
Smartphone結合了手機和PDA的功能,設計上必須在成本和功能上做折衷,因此技術門檻很高。
在作業系統軟體方面,Microsoft
WindowsMobile和Symbian
OS是兩大主流。
此外,嵌入式Linux因為成本低廉,已是系統製造商為了降低成本,不得不採用的替代方案。
更多技術文章
1.uClinux如何為無MMU處理器提供一個新選擇(embedded.com)
原文:《HowuClinuxprovidesMMU-lessprocessors
withanalternative》
2.以Linux運作低成本、低功率的無MMU處理器
(Linuxdevices)
原文:《IRunningLinuxonlowcost,lowpower,MMU-lessprocessors》
3.熟悉uClinux/ARM2.6之系統開發(Samsung)
原文:《GettingFamiliarwithuClinux/ARM2.6》
4.CEO專訪:Arcturus的D.JeffDionne(uClinux推動者)(2004-02-04
/Linuxdevices)
原文:《CEOInterview:D.JeffDionneof
Arcturus(anduClinuxpioneer)》
5.可以執行多工作業的uClinux(2000-06-11
/Linuxdevices)
原文:《uClinuxDOESmulti-task》
6.uClinux式參考設計有助於匯流性設備設計 (2003-02-17/Linuxdevices)
原文:《uClinux-basedreferencedesign
aidsconvergencedevicedesigns》
■嵌入式Linux商用及開放軟體資源
商用套件
AMIRIX:EmbeddedLinux
ARM-Linux
Coollogic:Coollinux
Coventive:XLinux
Esfia:RedBlueLinux
K-Linux
KYZO:PizzaBoxLinux
Lineo:Embedix
LynuxWorks:BlueCat
MontaVista
RedHat:
EmbeddedLinux
RTLinux
TimeSysLinux
開放源碼計畫資源
EmbeddedDebianProject
AMSEL
EmbeddedGentoo
ETLinux
FREESCO
uClinux
muLinux
PeeWeeLinux
■其他好用資源
ARMLinux
這是瞭解有關Linux用於ARM處理器的資訊的一個非常好的網站。
它由ARM的創建者RussellKing來維護。
Penguinppc.org
這是關於Linux用於PowerPC系列處理器的的主頁。
該站上有一個關於為基於PPC的體系結構建立工具鏈的資料豐富的教程。
LinuxDevices
這是一個非常全面的網站,它包含有關Linux和嵌入式開發的出版發行、快速參考、新聞和特色報告等各種資訊。
SiliconPenguin
列表網站上擁有嵌入式Linux參考資料的詳盡集合。
ARMLinux-thebook
這書可從AlephOne上獲得。
您可以定購一本,也可以在線上閱讀。
嵌入式Linux協會(EmbeddedLinux
Consortium)
是一個非贏利的互助協會,它歡迎致力於嵌入式Linux領域的開發人員成為會員。
uClinux開發者論壇
uClinux/ARM2.6發展計畫
嵌入處理器和SoC的快速參考指南 (EmbeddedProcessorandSystem-on-ChipQuickReferenceGuide)
The
uClinuxDirectory
全站熱搜
創作者介紹
Bluelove1968
藍色情懷
Bluelove1968發表在痞客邦留言(0)人氣()
E-mail轉寄
全站分類:不設分類個人分類:嵌入式系統設計上一篇:四種即時作業系統的分析比較-LynxOS,QNX,RTLinux和KURT-Linux
下一篇:劉冠軍案扯出李登輝非法挪用35億黑錢 壹週刊內容摘要
▲top
留言列表
禁止留言
回到頁首
回到主文
免費註冊
客服中心
痞客邦首頁
©2003-2021PIXNET
關閉視窗
延伸文章資訊
- 1嵌入式Linux 系統開發教程 - 天瓏網路書店
書名:嵌入式Linux 系統開發教程,ISBN:7121293730,作者:華清遠見嵌入式學院,出版社:電子工業出版社,出版日期:2016-07-01,分類:嵌入式系統、Linux.
- 2艾鍗學院- 嵌入式Linux開發實務| 軟硬兼具
專業Embedded Linux嵌入式課程,全面提昇你的嵌入式技術能力!資深業界嵌入式工程師小班教學,深入淺出帶你了解如何建構一個完整的嵌入式系統,並能夠進行嵌入式軟硬體 ...
- 3Linux 嵌入式系統開發Unit 1 設定開發環境
WinFast310_V20100427.tgz,為WinFast310開發板所需Linux. 作業系統的BSP (Board Support Package) 和應用程式。 ➢ arm-iwm...
- 4嵌入式Linux系統實作:初心者開發設計專業方略 - 博客來
書名:嵌入式Linux系統實作:初心者開發設計專業方略,語言:繁體中文,ISBN:9789865004538,頁數:393,出版社:上奇資訊,作者:方元,出版日期:2020/02/21, ...
- 5Linux是什麼?從網站開發到物聯網無所不在的OS作業系統介紹。
而當中最重要的里程碑,就是在1991年,一名芬蘭大學生Linus Torvalds,就藉由GNU計劃的協助下,發展出了著名的Linux,一個讓大眾可以自由參與、集體協作的 ...