linux嵌入式設備
⑴ 什麼是嵌入式linux
嵌入式linux 是將日益流行的Linux操作系統進行裁剪修改,使之能在嵌入式計算機系統上運行的一種操作系統。嵌入式linux既繼承了Internet上無限的開放源代碼資源,又具有嵌入式操作系統的特性。
⑵ Linux和嵌入式Linux有什麼區別
Linux是一種自由和開放源碼的類Unix操作系統,存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。隨著微處理器的產生,價格低廉、結構小巧的CPU和外設連接提供了穩定可靠的硬體架構,那麼限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。
⑶ 在大多數linux發行版本中以下哪個屬於嵌入式網路設備
做嵌入式開發,推薦用Debian 9,RedHat 9,CentOS 7這3個版本,他們之間都差不多,Ubuntu在編譯qt的嵌入式版本的庫會有問題,而且GCC需要網路才能下載,如果沒有網路的情況,推薦在安裝的時候選開發組件哪裡選多點
⑷ 「干貨」嵌入式Linux系統移植的四大步驟(上)
在學習系統移植的相關知識,在學習和調試過程中,發現了很多問題,也解決了很多問題,但總是對於我們的開發結果有一種莫名其妙的感覺,糾其原因,主要對於我們的開發環境沒有一個深刻的認識,有時候幾個簡單的命令就可以完成非常復雜的功能,可是我們有沒有想過,為什麼會有這樣的效果?
如果沒有去追問,只是機械地完成,並且看到實驗效果,這樣做其實並沒有真正的掌握系統移植的本質。
在做每一個步驟的時候, 首先問問自己,為什麼要這樣做,然後再問問自己正在做什麼? 搞明白這幾個問題,我覺得就差不多了,以後不管更換什麼平台,什麼晶元,什麼開發環境,你都不會迷糊,很快就會上手。對於嵌入式的學習方法,我個人方法就是:從宏觀上把握(解決為什麼的問題),微觀上研究(解決正在做什麼的問題),下面以自己學習的arm-cortex_a8開發板為目標,介紹下自己的學習方法和經驗。
嵌入式Linux系統移植主要由四大部分組成:
一、搭建交叉開發環境
二、bootloader的選擇和移植
三、kernel的配置、編譯、和移植
四、根文件系統的製作
第一部分:搭建交叉開發環境
先介紹第一分部的內容:搭建交叉開發環境,首先必須得思考兩個問題,什麼是交叉環境? 為什麼需要搭建交叉環境?
先回答第一個問題,在嵌入式開發中,交叉開發是很重要的一個概念,開發的第一個環節就是搭建環境,第一步不能完成,後面的步驟從無談起,這里所說的交叉開發環境主要指的是:在開發主機上(通常是我的pc機)開發出能夠在目標機(通常是我們的開發板)上運行的程序。嵌入式比較特殊的是不能在目標機上開發程序(狹義上來說),因為對於一個原始的開發板,在沒有任何程序的情況下它根本都跑不起來,為了讓它能夠跑起來,我們還必須要藉助pc機進行燒錄程序等相關工作,開發板才能跑起來,這里的pc機就是我們說的開發主機,想想如果沒有開發主機,我們的目標機基本上就是無法開發,這也就是電子行業的一句名言:搞電子,說白了,就是玩電腦!
然後回答第二個問題,為什麼需要交叉開發環境?主要原因有以下幾點:
原因 1: 嵌入式系統的硬體資源有很多限制,比如cpu主頻相對較低,內存容量較小等,想想讓幾百MHZ主頻的MCU去編譯一個Linux kernel會讓我們等的不耐煩,相對來說,pc機的速度更快,硬體資源更加豐富,因此利用pc機進行開發會提高開發效率。
原因2: 嵌入式系統MCU體系結構和指令集不同,因此需要安裝交叉編譯工具進行編譯,這樣編譯的目標程序才能夠在相應的平台上比如:ARM、MIPS、 POWEPC上正常運行。
交叉開發環境的硬體組成主要由以下幾大部分 :
1.開發主機
2.目標機(開發板)
3.二者的鏈接介質,常用的主要有3種方式:(1)串口線 (2)USB線 (3)網線
對應的硬體介質,還必須要有相應的軟體「介質」支持:
1.對於串口,通常用的有串口調試助手,putty工具等,工具很多,功能都差不多,會用一兩款就可以;
2.對於USB線,當然必須要有USB的驅動才可以,一般晶元公司會提供,比如對於三星的晶元,USB下載主要由DNW軟體來完成;
3.對於網線,則必須要有網路協議支持才可以, 常用的服務主要兩個
第一:tftp服務:
主要用於實現文件的下載,比如開發調試的過程中,主要用tftp把要測試的bootloader、kernel和文件系統直接下載到內存中運行,而不需要預先燒錄到Flash晶元中,一方面,在測試的過程中,往往需要頻繁的下載,如果每次把這些要測試的文件都燒錄到Flash中然後再運行也可以,但是缺點是:過程比較麻煩,而且Flash的擦寫次數是有限的;另外一方面:測試的目的就是把這些目標文件載入到內存中直接運行就可以了,而tftp就剛好能夠實現這樣的功能,因此,更沒有必要把這些文件都燒錄到Flash中去。
第二: nfs服務:
主要用於實現網路文件的掛載,實際上是實現網路文件的共享,在開發的過程中,通常在系統移植的最後一步會製作文件系統,那麼這是可以把製作好的文件系統放置在我們開發主機PC的相應位置,開發板通過nfs服務進行掛載,從而測試我們製作的文件系統是否正確,在整個過程中並不需要把文件系統燒錄到Flash中去,而且掛載是自動進行掛載的,bootload啟動後,kernel運行起來後會根據我們設置的啟動參數進行自動掛載,因此,對於開發測試來講,這種方式非常的方便,能夠提高開發效率。
另外,還有一個名字叫 samba 的服務也比較重要,主要用於文件的共享,這里說的共享和nfs的文件共享不是同一個概念,nfs的共享是實現網路文件的共享,而samba實現的是開發主機上 Windows主機和Linux虛擬機之間的文件共享,是一種跨平台的文件共享 ,方便的實現文件的傳輸。
以上這幾種開發的工具在嵌入式開發中是必備的工具,對於嵌入式開發的效率提高做出了偉大的貢獻,因此,要對這幾個工具熟練使用,這樣你的開發效率會提高很多。等測試完成以後,就會把相應的目標文件燒錄到Flash中去,也就是等發布產品的時候才做的事情,因此對於開發人員來說,所有的工作永遠是測試。
通過前面的工作,我們已經准備好了交叉開發環境的硬體部分和一部分軟體,最後還缺少交叉編譯器,讀者可能會有疑問,為什麼要用交叉編譯器?前面已經講過,交叉開發環境必然會用到交叉編譯工具,通俗地講就是在一種平台上編譯出能運行在體系結構不同的另一種平台上的程序,開發主機PC平台(X86 CPU)上編譯出能運行在以ARM為內核的CPU平台上的程序,編譯得到的程序在X86 CPU平台上是不能運行的,必須放到ARM CPU平台上才能運行,雖然兩個平台用的都是Linux系統。相對於交叉編譯,平常做的編譯叫本地編譯,也就是在當前平台編譯,編譯得到的程序也是在本地執行。用來編譯這種跨平台程序的編譯器就叫交叉編譯器,相對來說,用來做本地編譯的工具就叫本地編譯器。所以要生成在目標機上運行的程序,必須要用交叉編譯工具鏈來完成。
這里又有一個問題,不就是一個交叉編譯工具嗎?為什麼又叫交叉工具鏈呢?原因很簡單,程序不能光編譯一下就可以運行,還得進行匯編和鏈接等過程,同時還需要進行調試,對於一個很大工程,還需要進行工程管理等等,所以,這里 說的交叉編譯工具是一個由 編譯器、連接器和解釋器 組成的綜合開發環境,交叉編譯工具鏈主要由binutils(主要包括匯編程序as和鏈接程序ld)、gcc(為GNU系統提供C編譯器)和glibc(一些基本的C函數和其他函數的定義) 3個部分組成。有時為了減小libc庫的大小,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。
那麼,如何得到一個交叉工具鏈呢?是從網上下載一個「程序」然後安裝就可以使用了嗎?回答這個問題之前先思考這樣一個問題,我們的交叉工具鏈顧名思義就是在PC機上編譯出能夠在我們目標開發平台比如ARM上運行的程序,這里就又有一個問題了,我們的ARM處理器型號非常多,難道有專門針對我們某一款的交叉工具鏈嗎?若果有的話,可以想一想,這么多處理器平台,每個平台專門定製一個交叉工具鏈放在網路上,然後供大家去下載,想想可能需要找很久才能找到適合你的編譯器,顯然這種做法不太合理,且浪費資源!因此,要得到一個交叉工具鏈,就像我們移植一個Linux內核一樣,我們只關心我們需要的東西,編譯我們需要的東西在我們的平台上運行,不需要的東西我們不選擇不編譯,所以,交叉工具鏈的製作方法和系統移植有著很多相似的地方,也就是說,交叉開發工具是一個支持很多平台的工具集的集合(類似於Linux源碼),然後我們只需從這些工具集中找出跟我們平台相關的工具就行了,那麼如何才能找到跟我們的平台相關的工具,這就是涉及到一個如何製作交叉工具鏈的問題了。
通常構建交叉工具鏈有如下三種方法:
方法一 : 分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。
方法二: 通過Crosstool-ng腳本工具來實現一次編譯,生成交叉編譯工具鏈,該方法相對於方法一要簡單許多,並且出錯的機會也非常少,建議大多數情況下使用該方法構建交叉編譯工具鏈。
方法三 : 直接通過網上下載已經製作好的交叉編譯工具鏈。該方法的優點不用多說,當然是簡單省事,但與此同時該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許並不適合你要編譯的程序,同時也許會在使用時出現許多莫名其妙的錯誤,建議讀者慎用此方法。
crosstool-ng是一個腳本工具,可以製作出適合不同平台的交叉編譯工具鏈,在進行製作之前要安裝一下軟體:
$ sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk
crosstool腳本工具可以在http://ymorin.is-a-geek.org/projects/crosstool下載到本地,然後解壓,接下來就是進行安裝配置了,這個配置優點類似內核的配置。主要的過程有以下幾點:
1. 設定源碼包路徑和交叉編譯器的安裝路徑
2. 修改交叉編譯器針對的構架
3. 增加編譯時的並行進程數,以增加運行效率,加快編譯,因為這個編譯會比較慢。
4. 關閉JAVA編譯器 ,減少編譯時間
5. 編譯
6. 添加環境變數
7. 刷新環境變數。
8. 測試交叉工具鏈
到此,嵌入式Linux系統移植四大部分的第一部分工作全部完成,接下來可以進行後續的開發了。
第二部分:bootloader的選擇和移植
01 Boot Loader 概念
就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬體設備、建立內存空間的映射圖,從而將系統的軟硬體環境帶到一個合適的狀態,以便為最終調用操作系統內核准備好正確的環境,他就是所謂的引導載入程序(Boot Loader)。
02 為什麼系統移植之前要先移植BootLoader?
BootLoader的任務是引導操作系統,所謂引導操作系統,就是啟動內核,讓內核運行就是把內核載入到內存RAM中去運行,那先問兩個問題:第一個問題,是誰把內核搬到內存中去運行?第二個問題:我們說的內存是SDRAM,大家都知道,這種內存和SRAM不同,最大的不同就是SRAM只要系統上電就可以運行,而SDRAM需要軟體進行初始化才能運行,那麼在把內核搬運到內存運行之前必須要先初始化內存吧,那麼內存是由誰來初始化的呢?其實這兩件事情都是由bootloader來乾的,目的是為內核的運行准備好軟硬體環境,沒有bootloadr我們的系統當然不能跑起來。
03 bootloader的分類
首先更正一個錯誤的說法,很多人說bootloader就是U-boot,這種說法是錯誤的,確切來說是u-boot是bootloader的一種。也就是說bootloader具有很多種類,
由上圖可以看出,不同的bootloader具有不同的使用范圍,其中最令人矚目的就是有一個叫U-Boot的bootloader,是一個通用的引導程序,而且同時支持X86、ARM和PowerPC等多種處理器架構。U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目,是由德國DENX小組開發的用於多種嵌入式CPU的bootloader程序,對於Linux的開發,德國的u-boot做出了巨大的貢獻,而且是開源的。
u-boot具有以下特點:
① 開放源碼;
② 支持多種嵌入式操作系統內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④ 較高的可靠性和穩定性;
⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統不同引導要求、產品發布等;
⑥ 豐富的設備驅動源碼,如串口、乙太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發調試文檔與強大的網路技術支持;
其實,把u-boot可以理解為是一個小型的操作系統。
04 u-boot的目錄結構
* board 目標板相關文件,主要包含SDRAM、FLASH驅動;
* common 獨立於處理器體系結構的通用代碼,如內存大小探測與故障檢測;
* cpu 與處理器相關的文件。如mpc8xx子目錄下含串口、網口、LCD驅動及中斷初始化等文件;
* driver 通用設備驅動,如CFI FLASH驅動(目前對INTEL FLASH支持較好)
* doc U-Boot的說明文檔;
* examples可在U-Boot下運行的示常式序;如hello_world.c,timer.c;
* include U-Boot頭文件;尤其configs子目錄下與目標板相關的配置頭文件是移植過程中經常要修改的文件;
* lib_xxx 處理器體系相關的文件,如lib_ppc, lib_arm目錄分別包含與PowerPC、ARM體系結構相關的文件;
* net 與網路功能相關的文件目錄,如bootp,nfs,tftp;
* post 上電自檢文件目錄。尚有待於進一步完善;
* rtc RTC驅動程序;
* tools 用於創建U-Boot S-RECORD和BIN鏡像文件的工具;
05 u-boot的工作模式
U-Boot的工作模式有 啟動載入模式和下載模式 。啟動載入模式是Bootloader的正常工作模式,嵌入式產品發布時,Bootloader必須工作在這種模式下,Bootloader將嵌入式操作系統從FLASH中載入到SDRAM中運行,整個過程是自動的。 下載模式 就是Bootloader通過某些通信手段將內核映像或根文件系統映像等從PC機中下載到目標板的SDRAM中運行,用戶可以利用Bootloader提供的一些令介面來完成自己想要的操作,這種模式主要用於測試和開發。
06 u-boot的啟動過程
大多數BootLoader都分為stage1和stage2兩大部分,U-boot也不例外。依賴於cpu體系結構的代碼(如設備初始化代碼等)通常都放在stage1且可以用匯編語言來實現,而stage2則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。
1、 stage1(start.s代碼結構)
U-boot的stage1代碼通常放在start.s文件中,它用匯編語言寫成,其主要代碼部分如下:
(1) 定義入口。由於一個可執行的image必須有一個入口點,並且只能有一個全局入口,通常這個入口放在rom(Flash)的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。
(2)設置異常向量(exception vector)。
(3)設置CPU的速度、時鍾頻率及中斷控制寄存器。
(4)初始化內存控制器 。
(5)將rom中的程序復制到ram中。
(6)初始化堆棧 。
(7)轉到ram中執行,該工作可使用指令ldrpc來完成。
2、 stage2(C語言代碼部分)
lib_arm/board.c中的start armboot是C語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個u-boot(armboot)的主函數,該函數主要完成如下操作:
(1)調用一系列的初始化函數。
(2)初始化flash設備。
(3)初始化系統內存分配函數。
(4)如果目標系統擁有nand設備,則初始化nand設備。
(5)如果目標系統有顯示設備,則初始化該類設備。
(6)初始化相關網路設備,填寫ip,c地址等。
(7)進入命令循環(即整個boot的工作循環),接受用戶從串口輸入的命令,然後進行相應的工作。
07 基於cortex-a8的s5pc100bootloader啟動過程分析
s5pc100支持兩種啟動方式,分別為USB啟動方式和NandFlash啟動方式:
1. S5PC100 USB啟動過程
[1] A8 reset, 執行iROM中的程序
[2] iROM中的程序根據S5PC100的配置管腳(SW1開關4,撥到4對面),判斷從哪裡啟動(USB)
[3] iROM中的程序會初始化USB,然後等待PC機下載程序
[4] 利用DNW程序,從PC機下載SDRAM的初始化程序到iRAM中運行,初始化SDRAM
[5] SDRAM初始化完畢,iROM中的程序繼續接管A8, 然後等待PC下載程序(BootLoader)
[6] PC利用DNW下載BootLoader到SDRAM
[7] 在SDRAM中運行BootLoader
2. S5PC100 Nandflash啟動過程
[1] A8 reset, 執行IROM中的程序
[2] iROM中的程序根據S5PC100的配置管腳(SW1開關4,撥到靠4那邊),判斷從哪裡啟動(Nandflash)
[3] iROM中的程序驅動Nandflash
[4] iROM中的程序會拷貝Nandflash前16k到iRAM
[5] 前16k的程序(BootLoader前半部分)初始化SDRAM,然後拷貝完整的BootLoader到SDRAM並運行
[6] BootLoader拷貝內核到SDRAM,並運行它
[7] 內核運行起來後,掛載rootfs,並且運行系統初始化腳本
08 u-boot移植(基於cortex_a8的s5pc100為例)
1.建立自己的平台
(1).下載源碼包2010.03版本,比較穩定
(2).解壓後添加我們自己的平台信息,以smdkc100為參考版,移植自己s5pc100的開發板
(3).修改相應目錄的文件名,和相應目錄的Makefile,指定交叉工具鏈。
(4).編譯
(5).針對我們的平台進行相應的移植,主要包括修改SDRAM的運行地址,從0x20000000
(6).「開關」相應的宏定義
(7).添加Nand和網卡的驅動代碼
(8).優化go命令
(9).重新編譯 make distclean(徹底刪除中間文件和配置文件) make s5pc100_config(配置我們的開發板) make(編譯出我們的u-boot.bin鏡像文件)
(10).設置環境變數,即啟動參數,把編譯好的u-boot下載到內存中運行,過程如下:
1. 配置開發板網路
ip地址配置:
$setenv ipaddr 192.168.0.6 配置ip地址到內存的環境變數
$saveenv 保存環境變數的值到nandflash的參數區
網路測試:
在開發開發板上ping虛擬機:
$ ping 192.168.0.157(虛擬機的ip地址)
如果網路測試失敗,從下面幾個方面檢查網路:
1. 網線連接好
2. 開發板和虛擬機的ip地址是否配置在同一個網段
3. 虛擬機網路一定要採用橋接(VM--Setting-->option)
4. 連接開發板時,虛擬機需要設置成 靜態ip地址
2. 在開發板上,配置tftp伺服器(虛擬機)的ip地址
$setenv serverip 192.168.0.157(虛擬機的ip地址)
$saveenv
3. 拷貝u-boot.bin到/tftpboot(虛擬機上的目錄)
4. 通過tftp下載u-boot.bin到開發板內存
$ tftp 20008000(內存地址即可) u-boot.bin(要下載的文件名)
如果上面的命令無法正常下載:
1. serverip配置是否正確
2. tftp服務啟動失敗,重啟tftp服務
#sudo service tftpd-hpa restart
5. 燒寫u-boot.bin到nandflash的0地址
$nand erase 0(起始地址) 40000(大小) 擦出nandflash 0 - 256k的區域
$nand write 20008000((緩存u-boot.bin的內存地址) 0(nandflash上u-boot的位置) 40000(燒寫大小)
6. 切換開發板的啟動方式到nandflash
1. 關閉開發板
2. 把SW1的開關4撥到4的那邊
3. 啟動開發板,它就從nandflash啟動
⑸ 請問Linux與嵌入式Linux區別是什麼謝謝
Linux
Linux是一種自由和開放源碼的類Unix操作系統,存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。
Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。
Linux以它的高效性和靈活性著稱,Linux模塊化的設計結構,使得它既能在價格昂貴的工作站上運行,也能夠在廉價的PC機上實現全部的Unix特性,具有多任務、多用戶的能力。Linux是在GNU公共許可許可權下免費獲得的,是一個符合POSIX標準的操作系統。
嵌入式Linux
嵌入式Linux系統就是利用Linux其自身的許多特點,把它應用到嵌入式系統里。隨著微處理器的產生,價格低廉、結構小巧的CPU和外設連接提供了穩定可靠的硬體架構,那麼限制嵌入式系統發展的瓶頸就突出表現在了軟體方面。盡管從八十年代末開始,陸續出現了一些嵌入式操作系統,比如著名的有:Vxwork、pSOS、Neculeus和WindowsCE。
Linux做嵌入式的優勢:首先,Linux是開放源代碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發者的強大技術支持;其次,Linux的內核小、效率高,內核的更新速度很快;最後,Linux是免費的OS,在價格上極具競爭力。
Linux和嵌入式Linux有什麼區別?
硬體平台:嵌入式Linux一般是Mips,ARM平台;桌面Linux一般是X86平台。
根文件系統:嵌入式Linux一般用UBIFS,yaffs2,jffs2;桌面Linux一般用ext3。
shell不同:嵌入式Linux一般用busybox,桌面Linux一般用bash。
⑹ 嵌入式Linux設備驅動開發
設備驅動程序:是計算機 硬體與應用程序 的 介面 ,是計算機系統 軟體與硬體 的 橋梁 ,是一種可以與設備進行通信的 特殊程序 。
Linux上程序開發一般分為兩種:
Linux兩種狀態:
內核態有較高的許可權,可以控制處理器內存的映射和分配方式,訪問外設空間和處理器狀態寄器,控制終端等。用戶態只能運行系統上的應用程序。
驅動程序 與底層的硬體交互,所以 工作在內核態 。
完成4個工作:
模塊方式(動態載入)
直接編譯進內核
⑺ 嵌入式操作系統的分類
嵌入式操作系統的分類 篇1
第一類、傳統的經典RTOS:
最主要的便是Vxworks操作系統,以及其Tornado開發平台。Vxworks因出現稍早,實時性很強(據說可在1ms內響應外部事件請求),並且內核可極微(據說最小可8K),可靠性較高等,所以在北美,Vxworks占據了嵌入式系統的多半疆山。特別是在通信設備等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發。像Bell-alcatel、Lucent、華為等通信企業在開發產品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產品中往往用不起。目前很多公司都在往嵌入式Linux轉(聽說華為目前正在這樣轉)。但無論如何,Vxworks在一段長時間內仍是不可動搖的。與Vxworks類似的稍有名的實時操作系統還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操作系統:
Linux的前途除作為伺服器操作系統外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支持軟體多、呼擁者眾,這樣嵌入式產品成本會低。Linux本身不是一個為嵌入式設計的操作系統,不是微內核的,並且實時性不強。目前應用在嵌入式領域的Linux系統主要有兩類:一類是專為嵌入式設計的已被裁減過的Linux系統,最常用的是uClinux(不帶MMU功能),目前占較大應用份額,可在ARM7上跑;另一類是跑在ARM9上的,一般是將Linux2.4.18內核移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM9上)。很多人預測,嵌入式Linux預計將占嵌入式操作系統的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發難度稍大。目前很多教材和很多大學都以ucOS/II為教學用實時操作系統,這主要是由於ucOS/II較簡單,且開源,非常適合入門者學習實時操作系統原理,但ucOS/II的缺點是功能有限,實用用得較少,所以要學習就應學直接實用的,比如uClinux就很實用。況且熟悉了Linux開發,不僅在嵌入式領域有用,對開發Linux應用軟體,對加深操作系統的認識也有幫助,可謂一舉多得。據說,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在自己的處理器上大搞Linux開發。目前在嵌入式Linux領域,以下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發版上;二是能寫Linux驅動程序的人;三是熟悉Linux內核裁減和優化的人。
第三類、WindowsCE嵌入式操作系統:
Microsoft也看準了嵌入式的巨大市場,WinCE出來只有幾年時間,但目前已佔據了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(據說有一家賣工控機的公司板子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發平台主要為WinCEPlatformBuilder,有時也用EVC環境開發一些較上層的應用,由於WinCE開發都是大家熟悉的VC++環境,所以學習Windows程序設計課程不會有多大難度,這也是WinCE容易被人們接受的原因,開發環境方便快速,微軟的強大技術支持,WinCE開發難度遠低於嵌入式Linux。對於急於完成,不想拿嵌入式Linux冒險的開發場合,WinCE是最合適了(找嵌入式Linux的人可沒那麼好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不同的側重點,WinCE還有兩個特殊版本,一個是MSPocketPC操作系統專用於PDA上(掌上電腦),另一個是MSSmartPhone操作系統用於智能手機上(帶PDA功能的手機),兩者也都屬於WinCE平台。在PDA和手機市場上,除WinCE外,著名的PDA嵌入式操作系統還有PalmOS(因出現很早,很有名)、Symbian等,但在WinCE的強勁沖擊下,Palm和Symbian來日還能有多長?據觀察,目前在嵌入式平台上,LINUX是叫得最響,但還是WinCE實際用得更多。嵌入式LINUX可能更多地是一些有長遠產品計劃的公司,為降低成本而進行長遠考慮。WinCE和多媒體(如MPEG技術)是微軟亞洲工程院目前做得較多的項目領域之一,他們很需要精通WinCE的人。
嵌入式操作系統的分類 篇2
目前我國已推出一些應用比較成功的EOS產品系列。隨著Internet技術的發展、信息家電的普及應用及EOS的微型化和專業化,EOS開始從單一的弱功能向高專業化的強功能方向發展。嵌人式操作系統在系統實時高效性、硬體的相關依賴性、軟體固態化以及應用的專用性等方面具有較為突出的特點。EOS是相對於一般操作系統而言的,它除了是具備了一般的操作系統最基本的功能,比如:任務調度、同步機制、中斷處理、文件功能之外的話,它還含有以下的特針:
(1)可裝卸性:開放性、可伸縮性的體系結構。
(2)強實時性:EOS實時性一般較強,可用於各種設備控制當中。
(3)統一的介面:提供各種設備驅動接入。
(4)操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學易用。
(5)提供強大的網路功能,支持TCP/IP協議及其它協議,提供TCP/UDP/IP/PPP協議支持及統一的MAC訪問層介面,為各種移動計算設備預留介面。
(6)強穩定性,弱交互性:嵌入式系統一旦開始運行就不需要用戶過多的干預,這就要負責系統管理的EOS臭有較強的穩定性。嵌入式操作系統的用戶接日一般不提供操作命令,它通過系統調用命令向用戶程序提供服務。
(7)固化代碼:在嵌入系統中,嵌入式操作系統和應用軟體被固化在嵌入式系統計算機的ROM中。輔助存儲器在嵌入式系統中很少使用,因此,嵌入式操作系統的文件管理功能應該能夠很容易地拆卸,而用各種內存文件系統。
(8)更好的硬體適應性,也就是良好的移植性。
國際上用於信息電器的嵌入式操作系統有40種左右。現在,市場上非常流行的EOS產品,包括3Corn公司下屬子公司的PalmOS,全球佔有份額達50%,Microsoft公司的WindowsCE不過29%。在美國市場,PalmOS更以80%的佔有率遠超WindowsCE.開放源代碼的Linux很適於做信息家電的開發。
然而我們常見的嵌入式系統有:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX、Rtems、QNX、INTEGRITY、OSE、CExecutive.嵌入式操作系統的發展也必將帶動新一輪的科技競爭。
嵌入式操作系統的分類 篇3
常見的嵌入式系統有這么多:
Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX、Rtems、QNX、INTEGRITY、OSE、CExecutive、autosar......
什麼是嵌入式操作系統?
嵌入式操作系統是一種支持嵌入式系統應用的操作系統軟體,它是嵌入式系統的重要組成部分。嵌入時操作系統具有通用操作系統的基本特點,能夠有效管理復雜的系統資源,並且把硬體虛擬化。
從應用角度可分為通用型嵌入式操作系統和專用型嵌入式操作系統。常見的通用型嵌入式操作系統有Linux、VxWorks、WindowsCE.net等。常用的專用型嵌入式操作系統有SmartPhone、PocketPC、Symbian等。
按實時性可分為兩類:
實時嵌入式操作系統主要面向控制、通信等領域。如WindRiver公司的VxWorks、ISI的pSOS、QNX系統軟體公司的QNX、ATI的Nucleus,很多汽車電子行業都是利用實時性很強的操作系統等。
非實時嵌入式操作系統主要面向消費類電子產品。這類產品包括PDA、行動電話、機頂盒、電子書、WebPhone等。如微軟面向手機應用的SmartPhone操作系統。
嵌入式系統的設計和實現而言,基本上需要四種不同的工作:系統設計工作,硬體設計工作,驅動程序和操作系統移植工作和應用程序設計開發工作。
1、 系統設計工作
在系統的設計階段,系統分析師將根據需求確定系統的硬體的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟體開發工具。系統分析師往往是較為完整的參與過嵌入式系統設計的全過程,對於系統應用的行業較為了解,對於嵌入式系統本身的開發流程十分清楚的人。
2、硬體設計工作
系統硬體設計人員需要根據系統分析師的設計結果,進行硬體原理圖的設計。通常需要硬體設計人員熟悉嵌入式系統的硬體構成。硬體設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),乙太網MAC晶元,音頻/視頻編解碼晶元,電源管理晶元,匯流排介面電路(USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網路通信模塊(Bluetooth,WLAN,GPRS)等硬體電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網路上能找到很多公司的評估板的原理圖,對於這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地了解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對於手持設備,但這些差別不影響初學者學習嵌入式系統的硬體設計基本構成。
1)學習Linux系統安裝、常用命令、應用程序安裝。
2)學習Linux下的C編程、這本書必學《UNIX環境高級編程》、《UNIX網路編程》,RechardStevens寫的,C高手大都學習過《C和指針》、《C缺陷與陷阱》、《高質量C/C++編程指南》、《C專家編程》、《TheCprogrammingLanguage》
3)程序員大都要學:數據結構,嵌入式程序員數據結構必學!
4)底層開發人員大都要學:微機原理、計算機體系結構,嵌入式開發人員必學!
5)單片機可以讓一個從事軟體開發的人了解和如何操作硬體,有必要學,因為一開始就從ARM入手,不太現實!
6)ARM體系結構,其中有匯編。
7)數字電路有必要學習,不然你在做底層開發時真的會不知道怎麼看原理圖,起碼也得懂與或門吧。
8)ARM+Linux應用程序開發。(前提是要有開發板)
9)要做底層開發,就必須知道軟硬體之間是如何銜接和配合工作的,那麼電子技術應該要好好學習了,很多時候會用到模擬電路知識,這是區別好手與菜鳥的不同之處之一。
10)Linux下的匯編要學,這樣你才能真正了解你寫的程序是如何在一個特定的硬體上跑的。這是區別好手與菜鳥的不同之處之二。
11)TCP/IP協議棧要學,所有的嵌入式高手都得掌握的東西,這是區別好手與菜鳥的不同之處之三。
12)有了這些東西,拿下Linux驅動已經不再話下,需要你去學習Linux內核源代碼和Linux驅動程序設計,這是一個技術升華。
13)音頻、視頻的解碼解碼技術你得學。
14)各種IC,各種bootloader你能夠參與其開發設計。
15)自行設計開發新產品,新技術。
學到這個地步差不多要花個3年的時間吧。但是後面的路該怎麼走呢?嵌入式系統性的東西搞了一個產品之後,基本上一些套路都摸清楚了。
不同的行業,對於系統的要求是不一樣的,比如汽車行業,航空航天行業等一些高精度,高安全的需要對實時性要求非常之高,對於安全性和可靠性的要求非常嚴格。而有些行業比如消費類產品,娛樂類的,生活用具方面的對於用戶體驗是不一樣的,數碼產品對於一些圖像聲音的處理,要求更高,需要高清,高品質的。而對於一些通信設備類對於網路的應答數據傳輸要求就非常嚴格,等等。這些根據不同的要求,選擇符合自己的操作系統,能對開發工作有更大的幫助。
嵌入式操作系統的分類 篇4
DOS
微軟一開始選用了派特森的Q-DOS「QUICKANDDISKOPERATINGSYSTEM」為基礎然後再擴充功能而成MS-DOS,主要是採用由IBM提供的使用8088微處理器的計算機作開發平台,它是以16位元組單人單工操作系統,特別適合一些功能簡單裝置使用。
WindowsCE
雖然微軟Windows系統已經稱霸了PCDesktop環境。但是對於嵌入式系統這塊大餅,微軟也是垂涎已久,桌上型的Windows桌業系統對於嵌入式系統來說自然是太過於肥大的產物,於是微軟推出精簡版的WindowsCE作為進攻嵌入式系統的主力。目前主要應用於PDA上頭,但是跟微軟一系列Windows系統一般,WindowsCE也承襲了原有的缺點:耗系統資源、不穩定、效率不佳等等。毛病實在太多,後來將整個架構重新改寫後推出WindowsCE3.0版,或稱為PocketPC。改版之後的確改進了不少缺點。
WindowsCE可應用於PDA、WebPAD、ThinClient等等。是採用WindowsCE為操作系統的SIMPad(西門子公司所有)。
Palm
由PalmComputing公司的嵌入式操作系統,目前最大的應用在PDA,是市場佔有率最高的PDA操作系統,Palm操作系統架構非常簡潔,因為少去了很多功能,如內存管理、多任務等等,使得Palm可以非常不耗系統資源,硬體需求低,連帶的整體耗電量便可壓縮到非常低,因此採用Palm操作系統的PDA都有待機時間長的優點。
EPOC
由英國手持裝置大廠Psion所開發,常用於PDA與手機結合的場合。最有名的例子Nokia9110系列手機,它就是採用EPOC系統。
著名的嵌入式實時系統
實時系統是嵌入式系統里頭非常重要的一環,很多人都誤以為實時系統執行速度非常快的系統,事實上不然,所謂實時代表的意義是『實時反應』,一般多人多任務操作系統如:Windows、UNIX,在上面執行的軟體都一起分享CPU,因為CPU速度快,所以我們感覺好象可以同時執行多支軟體,其實在系統內部的同一時間內都只有一個程序在執行,每個軟體都必須排隊,而且規定只能用一小段時間後就要換下一位,但是因為CPU速度夠快,很快又可以被執行到,所以人們感覺並不會很明顯軟體是一段一段在執行。這是一般所謂的非實時性的操作系統運作模式,而實時操作系統具有立即反應而且不能讓出資源的特性,例如汽車的ABS煞車系統,如果不採用能夠立即反應的實時系統,後果可就不堪設想。而這類的應用多半多屬體積小、功能簡單的地方,所以也算是嵌入式系統。QNX的QNXOS、WindRiver的VxWorks、Microware的OS9、pSOS等等,都是有名的嵌入式實時系統公司。
Linux
Linux不是都用來做伺服器嗎?不然就是Cluster,怎麼會跟嵌入式系統扯上關系?不要懷疑,Linux除了對伺服工作應付自如外,嵌入式系統也難不倒Linux。
那麼究竟Linux有怎樣獨特的能耐,可以想變大就變大想縮小就縮小?又用Linux來發展嵌入式系統有什麼優點?請看底下介紹。
開放原始碼、模塊化設計
Linux採用GPL授權,除了把原始碼公開以外,任何人都可以自由使用、修改、散布,而Linux核心本身采模塊化設計,讓人很容易增減功能,例如我的平台並不需要藍芽的功能,我只要不把這項功能加入,有需要就加入,不需要就刪除,由於這樣的高的彈性,我們可以調校出最適合我們硬體平台的核心出來。
相較於Linux,Windows是走封閉原始碼路線,所以我們完全無法得知或修改它的核心部份。另外因為是採用GPL授權自然就沒有什麼權利金或保密協議的約束。
穩定性夠
Linux不屬於任何一家公司,但是它的開發人員卻是全世界最多的,每天在全球都有無數的人參與LinuxKernel的改進、除錯、測試,這樣嚴苛的條件造就了穩定度高的Linux。
就因為如此,Linux雖不是商業的產物但是品質卻不遜於商業產品。
網路功能強大
Linux的架構是參造UNIX系統而來,因此Linux也承襲了UNIX強大的網路功能。在這個每樣事情都講求網路的時代下,只能說是Linux大放異彩的年代。未來可能家裡的電冰箱、冷氣、電視機都會連上網路,如何增加這些家電的網路功能,Linux可以替他們辦到。
跨平台
Linux一開始是基於Intel386機器而設計,但是隨著網路的散布,各式各樣的需求涌現,因此就有許多工程師致力於各式平台的移植,造成了Linux可以在x86、MIPS、ARM/StrongARM、PowerPC、Motorola68k、HitachiSH3/SH4、Transmeta..等等平台上運作的盛況。這些平台幾乎涵蓋了所有嵌入式系統所需的CPU,因此選擇Linux就可以把更多的`硬體平台納入考量的范圍。
嵌入式環境不如x86PC那樣單純,嵌入式環境所採用的CPU架構之多,使用Linux作開發,就等於有更多硬體的選擇,硬體成本是商業公司考量的一大重點,選擇多自然可以找到最合適的硬體,對於公司的競爭力是有極大的幫助。
應用軟體眾多
自由軟體世界裡有個很大的特色就是軟體超級多,而且幾乎都是符合GPL標准,換句話說,大家都可以自由取用,因為這些軟體多半是由工程師業余空暇時間所發展,而且不以營利為性質,所以並不能擔保這些軟體完全沒有BUG,但是仍舊有許多殺手級的軟體出現,大家熟知的KDE與GNOME便是很好的證明,當然與嵌入式系統較為相關如:gcc編譯器、Kdevelop整合式開發環境等等。
通常我們都會先在PC端造出模擬出嵌入式的環境,並直接在上頭開發,因此用的工具也都與開發一般Desktop軟體類似,良好的工具能夠增加開發的速度。
選擇多樣
如果公司有能力可以自己實作Linux嵌入式系統,因為程序代碼全部都開放在那裡,您可以隨心所欲的設計出自己想要的EmbeddedLinux系統,但是有更多的公司的業務重點不在於此,這時候您也可以選擇購買商業版的EmbeddedLinux系統,像是有名的Redhat公司、Lineo、MontaVista..等等,這些都是商業的Linux公司,購買他們的產品就可以得到完整的服務。因此商業或非商業全都在於您的需求。
自行開發系統
當然您也可以自行開發系統,嚴格控制硬體,但是相對的必須投注更大的成本在於研發系統上,原則上如果目標簡單明確只是一些基本的I/O控制,例如:跑馬燈。便適合自己開發,但是如果系統過於復雜則必須審慎評估自行研發的難度與時程的控管。
嵌入式操作系統的分類 篇5
進程的同步(直接制約):synchronism
指系統中一些進程需要相互合作,共同完成一項任務。具體說,一個進程運行到某一點時要求另一夥伴進程為它提供消息,在未獲得消息之前,該進程處於等待狀態,獲得消息後被喚醒進入就緒態。同步是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。
進程的互斥(間接制約)mutualexclusion
由於各進程要求共享資源,而有些資源需要互斥使用,因此各進程間競爭使用這些資源,進程的這種關系為進程的互斥。某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。
相關概念:
互斥:指多個進程不能同時使用同一個資源;
死鎖:指多個進程互不相讓,都得不到足夠的資源;
飢餓:指一個進程一直得不到資源(其他進程可能輪流佔用資源)
臨界資源:系統中某些資源一次只允許一個進程使用,稱這樣的資源為臨界資源或互斥資源或共享變數
臨界區:進程中訪問臨界資源的一段代碼。
臨界區問題
臨界區(criticalsection):進程中訪問臨界資源的一段代碼。
進入區(entrysection):在進入臨界區之前,檢查可否進入臨界區的一段代碼。如果可以進入臨界區,通常設置相應"正在訪問臨界區"標志
退出區(exitsection):用於將"正在訪問臨界區"標志清除。
剩餘區(remaindersection):代碼中的其餘部分。
使用臨界區應遵循的准則
有空讓進:當無進程在臨界區時,任何有權使用臨界區的進程可進入
無空等待:不允許兩個以上的進程同時進入臨界區
多中擇一:當沒有進程在臨界區,而同時有多個進程要求進入臨界區,只能讓其中之一進入臨界區,其他進程必須等待
有限等待:任何進入臨界區的要求應在有限的時間內得到滿足
讓權等待:處於等待狀態的進程應放棄佔用CPU
平等競爭:任何進程無權停止其它進程的運行進程之間相對運行速度無硬性規定
Linux下的進程包含以下幾個關鍵要素:
有一段可執行程序;
有專用的系統堆棧空間;
內核中有它的控制塊(進程式控制制塊),描述進程所佔用的資源,這樣,進程才能接受內核的調度;
具有獨立的存儲空間
進程和線程有時候並不完全區分,而往往根據上下文理解其含義。
嵌入式操作系統的分類 篇6
1、緒論
電控機械式自動變速器(,AMT)具有傳動效率高、成本低、操作容易、駕駛舒適等優點,已成為車輛自動變速器發展的一個重要方向。AMT的核心部件是電控單元(TCU),實時採集和檢測輸入信號(發動機轉速、輸入軸轉速和車速,油門踏板位置、節氣門開度、變速箱油溫等以及各種狀態信號)並進行調理、存儲,同時,TCU根據這些運行參數進行工況判斷並發出控制信號,完成車輛的平穩起步或自動換擋,從而使車輛獲得優良的舒適性、燃油經濟性與動力性能。較之傳統的控制器,TCU有更多的感測器,執行器以及更為復雜的控制演算法,若TCU設計不合理,難以滿足實時性與可靠性的要求,同時,如果換擋規律不合理,汽車難以獲得較好的燃油經濟性和動力性。本文從TCU硬體和軟體設計做了相應的介紹。
2、TCU軟體設計
TCU軟體部分的核心是控制策略,其主要部分是最佳換擋規律。本控制器採用兩種換擋控制策略,即經濟性換擋規律,綜合性換規律,通過模式選擇開關進行切換,使用Simulink搭建的換擋控制策略。
Simulink模型無法直接燒寫到單片機中運行,編寫好的程序通過Simulink提供的RTW工具生成可用的C代碼,編寫介面嵌入到軟體系統中。生成的C代碼是上層核心演算法程序,只提供與底層程序的介面,而底層程序則須自己編寫並留出對應介面和上層代碼對應介面進行連接[3]。然後把相應的C代碼添加到CCS中的工程文件中,並編寫代碼的介面,實現軟體三部分的無縫連接;其中驅動程序包括信號輸入通道設置與信號處理驅動程序、輸出通道設置與輸出處理、通信設置與數據轉換。
3、TCU硬體設計
根據TCU的功能需求,把硬體電路劃分以下幾個部分:信號採集輸入調理電路、執行器控制電路以及主控電路。
(1)主控電路:TCU的硬體電路選擇了TMS320F2812主控晶元,兩個16位通用定時器,以負責離合器轉速信號、車速信號等脈沖信號的採集;8個16位的脈寬調制(PWM)通道、可以實現對離合器電磁閥、換擋電磁閥的控制;16通道A/D轉換器,在採集節氣門位置、離合器位置等感測器輸入的多路模擬信號的應用中,可以簡化硬體,提高系統可靠性;擁有改進的區域網絡(eCAN)支持CAN2.0B協議,以實現串列信號的輸入輸出以及與汽車發動機ECU的信息交換,實現ECU之間的CAN通信。
(2)輸入電路:對於主控晶元TMS320F2812晶元上帶有AD轉換模塊的處理晶元,其輸入的模擬信號需要經過簡單的濾波、放大後才可接入DSP。開關量信號採用光電隔離來實現信號的轉換,數字信號調理部分的作用是將仿正弦信號經過處理後,變成電平范圍在DSP允許范圍內的方波信號。數字信號調理部分的設計採用先濾波後整形,最後光電隔離的辦法。
(3)TMS320F2812主控晶元EV外設提供的PWM外設功能,對電路進行控制,但,由控制器輸出的PWM波的峰值電壓只有5V,不足以驅動電磁閥,這就需要電磁閥驅動電路將PWM控制信號的功率進行放大,從而控制電磁閥正常工作。
4、結論
自行設計了TCU軟硬體,對設計的TCU做了相應的硬體在環試驗,利用RealTimeWorkshop實現控制模型向C代碼的轉化,優化後下載到TCU,進行了硬體在環模擬實驗,篇幅有限,本文不做具體說明。試驗結果表明,設計的該TCU,能按照控制策略實時、准確、可靠的控制AMT的換擋過程,同時,同時獲得了較好的經濟性以及動力性能。為AMT控制器的開發提供了參考。
⑻ 嵌入式Linux是由哪幾個部分組成
嵌入式
linux系統主要由以下四部分組成:
bootloader
kernel
rootfs
usrfs
Bootloader
(vivi):在操作系統內核運行之前運行的一段小程序,初始化硬體設備和建立內存空間的映射圖,將系統軟硬體環境帶到一個合適的狀態,以便為最終調用操作系統內核准備好正確的環境.
Kernel
(內核):Linux操作系統的核心,管理所有的系統線程/進程/資源/和資源分配.
Rootfs
(busybox):內核掛載的第一個文件系統,放有內核運行的第一個初始化程序init,命令,設備節點,配置文件以及共享文件.系統只能有一個根文件系統,通常用busybox工具來構建根文件系統,以減少系統體積.
⑼ linux與嵌入式系統的關系
linux和嵌入式系統是相互於相互交叉使用的。
嵌入式系統的定義就是軟硬體可裁剪,在實際項目中,對產品的功耗、存儲等要求嚴格,所以就會涉及將完整的Linux系統進行精簡瘦身,節約存儲提高效率,這就是所謂的系統移植、裁剪。此工作需要對Linux內核極其熟悉。
Linux驅動開發:嵌入式產品上面的各種外設的驅動開發,不僅要懂軟體、還需要熟悉Linux內核代碼、了解硬體相關知識。
嵌入式應用開發:調用Linux的系統調用介面,進行基於Linux系統的應用開發,只需要有Linux C語言知識的積累即可完成。
(9)linux嵌入式設備擴展閱讀
嵌入式linux的特點
1、嵌入式linux既繼承了Internet上無限的開放源代碼資源,又具有嵌入式操作系統的特性。
2、嵌入式Linux的特點是版權費免費;購買費用媒介成本技術支持全世界的自由軟體開發者提供支持網路特性免費。
3、一些嵌入式系統設計成具有附加的功能,如存儲在非易失性存儲器中的程序,並且具有運行可以完成原始設計范圍之外的任務的多任務操作系統的能力。
⑽ Linux用作嵌入式操作系統
Linux as an Embedded Operating System Linux有用作嵌入式操作系統的潛力嗎?本文討論了Linux的特點 健壯 性 局限以及最重要的一點 它的實時特性 近年來 PC硬體使用的增加是高端嵌入式系統最重要的發展之一 這種 趨勢造成高端系統硬體造價的大大跌落 從而使那些以前由於使用非P C結構的嵌入式硬體價格過高而不能做的項目成為可行的 但是嵌入式 PC平台上可選擇的軟體並不像硬體那樣有誘惑力 你可以選擇DOS 有 眾所周知的局限性 微軟Windows 缺乏實時性能 或者某種高端實時 操作系統 昂貴 專用 大多是不可移植的 Linux操作系統提供了另 外的有吸引力的選擇 並且沒有上面那些缺陷 Linux先前只是狂熱的 Unix迷們閑時專門在台式電腦上使用 後來發展成為必須認真對待的高 級的 穩定的操作系統 最近的發展之一是引入了實時性能 從而使L inux完成了重要的轉變 即從愛好者的玩具成為適合嵌入式系統設計者 的有價值的工具 當然 其實時性能還沒有那些高端RTOS那麼高級 並 且Linux永遠不會適合需要最小化RAM和ROM的系統 但是 對很多應用 來說 Linux的優勢勝過了不足 現在 大家都知道在嵌入式系統中使用PC硬體的好處 與很多專為嵌入 式市場設計的硬體比較 PC硬體是大規模生產的 容易獲得並且便宜 為VME匯流排設計的介面板價格是PC匯流排的兩倍多 比如模擬和數字I/O板 網路介面 圖像採集與處理板等 隨著高性能PCI匯流排應用的增加 吞吐量不再是影響使用PC平台的問題 但是操作系統功能上已經發生革命性的變化 在要求硬體價格降低的同 時 高端嵌入式系統要求更多高級的功能 如圖形用戶界面和網路支持 很多高端RTOS供應商已經提供了這些功能 一般是作為花更高價錢才 能得到的可選件 微軟Windows也有這些功能 卻不具備大多數嵌入式 系統要求的實時性能 也許有人想以DOS為基礎用單獨的第三方工具拼 湊一個系統 但這種努力將是白費並且不存在對這種系統的技術支持 現在需要的是一個便宜 成熟並且提供高端嵌入式系統所必須特性的操 作系統 因此 Linux操作系統近來開始吸引大家的注意 許多台式PC用戶被它 的特點和健壯性所吸引 並且獲得它只需支付通過FTP下載的網路費用 Linux帶有Unix用戶熟悉的完善的開發工具 幾乎所有的Unix系統和 應用軟體都已移植到了Linux上 Linux還提供了TCP/IP網路協議以及I nternet客戶和伺服器軟體 還有可選擇多種窗口管理器的X Windows C C++ Java和其他語言的編譯器也可得到 用戶會發現這些比Windo ws提供的更成熟 更完善 更易於使用 許多公司至少會有一位Linux 的熱衷者 當出現用Windows解決不了的問題時(比如設置一台PC為撥 號伺服器)會說 瞧 我們要是用Linux 現在 討論Bill Gates是否有所擔心是有些雜志的一個話題 重要的是 不屬於任何一家公司的Linux開始被台式電腦用戶接受 其中許多人並 不能被認為是電腦迷 這一方面是因為Linux的成熟 另一方面也因為 這幾年Internet的盛行 Linux用戶遇到問題時可以通過Internet新聞 組和郵件列表向網上成千上萬的在線用戶請教 你遇到的問題別人以前 肯定碰到過 一般他們都樂於幫忙 根據我的經驗 通常使用網路資源 能比依賴RTOS技術支持部門更快地解決問題 你可能需要從十幾條新聞 組其他成員回答的相關信息中搜尋 但至少有一個回答應該是有用的 相比較而言 你從技術支持部門僅得到一個回答 如果是錯的 你不得 不重新開始整個過程 另外 致力於提供Linux支持的公司也已經出現 給那些覺得傳統的技術支持手段更舒服的用戶一個選擇 並且所有L inux是提供源代碼的 這使最困難的問題也有辦法解決 某些嵌入式系統設計者會發現Linux本來的樣子就很有用 對於沒有實 時要求的應用 或者有實時要求但可以用一定的硬體或協處理器滿足的 應用 Linux提供了Windows和DOS之外的選擇 但是那樣的應用幾乎沒 有 因此 用Linux實現一個實時操作系統才是真正需要的 並且為了 用它實現高端嵌入式應用已經做了充分的工作 總的來說 有兩條途徑 來實現實時Linux 在此稱之為POSIX路線和低層路線 POSIX和Linux POSIX是標准化類Unix操作系統必須具有的特徵和介面的運動 POSIX的 思想是為了促進為Unix編寫的軟體的可移植性 使Unix程序員的工作更 容易 有些實時性的擴展 象POSIX b或IEEE b已經加入到標准 中 這些擴展中包括一些工具 比如信號燈 內存鎖定 時鍾和計數器 消息隊列以及優先順序搶先調度 以POSIX為基礎來標准化實時操作系統已經受到指責 這個標准又大又 笨 包含了許多適合台式Unix工作站但無助於嵌入式系統的特徵 因而 顯得很臃腫 標准制定群體被工作站製造商控制 他們不願對RTOS供應 商和用戶讓步 還有 POSIX系統調用反映了Unix系統調用的復雜和笨 重 在VxWorks或pSOS+中僅需一兩個調用即可完成的操作可能需要十幾 個POSIX調用 Unix程序員已經習慣了這種麻煩事 但是嵌入式系統程 序員卻覺得很難受 許多Linux開發者正在為了在Linux中實現POSIX b的特徵工作 這個活 動已經初見成效並且仍在繼續 POSIX內存鎖定工具和決定調度演算法的 函數已經實現 另外 計數器函數和POSIX b信號仍未完成 也許最糟 糕的是 對任何真正的RTOS都至關重要的信號燈和消息隊列也未實現 定義於POSIX c(或IEEE C)中的POSIX線程保證會為POSIX路線 的Linux開發實現 一個進程內可以有多個線程 共享相同的地址空間 這很符合我們熟悉的嵌入式系統中任務的概念 Linux已經部分實現 了POSIX線程 雖然POSIX路線對實現一個實時Linux做了保證 當前和可預見的將來只 有 軟 實時的應用能用POSIX b函數來實現 移植POSIX b函數到L inux上時要面對的根本問題是Linux的內核是不可搶先的 因此 要想 不對內核大動干戈而實現 硬 實時特性恐怕是不可能的 通向實時Linux的低層路線 Low level Approach to Real time Linux 比POSIX路線更有意思的是實現硬實時Linux的努力 其中最有前途的要 數新墨西哥技術學院的實時Linux(RT Linux)項目 注意到Linux是一 個為台式電腦用戶設計的操作系統 研究者們斷定 要想把實時功能移 植到為分時設計的OS上是不會有好結果的 取而代之的是 他們在操作 系統的下面實現了一個簡單的實時內核 而Linux本身也僅作為那個內 核上的一個任務來運行 Linux運行的優先順序最低 隨時可以被更高優 先級的任務搶先 RT Linux的設計理念是 對Linux作最小的改動 僅提供為了實現實時 應用必不可少的東西 這樣就使RT Linux比較容易移植到新版本的Lin ux上 同時 RT Linux依賴於Linux來提供所需的幾乎所有服務 而RT Linux僅提供低層任務創建 安裝中斷服務常式 並為低層任務 ISR 和Linux進程之間的通信排隊 這種設計的結果之一是 一個RT Linux應用可以看作有兩個域 實時和 非實時 放在實時域的函數能滿足其實時要求 但是它們必須比較簡單 因為可用資源很受限制 另一方面 非實時功能可以利用整個Linux 資源 但不能有任何實時要求 兩個域之間的通信工具已提供 但是使 用RT Linux之前 嵌入式系統設計者必須確保所有需要實現的功能適合 兩個域之一 使用RT Linux並不能變戲法似的使已經存在的Linux功能 具有實時性 例如 假設設計者有一個串口的Linux驅動程序 當串口 接收一個位元組序列之後 在一個固定時間內 由實時任務打開並口輸出 一行 這個驅動程序不能用 因為在非實時域內你不知道什麼時候串口 驅動程序會喚醒實時任務驅動並口完成工作 因此 串口和並口驅動都 必須在實時域內 這就要求重新設計串口驅動程序 RT Linux的任務處理工具是基本的 rt_task_init()用來創建並開始一 個任務 能指定堆棧的大小和優先順序 Linux本身以一個最低優先順序的 實時任務運行 rt_task_make_periodic()以一定間隔周期性地設置任 務運行 rt_task_wait()阻塞任務 使用簡單的搶先調度運行任務 實時任務與Linux進程之間通信的主要方法是FIFO rtf_create()創建 一個一定大小的FIFO 用rtf_put()將數據送入FIFO 如果FIFO滿則返 回一個錯誤 類似地 rtf_get()從FIFO中取出數據 如果FIFO空則返 回一個錯誤 FIFO最顯著的應用是數據流 例如 在一個數據採集應用中 可以用r t_task_init()和rt_task_make_periodic()設置實時任務使其以固定的 間隔從I/O板采樣 這個任務用rtf_put()將數據發送到Linux進程 該 Linux進程應該是一個循環 不斷從FIFO讀出數據 也許還要寫數據到 磁碟 或者通過網路發送 或者顯示在一個X窗口中 FIFO象一個緩沖 因此Linux進程不必非有實時性不可 實現數據流系統看起來成為RT Linux設計者的主要動機 但是FIFO機制 提供了一個實現信號燈的很好方法 兩態信號燈可以通過創建一個大小 為 的FIFO來實現 V操作即為rtf_put() 數據內容無所謂 同時忽略 返回的錯誤 P操作為rtf_get() 計數信號燈可以通過創建大小足夠容 納所期望V操作個數的FIFO簡單地實現 由此可見 FIFO機制提供了實 時應用中任務同步所需的大部分功能 當前的實現在RTOS用戶習慣的某 些功能上仍有欠缺 比如優先順序禁止(防止優先順序反轉)和任務安全刪 除 但是仔細設計幾乎總能避免這些問題 此外 雖然FIFO操作可以在 沒有數據(讀FIFO)或沒有空間(寫FIFO)時阻塞 語法卻相當復雜 阻塞能力看來不是設計的重點 然而 至少有一個提供FIFO阻塞操作簡 單語法的努力正在進行 同時還實現了阻塞超時 這是許多嵌入式應用 的重要特徵 RT Linux簡單 開放的設計允許用戶相當容易地實現類似 的附加功能 RT Linux的一個有趣的方面是設計者使Linux內核 lishixin/Article/program/Oracle/201311/17916