嵌入式操作系統(tǒng)課件_第1頁
嵌入式操作系統(tǒng)課件_第2頁
嵌入式操作系統(tǒng)課件_第3頁
嵌入式操作系統(tǒng)課件_第4頁
嵌入式操作系統(tǒng)課件_第5頁
已閱讀5頁,還剩701頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

嵌入式操作系統(tǒng)1什么是嵌入式系統(tǒng)? 嵌入式系統(tǒng)(Embeddedsystem)是“以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁減,適用于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計算機(jī)系統(tǒng)”,是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計的系統(tǒng)“。按照歷史性、本質(zhì)性、普遍性要求,嵌入式系統(tǒng)應(yīng)定義為:“嵌入到對象體系中的專用計算機(jī)系統(tǒng)”?!扒度胄浴薄ⅰ皩S眯浴迸c“計算機(jī)系統(tǒng)”是嵌入式系統(tǒng)的三個基本要素。對象系統(tǒng)則是指嵌入式系統(tǒng)所嵌入的宿主系統(tǒng).1、從硬件上,將基于CPU的處圍器件,整合到CPU芯片內(nèi)部,比如早期基于X86體系結(jié)構(gòu)下的計算機(jī),CPU只是有運算器和累加器的功能,一切芯片要靠外部橋路來擴(kuò)展實現(xiàn),象串口之類的都是靠外部的的串口控制器芯片實現(xiàn),而目前的這種串口控制器芯片早已集成到CPU內(nèi)部;PC機(jī)有顯卡,而多數(shù)嵌入式處理器都帶有LCD控制器,但某種意義上就相當(dāng)于顯卡。比較高端的ARM類IntelXscale架構(gòu)下的IXP網(wǎng)絡(luò)處理器CPU內(nèi)部集成PCI控制器,網(wǎng)絡(luò)處理器引擎等。如何理解“嵌入”2、從軟件上,就是在定制操作系統(tǒng)內(nèi)核里將應(yīng)用一并選入,編譯后將內(nèi)核下載到ROM中。而在定制操作系統(tǒng)內(nèi)核時所選擇的應(yīng)用程序組件就是完成了軟件的“嵌入”,比如WinCE在內(nèi)核定制時,會有相應(yīng)選擇,其中就是wordpad,PDF,MediaPlay等選擇,如果我們選擇了,在CE啟動后,就可以在界面中找到這些東西,而PC上的windows操作系統(tǒng),多半的東西都需要我們重新安裝。

3、把軟件內(nèi)核或應(yīng)用文件系統(tǒng)等東西燒到嵌入式系統(tǒng)硬件平臺中的ROM中就實現(xiàn)了一個真正的“嵌入”。如何理解“嵌入”

嵌入式系統(tǒng)主要應(yīng)用領(lǐng)域消費電子工業(yè)控制通信設(shè)備、家庭設(shè)備汽車電子醫(yī)療電子軍事國防航空航天 嵌入式系統(tǒng)無處不在,在移動電話、數(shù)碼照相機(jī)、MP4、數(shù)字電視的機(jī)頂盒、微波爐、汽車內(nèi)部的噴油控制系統(tǒng)、ABS(防抱死制動系統(tǒng))等裝置或設(shè)備都使用了嵌入式系統(tǒng)。嵌入式技術(shù)正在改變生活為什么要學(xué)習(xí)嵌入式系統(tǒng)市場需求 中國具有世界最大嵌入式技術(shù)市場,手持儀器設(shè)備、信息家電、城市建設(shè)、工業(yè)控制、軍事應(yīng)用,……,嵌入式技術(shù)無處不在。企業(yè)人才需求 軟硬件設(shè)計人才,應(yīng)用開發(fā)人才,綜合性人才,……技術(shù)發(fā)展趨勢要求

8位、16位、32位,實時操作系統(tǒng),……目前國內(nèi)沒有專門的嵌入式系統(tǒng)專業(yè)或課程體系 計算機(jī)專業(yè):偏軟 電子專業(yè):偏硬為什么選擇嵌入式行業(yè)?嵌入式開發(fā)是目前高薪IT職業(yè)。嵌入式開發(fā)不會像桌面開發(fā)那樣容易貶值。嵌入式開發(fā)可作為長期職業(yè)發(fā)展。嵌入式產(chǎn)品無處不在。就業(yè)起薪較高。

硬件是其基礎(chǔ)、軟件是其核心與靈魂。硬件主要由嵌入式微處理器、外圍硬件設(shè)備組成;軟件主要包括底層系統(tǒng)軟件和用戶應(yīng)用軟件組成嵌入式系統(tǒng)的組成

1.嵌入式系統(tǒng)硬件組成嵌入式處理器(CPU)是嵌入式系統(tǒng)的核心部分ARM、PowerPC、MC68000、MIPS等外圍設(shè)備存儲設(shè)備(如RAM、SRAM、Flash等)通信設(shè)備(如RS-232接口、以太網(wǎng)接口等)顯示設(shè)備(如顯示屏等)嵌入式系統(tǒng)的組成

2.嵌入式系統(tǒng)軟件組成對于使用操作系統(tǒng)的嵌入式系統(tǒng)來說,嵌入式系統(tǒng)軟件結(jié)構(gòu)一般包含4個層面:實時操作系統(tǒng)RTOS、應(yīng)用程序接口API層、設(shè)備驅(qū)動層、實際應(yīng)用程序?qū)印?/p>

嵌入式系統(tǒng)軟件組成圖嵌入式系統(tǒng)的組成第1章嵌入式Linux操作系統(tǒng)簡介本章教學(xué)目的及要求了解Linux的特征及組成;了解Linux的內(nèi)核結(jié)構(gòu)及相關(guān)源代碼;了解常見的嵌入式操作系統(tǒng);了解嵌入式系統(tǒng)的開發(fā)流程。1.1Linux的特征及組成1.1.1Linux操作系統(tǒng)發(fā)展歷史 Linux最初是專門為基于Intel處理器的個人計算機(jī)而設(shè)計的。Linux的前身指的是由LinusTorvalds維護(hù)開發(fā)的開放源代碼的類Unix操作系統(tǒng)的內(nèi)核。

目前大多數(shù)人用它來表示以Linux內(nèi)核為基礎(chǔ)的整個操作系統(tǒng)。從這種意義講,Linux指的是源碼開放,包含內(nèi)核和系統(tǒng)工具、完整的開發(fā)環(huán)境和應(yīng)用的類Unix操作系統(tǒng)。

同時,Linux遵循GNU(GNU’sNotUnix)的通用公共許可證GPL(GeneralPublicLicense),是自由軟件家族中的一員。自由軟件最早由美國麻省理工學(xué)院MIT的RichardStallman提出。自1984年起,在MIT的支持下,Richard創(chuàng)建了自由軟件基金會FSF(FreeSoftwareFoundation)。FSF的主要項目是GNU計劃(革奴計劃),它的目標(biāo)是建立可自由發(fā)布和可移植的類Unix操作系統(tǒng)。同時,Richard創(chuàng)作了通用公共許可證GPL作為GNU的版權(quán)聲明。GPL也叫Copyleft,這與我們平常所說的Copyright截然相反。任何人只要遵循GPL,就可以對Linux內(nèi)核加以修改并發(fā)布給他人使用。

Copyleft標(biāo)志什么是自由軟件?1.1.1Linux操作系統(tǒng)發(fā)展歷史2011年11月,Linux內(nèi)核發(fā)布最新版3.1.2Linux之所以受到廣大計算機(jī)愛好者的喜愛主要原因: 一是它屬于自由軟件,用戶不用支付任何費用就可以獲得它和它的源代碼,并且可以根據(jù)自己的需要對它進(jìn)行必要的修改和無約束地繼續(xù)傳播。 另一個原因是,它具有Unix的全部功能,任何使用Unix操作系統(tǒng)或想要學(xué)習(xí)Unix操作系統(tǒng)的人都可以從Linux中獲益。Linux之父:李納斯·托沃茲LinusTorvaldsFrom:torvalds@klaava.Helsinki.FI(LinusBenedictTorvalds)Newsgroups:comp.os.minixSubject:Whatwouldyouliketoseemostinminix?Summary:smallpollformynewoperatingsystemMessage-ID:Date:25Aug9120:57:08GMTOrganization:UniversityofHelsinkiHelloeverybodyoutthereusingminix-Idoinga(free)operatingsystem(justahobby,won‘tbebigandprofessionallikegnu)for386(486)ATclones.(你好,所有使用minix的人-我正在為386(486)AT做一個免費的操作系統(tǒng)(只是為了愛好),不會像GNU那樣很大很專業(yè))ThishasbeenbrewingsinceApril,andisstartingtogetready.Ilikeanyfeedbackonthingspeoplelike/dislikeinminix,asmyOSresemblespracticalreasonsamongotherthings.Ihavecurrentlyportedbash(1.08)andgcc(1.40),andthingsseemtowork.ThisimpliesthatI'llgetsomethingpracticalwithinafewmonths,andIliketoknowwhatfeathersmostpeoplewouldwant.Anysuggestionsarewelcome,butIwon'tpromiseI'Ilimplementthem:-)Linus(torvalds@kruuna.helsinki.fi)Ps.Yes-it‘sfreeofanyminixcode,andithasamulti-threadedfs.ItisNOTportable(uses386taskswitchingetc),anditprobablyneverwillsupportanythingotherthanAT-hard-disks,asthat'sallIhave:-(Linux的起源linuxfor工作linux系統(tǒng)管理員linux系統(tǒng)的維護(hù)、配置等linux程序員需c/c++、java,php、jsp…linux軟件工程師(PC)linux嵌入式開發(fā)(單片機(jī)、芯片)1.Linux系統(tǒng)的特點開放性:指系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,特別是遵循開放系統(tǒng)互連(OSI)國際標(biāo)準(zhǔn)。多用戶:是指系統(tǒng)資源可以被不同用戶使用,每個用戶對自己的資源(例如:文件、設(shè)備)有特定的權(quán)限,互不影響。多任務(wù):它是指計算機(jī)同時執(zhí)行多個程序,而且各個程序的運行互相獨立。良好的用戶界面:Linux向用戶提供了3種界面:用戶界面、系統(tǒng)調(diào)用、圖形用戶界面。它利用鼠標(biāo)、菜單、窗口、滾動條等設(shè)施,給用戶呈現(xiàn)一個直觀、易操作、交互性強(qiáng)的友好的圖形化界面1.1.2Linux系統(tǒng)的特點及組成設(shè)備獨立性:是指操作系統(tǒng)把所有外部設(shè)備統(tǒng)一當(dāng)作成文件來看待,只要安裝它們的驅(qū)動程序,任何用戶都可以象使用文件一樣,操縱、使用這些設(shè)備,而不必知道它們的具體存在形式。Linux是具有設(shè)備獨立性的操作系統(tǒng),它的內(nèi)核具有高度適應(yīng)能力提供了豐富的網(wǎng)絡(luò)功能:完善的內(nèi)置網(wǎng)絡(luò)是Linux一大特點??煽康陌踩到y(tǒng):Linux采取了許多安全技術(shù)措施,包括對讀、寫控制、帶保護(hù)的子系統(tǒng)、審計跟蹤、核心授權(quán)等,這為網(wǎng)絡(luò)多用戶環(huán)境中的用戶提供了必要的安全保障。良好的可移植性:是指將操作系統(tǒng)從一個平臺轉(zhuǎn)移到另一個平臺使它仍然能按其自身的方式運行的能力。Linux是一種可移植的操作系統(tǒng),能夠在從微型計算機(jī)到大型計算機(jī)的任何環(huán)境中和任何平臺上運行。1.1.2Linux系統(tǒng)的特點及組成2.Linux系統(tǒng)的組成Linux一般由以下4部分組成:Linux的內(nèi)核:內(nèi)核是系統(tǒng)的核心,是運行程序和管理像磁盤和打印機(jī)等硬件設(shè)備的核心程序。LinuxShell:

Shell是系統(tǒng)的用戶界面,它是一個命令解釋器,它解釋用戶輸入的命令,并且把它們送到內(nèi)核。提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。Linux應(yīng)用系統(tǒng):標(biāo)準(zhǔn)的Linux系統(tǒng)都有一整套稱為應(yīng)用程序的程序集,包括文本編輯器、編程語言、XWindow、辦公套件、Internet工具、數(shù)據(jù)庫等。Linux文件系統(tǒng):

Linux文件系統(tǒng)是文件存放在磁盤等存儲設(shè)備上的組織方法。Linux能支持多種目前許多的文件系統(tǒng),如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。1.Linux的內(nèi)核版本 Linux內(nèi)核采用雙樹結(jié)構(gòu)。一棵樹是穩(wěn)定樹,主要用于發(fā)行;另一棵樹是非穩(wěn)定樹或開發(fā)樹,用于產(chǎn)品開發(fā)、改進(jìn)。 源代碼版本序號的形式為r.x.y,其中r為主版本號,代表較大改動;x為次版本號,表示功能性的改動;y為末版本號,表示BUG的改動(錯誤修補(bǔ)的次數(shù))。其中r介于0到9之間,x和y則介于0到99之間。 對于穩(wěn)定樹來說,x是偶數(shù);對于開發(fā)樹來說,x是比相應(yīng)穩(wěn)定樹大1的奇數(shù)。例2.4.20為穩(wěn)定內(nèi)核版本。 可以從/獲得最新的內(nèi)核信息1.1.3Linux的內(nèi)核版本與發(fā)行版本2.Linux的發(fā)行版本 Linux的發(fā)布版本就是將Linux核心與應(yīng)用軟件打包。雖然Linux只有一個標(biāo)準(zhǔn)化的版本,但有好多個不同的發(fā)布版本。如今的Linux已經(jīng)有超過250種發(fā)行版本,且可以支持所有體系結(jié)構(gòu)的處理器,如X86、PowerPC、ARM、XSCALE等,也可以支持帶MMU或不帶MMU的處理器。到目前為止,它的內(nèi)核版本也已從原先的0.0.1發(fā)展到現(xiàn)在的3.x。 紅旗Linux 沖浪Linux 中軟Linux RedHatLinux UbuntuLinux TurboLinuxDebianLinux MandrivaLinux 其中RedHatLinux和UbuntuLinux(適合初學(xué)者)比較普遍1.1.3Linux的內(nèi)核版本與發(fā)行版本RedHatLinux的優(yōu)勢RedHatLinux是最成熟也是目前最流行的一種Linux發(fā)布版本,無論在銷售還是裝機(jī)容量上都居榜首。RedHatLinux可運行在多種硬件平臺上。市場上有大量的文章是針對RedHatLinux來介紹的,同時其站點包含有大量文檔,如Users’Guide、FAQ等。在RedHat的300名工程師中,有6名來自于全世界最頂尖的Linux核心開發(fā)者,7名來自全球最出色Linux開發(fā)工具工程師。全世界,也許只有RedHat能夠把Linux和開源技術(shù)以及企業(yè)級的培訓(xùn)、技術(shù)支持和咨詢?nèi)诤系萌绱嗣烂睢edHat的培訓(xùn)及認(rèn)證被認(rèn)為是Linux認(rèn)證的標(biāo)準(zhǔn)。Certification雜志的最新調(diào)查顯示,RHCE(RedHat認(rèn)證工程師)認(rèn)證被公認(rèn)為總體質(zhì)量最高的國際IT認(rèn)證。RedHat的發(fā)展戰(zhàn)略是每三年發(fā)布一個新版本的企業(yè)級Linux操作系統(tǒng),并且每六個月發(fā)布一次更新。第一階段:linux平臺上的開發(fā),包括vi,gcc,gdb,make,jdk,tomcat,mysql..和linux基本操作第二階段:加厚c語言功底《c專家編程》或是java語言第三階段:學(xué)習(xí)unix環(huán)境高級編程《unix環(huán)境高級編程》第四階段:linux應(yīng)用系統(tǒng)開發(fā)/linux嵌入式開發(fā)推薦書籍《鳥哥的Linux的私房菜基礎(chǔ)學(xué)習(xí)篇》鳥哥、許偉、林彩娥等編著《Linux編程從入門到精通》宮虎波編著《Linux內(nèi)核完全剖析》趙炯編著實踐合理利用網(wǎng)絡(luò)資源:論壇、視頻等如何學(xué)習(xí)Linux1.2.1Linux內(nèi)核結(jié)構(gòu)1.2Linux的內(nèi)核分析內(nèi)核負(fù)責(zé)管理磁盤上的文件、內(nèi)存,負(fù)責(zé)啟動并運行程序,負(fù)責(zé)從網(wǎng)絡(luò)上接收和發(fā)送數(shù)據(jù)包等等。內(nèi)核實際是抽象的資源操作到具體硬件操作細(xì)節(jié)之間的接口。

從程序員來看,Linux內(nèi)核抽象了許多硬件細(xì)節(jié),使程序員可以以統(tǒng)一的方式進(jìn)行數(shù)據(jù)處理。

從用戶來看,Linux是一個資源管理者,幫助用戶方便的管理自己的數(shù)據(jù),完成自己的工作。

Linux是多用戶、多任務(wù)的操作系統(tǒng)。Linux內(nèi)核保證每個用戶都象自己獨占內(nèi)存和其他硬件資源一樣運行其進(jìn)程,并使各進(jìn)程公平合理地使用各種資源。1.2.2Linux內(nèi)核的作用1.2.3Linux內(nèi)核的抽象結(jié)構(gòu)

5個子系統(tǒng)提供對各種網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)硬件的支持。分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)設(shè)備驅(qū)動兩部分。保證多個進(jìn)程安全地共享內(nèi)存區(qū)域。負(fù)責(zé)控制進(jìn)程對CPU的訪問。支持進(jìn)程間各種通信機(jī)制為所有設(shè)備提供統(tǒng)一的接口,支持?jǐn)?shù)十種不同的文件系統(tǒng)。包括邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序。各個子系統(tǒng)之間的依賴關(guān)系互相依賴。在多道程序環(huán)境下,程序要運行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程的第一件事情,就是將程序和數(shù)據(jù)裝入內(nèi)存。依賴

支持共享內(nèi)存通信機(jī)制,這種機(jī)制允許兩個進(jìn)程除了擁有自己的私有空間,還可以存取共同的內(nèi)存區(qū)域。虛擬文件系統(tǒng)利用網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)(NFS)內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。各個子系統(tǒng)之間的依賴關(guān)系

進(jìn)程調(diào)度與內(nèi)存管理之間的關(guān)系:這兩個子系統(tǒng)互相依賴。在多道程序環(huán)境下,程序要運行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程的第一件事情,就是將程序和數(shù)據(jù)裝入內(nèi)存。進(jìn)程間通信與內(nèi)存管理的關(guān)系:進(jìn)程間通信子系統(tǒng)要依賴內(nèi)存管理支持共享內(nèi)存通信機(jī)制,這種機(jī)制允許兩個進(jìn)程除了擁有自己的私有空間,還可以存取共同的內(nèi)存區(qū)域。

虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口之間的關(guān)系:虛擬文件系統(tǒng)利用網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)(NFS)。內(nèi)存管理與虛擬文件系統(tǒng)之間的關(guān)系:內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。當(dāng)一個進(jìn)程存取的內(nèi)存映射被換出時,內(nèi)存管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運行的進(jìn)程。1.2.3Linux內(nèi)核的抽象結(jié)構(gòu)

一般在Linux系統(tǒng)中的/usr/src/Linux-*.*.*(*.*.*代表內(nèi)核版本)目錄下就是內(nèi)核源代碼。Linux內(nèi)核非常龐大,包括驅(qū)動程序在內(nèi)有數(shù)百兆之多。1.2.4Linux內(nèi)核的源代碼1.2.4Linux內(nèi)核的源代碼arch目錄:包含了體系結(jié)構(gòu)相關(guān)部分的內(nèi)核代碼,其中的每一個目錄都代表一種硬件平臺,比如ARM平臺和PC機(jī)使用的i386。對于任何一種平臺,都包括以下5個目錄:boot、kernel、lib、mm和math-xxx。顯然,移植工作的重點就是arch目錄下的文件。/mm目錄:包含了所有的內(nèi)存管理代碼。/init目錄:包含了內(nèi)核的初始化代碼(不是系統(tǒng)的引導(dǎo)代碼),有main.c和version.c兩個文件。內(nèi)核從此工作。/fs目錄:包含了Linux所支持的所有文件系統(tǒng)。一般來說,文件系統(tǒng)與硬件無關(guān)。/ipc目錄:包含了核心進(jìn)程間的通信代碼。/kernel目錄:包含了內(nèi)核管理的核心代碼。/include目錄:包含了建立內(nèi)核代碼時所需的大部分頭文件,比如,與平臺無關(guān)的頭文件在include/linux子目錄下。此外,也包括了不同平臺需要的庫文件,比如,asm-arm是ARM平臺需要的庫文件。/net目錄:包含了和網(wǎng)絡(luò)相關(guān)的代碼,其每一個子目錄對應(yīng)于網(wǎng)絡(luò)的一個方面。/lib目錄:包含了所有的庫代碼。其它目錄:Documentation目錄包含了許多非常詳細(xì)的文檔。Scripts目錄主要在配置內(nèi)核時用到,存放了配置內(nèi)核的一些腳本文件,如“makemenuconfig”命令。1.2.4Linux內(nèi)核的源代碼1.3常見的嵌入式操作系統(tǒng)1.3.1嵌入式操作系統(tǒng)概念和分類

操作系統(tǒng)(OS,OperatingSystem):

是隱藏底層不同硬件的差異,向在其上運行的應(yīng)用程序提供一個統(tǒng)一的調(diào)用接口。

操作系統(tǒng)主要完成三項任務(wù):

內(nèi)存管理多任務(wù)管理外圍設(shè)備管理。應(yīng)用程序操作系統(tǒng)系統(tǒng)界面驅(qū)動程序硬件硬件硬件硬件1.3.1嵌入式操作系統(tǒng)概念和分類概念嵌入式操作系統(tǒng)(EmbeddedOperatingSystem)

負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度、控制、協(xié)調(diào);能夠通過加載/卸載某些模塊來達(dá)到系統(tǒng)所要求的功能。EOS是相對于一般操作系統(tǒng)而言的,它除具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件處理等外,還有以下特點:強(qiáng)穩(wěn)定性,弱交互性:具有很強(qiáng)的穩(wěn)定性;較強(qiáng)的實時性;可伸縮性:開放、可伸縮性的體系結(jié)構(gòu);外設(shè)接口的統(tǒng)一性:提供各種設(shè)備驅(qū)動接口。實時操作系統(tǒng)(Real-TimeOperatingSystem,RTOS),是指操作系統(tǒng)本身要能在一個固定時限內(nèi)對程序調(diào)用(或外部事件)做出正確的反應(yīng),亦即對時序與穩(wěn)定性的要求十分嚴(yán)格。目前國際較為知名的有:VxWorks、NeutrinoRTOS、NucleusPlus、OS/9、VRTX、LinuxOS,RTLinux、BlueCatRT等。通用型操作系統(tǒng):執(zhí)行性能與反應(yīng)速度比起實時操作系統(tǒng),相對沒有那么嚴(yán)格。目前較知名的有:WindowsCE、PalmOS、TimeSysLinux/GPL、BlueCatLinux等。

嵌入式操作系統(tǒng)的性能通常取決于核心程序,而核心的工作主要在任務(wù)管理(TaskManagement)、任務(wù)調(diào)度(TaskScheduling)、進(jìn)程間的通信(IPC)、內(nèi)存管理(MemoryManagement)。1.3.1嵌入式操作系統(tǒng)概念和分類分類比較著名的嵌入式操作系統(tǒng)(了解)嵌入式LinuxμC/OS-IIWindowsCEVxWorksQNX 利用Linux搭建嵌入式操作系統(tǒng)是近年來最令人振奮的方案之一,Linux將來可能會成為嵌入式系統(tǒng)主流操作系統(tǒng)。

1.3.2嵌入式Linux(1)嵌入式Linux是按照嵌入式操作系統(tǒng)的要求而設(shè)計的一種小型操作系統(tǒng)。由一個內(nèi)核及一些根據(jù)需要進(jìn)行定制的系統(tǒng)模塊組成。其kernel很小,一般只有幾百kB左右。即使加上其它必須的模塊和應(yīng)用程序,所需的存儲空間也很小。它有多任務(wù)、多進(jìn)程的系統(tǒng)特征,有些還具有實時性。

1.3.2嵌入式Linux(2)嵌入式Linux操作系統(tǒng)的優(yōu)勢(1)、支持多種體系結(jié)構(gòu); 目前Linux能夠支持x86,ARM,IPS,APARC等多種CPU的體系機(jī)構(gòu),已被移植到數(shù)十種硬件平臺上。(2)、多任務(wù),內(nèi)核穩(wěn)定,可定制,源代碼開放;(3)、強(qiáng)大的網(wǎng)絡(luò)支持功能; 支持TCP/IP協(xié)議,及其上的高層協(xié)議,如ftp,Telnet,http等。同時支持Socket網(wǎng)絡(luò)編程。(4)、支持多文件系統(tǒng);

linux支持FAT32,EXT2,EXT3等多種文件系統(tǒng),支持虛擬文件系統(tǒng),同時還可以連接其它的文件系統(tǒng),如ROMFS,JFFS等文件系統(tǒng)。嵌入式Linux操作系統(tǒng)的優(yōu)勢(5)、驅(qū)動豐富,支持大量的外設(shè);

linux支持基本所有的PC外設(shè),具有豐富的外設(shè)驅(qū)動程序。(6)、Linux具備一整套工具鏈。容易自行建立嵌入式系統(tǒng)的開發(fā)環(huán)境、交叉運行環(huán)境,并且可以跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙。一般開發(fā)嵌入式操作系統(tǒng)的程序調(diào)試和跟蹤都是使用仿真器來實現(xiàn)的,而使用Linux系統(tǒng)做原型的時候,可以繞過這個障礙,直接使用內(nèi)核調(diào)試器來做操作系統(tǒng)的內(nèi)核調(diào)試和查錯。μC/OS是一個典型的實時操作系統(tǒng)。該系統(tǒng)從1992年開始發(fā)展,目前流行的是第二個版本,即μC/OSII。名稱μC/OS-II來源于術(shù)語Micro-ControllerOperatingSystem(微控制器操作系統(tǒng))。它通常也稱為MUCOS或者UCOS。1.3.3μC/OS-IIμC/OS-Ⅱ只是一個實時操作系統(tǒng)內(nèi)核,其特點:提供任務(wù)調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間通信和同步等基本功能;沒有提供輸入輸出管理、文件管理、網(wǎng)絡(luò)等額外的服務(wù)。源碼開放及可擴(kuò)展?;趦?yōu)先級調(diào)度的搶占式實時內(nèi)核,在內(nèi)核之上提供最基本的系統(tǒng)服務(wù)。例如:信號量、郵箱、消息隊列、內(nèi)存管理、中斷管理等。應(yīng)用領(lǐng)域包括便攜式電話、照相機(jī)、醫(yī)療器械、音響設(shè)備、發(fā)動機(jī)控制、高速公路電話系統(tǒng)、自動支付終端、交換機(jī)等。2000年,得到美國航空管理局(FAA)的認(rèn)證,可以用于飛行器中。1.3.3μC/OS-IIμC/OS-Ⅱ具有良好的可移植性。μC/OS-Ⅱ的大部分代碼都是用C語言寫成的,只有與處理器的硬件相關(guān)的一部分代碼用匯編語言編寫。目前μC/OS-Ⅱ支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多種體系結(jié)構(gòu)。是一個源碼公開、可移植、可裁減、占用資源少、搶先式的實時多任務(wù)操作系統(tǒng)。其絕大部分源碼采用ANSIC寫的,移植性好。高校教學(xué)可免費使用。目前的版本是μC/OS-IIV2.72。

1.3.3μC/OS-IIWindowsCE,微軟公司,它是從整體上為資源有限的平臺設(shè)計的多線程、完整優(yōu)先權(quán)、多任務(wù)的操作系統(tǒng)。模塊化設(shè)計,并允許針對從掌上電腦到專用的工控電子設(shè)備進(jìn)行定制。操作系統(tǒng)的基本內(nèi)核需要至少200KB的ROM。主要應(yīng)用于PDA,智能電話(smartphone)等多媒體網(wǎng)絡(luò)產(chǎn)品。

嵌入式操作系統(tǒng)領(lǐng)域競爭激烈,微軟公司不得不應(yīng)付來自Linux等免費系統(tǒng)的沖擊。微軟公司在WindowsCE.Net4.2版中,增加一項授權(quán)價僅3美元的精簡版本W(wǎng)indowsCE.NetCore?;镜墓δ馨ǎ簩崟rOS核心(RealTimeOSKernel),新文件系統(tǒng),IPv4、IPv6、WLAN、藍(lán)牙等聯(lián)網(wǎng)功能,WindowsMediaCodec,.Net開發(fā)框架以及SQLServer.ce。低價版本的WindowsCE.Net,主要是看好語音電話、WLAN的無線橋接器和個性化視聽設(shè)備的成長潛力。1.3.4WindowsCE嵌入式LinuxOS與WindowsCE相比的優(yōu)點第一:Linux是開放源代碼,遍布全球的眾多Linux愛好者都是Linux開發(fā)者的強(qiáng)大技術(shù)支持者;WindowsCE6.0內(nèi)核全部開放,GUI不開放。第二:Linux的內(nèi)核小、效率高;WindowsCE相比,占用過多的RAM。第三:Linux是開放源代碼的OS,在價格上極具競爭力,適合中國國情。WindowsCE需要版權(quán)費用。第四:Linux不僅支持x86芯片,還是一個跨平臺的系統(tǒng)。更換CPU時就不會遇到更換平臺的困擾。第五:Linux內(nèi)核的結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,它提供了對包括十兆位、百兆位及千兆位的以太網(wǎng)絡(luò),還有無線網(wǎng)絡(luò)、Tokenring(令牌環(huán))和光纖甚至衛(wèi)星的支持,WindowsCE的網(wǎng)絡(luò)功能也比較強(qiáng)大。嵌入式LinuxOS與WindowsCE相比的弱點第一:LINUX開發(fā)難度較高,需要很高的技術(shù)實力,WINCE開發(fā)相對較容易,開發(fā)周期短,內(nèi)核完善,主要是應(yīng)用層開發(fā)。第二:LINUX核心調(diào)試工具不全,調(diào)試不太方便,尚沒有很好的用戶圖形界面,WINCE的GUI豐富,開發(fā)工具強(qiáng)大;第三,系統(tǒng)維護(hù)難度大。Linux在使用較完整的GUI時一般會占用較大的內(nèi)存,如果去掉部分無用的功能來減小使用的內(nèi)存,但是如果不仔細(xì),將引起新的問題。1.4嵌入式系統(tǒng)開發(fā)過程1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)

1.硬件層:由嵌入式微處理器、外圍電路和外設(shè)組成。外圍電路有:電源電路、復(fù)位電路、調(diào)試接口和存儲器電路,就構(gòu)成一個嵌入式核心控制模塊。

操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。有些嵌入式系統(tǒng)還包括:LCD、鍵盤、USB接口,以及其他一些功能的擴(kuò)展電路。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)2.中間層:硬件層與軟件層之間為中間層,也稱為BSP(BoardSupportPackage,板級支持包)。作用:將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動程序與硬件無關(guān);功能:具有相關(guān)硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置等功能。BSP是主板硬件環(huán)境和操作系統(tǒng)的中間接口,是軟件平臺中具有硬件依賴性的那一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好地運行于硬件主板上。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)3.軟件層 主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作系統(tǒng)是一個標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時器等資源都封裝起來,以方便用戶使用。4.功能層 由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來完成對被控對象的控制功能。功能層是面向被控對象和用戶的,為了方便用戶操作,往往需要具有友好的人機(jī)界面。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)1.4.2嵌入式系統(tǒng)的開發(fā)特點1.采用宿主機(jī)/目標(biāo)機(jī)方式,所需要的開發(fā)環(huán)境稱為交叉開發(fā)環(huán)境2.為了保證穩(wěn)定性和實時性,選用RTOS開發(fā)平臺3.生成代碼需要固態(tài)化存儲4.軟件代碼具有高質(zhì)量、高可靠性1.4.2嵌入式系統(tǒng)的開發(fā)特點嵌入式系統(tǒng)的應(yīng)用開發(fā)一般由5個階段構(gòu)成:需求分析設(shè)計規(guī)格說明書(功能性和非功能性需求、任務(wù)和目標(biāo))體系結(jié)構(gòu)設(shè)計如何實現(xiàn)需求,對硬件、軟件的功能劃分,硬件、軟件、操作系統(tǒng)的選型硬件/軟件設(shè)計軟件(應(yīng)用程序)和硬件的詳細(xì)設(shè)計系統(tǒng)集成軟件和硬件集成調(diào)試代碼固化。將程序?qū)懭氲紽lash等非易失性存儲器中。各階段間往往要求不斷地反復(fù)和修改,直到最終完成設(shè)計目標(biāo)。1.4.3嵌入式系統(tǒng)開發(fā)流程系統(tǒng)的調(diào)試有如下幾種:1.源程序模擬器(Simulator)

2.實時在線仿真系統(tǒng)ICE(In-CircuitEmulator)方式--是一種完全仿造調(diào)試目標(biāo)CPU設(shè)計的儀器3.監(jiān)控器方式4.在線調(diào)試器方式ICD5.高級語言編譯器(CompilerTools)1.4.4嵌入式系統(tǒng)調(diào)試有關(guān)嵌入式系統(tǒng)學(xué)習(xí)的四個層面:

嵌入式系統(tǒng)分為4層,硬件層、驅(qū)動層、操作系統(tǒng)層和應(yīng)用層。1、硬件層,是整個嵌入式系統(tǒng)的根本,如果現(xiàn)在單片機(jī)及接口這塊很熟悉,并且能用C和匯編語言來編程的話,從嵌入式系統(tǒng)的硬件層走起來相對容易,硬件層也是驅(qū)動層的基礎(chǔ),一個優(yōu)秀的驅(qū)動工程師是要能夠看懂硬件的電路圖和自行完成CPLD的邏輯設(shè)計的,同時還要對操作系統(tǒng)內(nèi)核及其調(diào)度性相當(dāng)?shù)氖煜さ?。但硬件平臺是基礎(chǔ),增值還要靠軟件。硬件層比較適合于,電子、通信、自動化、機(jī)電一體、信息工程類專業(yè)的人來搞,需要掌握的專業(yè)基礎(chǔ)知識有,單片機(jī)原理及接口技術(shù)、微機(jī)原理及接口技術(shù)、C語言。

2、驅(qū)動層,這部分比較難,驅(qū)動工程師不僅要能看懂電路圖還要能對操作系統(tǒng)內(nèi)核十分的精通,以便其所寫的驅(qū)動程序在系統(tǒng)調(diào)用時,不會獨占操作系統(tǒng)時間片,而導(dǎo)至其它任務(wù)不能動行,不懂操作系統(tǒng)內(nèi)核架構(gòu)和實時調(diào)度性,沒有良好的驅(qū)動編寫風(fēng)格,按大多數(shù)書上所說添加的驅(qū)動的方式,很多人都能做到,但可能連個初級的驅(qū)動工程師的水平都達(dá)不到,這樣所寫的驅(qū)動在應(yīng)用調(diào)用時就如同windows下我們打開一個程序運行后,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行后來打開的程序。想做個好的驅(qū)動人員沒有三、四年功底,操作系統(tǒng)內(nèi)核不研究上幾遍,是太不容易成功的,但其工資在嵌入式系統(tǒng)四層中可是最高的。驅(qū)動層比較適合于電子、通信、自動化、機(jī)電一體、信息工程類專業(yè)尤其是計算機(jī)偏體系結(jié)構(gòu)類專業(yè)的人來搞,除硬件層所具備的基礎(chǔ)學(xué)科外,還要對數(shù)據(jù)結(jié)構(gòu)與算法、操作系統(tǒng)原理、編譯原理都要十分精通了解。3、操作系統(tǒng)層,對于操作系統(tǒng)層目前可能只能說是簡單的移植,而很少有人來自已寫操作系統(tǒng),或者寫出缺胳膊少腿的操作系統(tǒng)來,這部分工作大都由驅(qū)動工程師來完成。操作系統(tǒng)是負(fù)責(zé)系統(tǒng)任務(wù)的調(diào)試、磁盤和文件的管理,而嵌入式系統(tǒng)的實時性十分重要。據(jù)說,XP操作系統(tǒng)是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟件所自己的女媧Hopen操作系統(tǒng)估計也得花費幾百人年才能搞定。4、應(yīng)用層,相對來講較為容易,如果會在windows下進(jìn)行編程接口函數(shù)調(diào)用,到嵌入式操作系統(tǒng)下只是編譯和開發(fā)環(huán)境有相應(yīng)的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統(tǒng)中涉及的算法由專業(yè)算法的人來處理的,不必歸結(jié)到嵌入式系統(tǒng)范疇內(nèi)。但如果涉及嵌入式系統(tǒng)下面嵌入式數(shù)據(jù)庫、基于嵌入式系統(tǒng)的網(wǎng)絡(luò)編程和基于某此應(yīng)用層面的協(xié)議應(yīng)用開發(fā)(比如基于SIP、H.323、Astrisk)方面又較為復(fù)雜,并且有難度了。學(xué)習(xí)目標(biāo)與定位

先有目標(biāo),再去定位。學(xué)ARM,從硬件上講,一方面就是學(xué)習(xí)接口電路設(shè)計,另一方面就是學(xué)習(xí)匯編和C語言的板級編程。如果從軟件上講,就是要學(xué)習(xí)基于ARM處理器的操作系統(tǒng)層面的驅(qū)動、移植。這些對于初學(xué)都來說必須明確,要么從硬件著手開始學(xué),要么從操作系統(tǒng)的熟悉到應(yīng)用開始學(xué),但不管學(xué)什么,只要不是純的操作系統(tǒng)級以上基于API的應(yīng)用層的編程,硬件的寄存器類的東西還是要能看懂的,基于板級的匯編和C編程還是要會的。因此針對于嵌入式系統(tǒng)的硬件層和驅(qū)動層的人,ARM的接口電路設(shè)計、ARM的C語言和匯編語言編程及調(diào)試開發(fā)環(huán)境還是需要掌握的。

學(xué)習(xí)目標(biāo)與定位因此對于初學(xué)者必然要把握住方向,自己的目標(biāo)是什么,自己要在那一層面上走。然后再著手學(xué)習(xí)較好,與ARM相關(guān)的嵌入式系統(tǒng)的較為實際的兩個層面硬件層和驅(qū)動層,不管學(xué)好了那一層都會很有前途的。

如果想從嵌入式系統(tǒng)的應(yīng)用層面的走的話,可能與ARM及其體系相去較遠(yuǎn),要著重研究基于嵌入式操作系統(tǒng)的環(huán)境應(yīng)用與相應(yīng)開發(fā)工具,比如WinCE操作系統(tǒng)下的EVC應(yīng)用開發(fā)(與windows下的VC相類似),如果想再有突破就往某些音視頻類的協(xié)議上靠,比如VOIP領(lǐng)域的基于SIP或H.323協(xié)議的應(yīng)用層開發(fā),或是基于嵌入式網(wǎng)絡(luò)數(shù)據(jù)庫的開發(fā)等等。對于初學(xué)者來講,要量力而行,不要認(rèn)為驅(qū)動層工資高就把它當(dāng)成方向了,要結(jié)合自身特點,選擇適合自己的目標(biāo)。嵌入式系統(tǒng)的學(xué)習(xí)1、分析一種嵌入式操作系統(tǒng)的源代碼。根據(jù)具體需要,在了解操作系統(tǒng)基本原理的情況下,選擇需要了解的部分,重點分析。建議不通讀。2、分析一種通信協(xié)議棧的實現(xiàn)方式并熟悉相應(yīng)軟件的使用。3、深入了解一種嵌入式開發(fā)。推薦使用GNUTools開發(fā)工具。2.1系統(tǒng)管理命令1.登錄和退出 Login: Logout:2.關(guān)機(jī)或重新啟動命令shutdown$shutdown–hnow←要求系統(tǒng)立即關(guān)機(jī)$shutdownnow←要求系統(tǒng)立即關(guān)機(jī)$shutdown+5←要求5分鐘后關(guān)機(jī)$shutdown–rnow←要求立即關(guān)機(jī)系統(tǒng)并重新啟動3.重新開機(jī)命令reboot$reboot2.1系統(tǒng)管理命令4.聯(lián)機(jī)幫助命令 (1)man顯示幫助手冊

$manCmd$man–fCmd(只顯示命令功能) $man-kfiles (2)系統(tǒng)幫助文檔

#helpCommand適用于內(nèi)部命令例如:helpcd #Command–help/-h適用于外部命令例如:ls--help(3)whereis用于查詢某個命令存在于哪個目錄

$whereis-brm內(nèi)部命令:是指寫在bash源碼里面的,其執(zhí)行速度比外部命令快,因為解析內(nèi)部命令shell不需要創(chuàng)建子進(jìn)程。比如:exit,history,cd,jobs,bg,fg,echo外部命令:bash之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等比如:ls,vi區(qū)分:用type命令可以分辨內(nèi)部命令與外部命令2.1系統(tǒng)管理命令5.增加用戶帳號

useradd[選項]用戶名

6.修改用戶帳號

usermod[-LU][-c<備注>][-d<登入目錄>][-e<有效期限>][-f<緩沖天數(shù)>][-g<群組>][-G<群組>][-l<帳號名稱>][-s][-u][用戶帳號]7.刪除用戶帳號

userdel[-r][用戶賬號]2.1系統(tǒng)管理命令8.組增加命令 groupadd[-r]group9.組賬號修改命令

groupmod[-g<群組識別碼><-o>][-n<新群組名稱>][群組名稱]10.刪除組賬號 groupdel[群組名稱]2.1系統(tǒng)管理命令11.口令維護(hù)命令 passwd[用戶名]12.組中用戶成員的維護(hù)

(1)添加用戶到使用的組的命令格式為: gpasswd–a用戶賬號名組賬號名 (2)從組中刪除用戶的命令格式為: gpasswd–d用戶賬號名組賬號名 (3)設(shè)置用戶為組管理員的命令格式為: gpasswd-A組管理員用戶列表用戶組

13.顯示用戶和組的狀態(tài)命令id

id

[-gGnru][--help][--version][用戶名稱] 2.1系統(tǒng)管理命令14.用戶切換命令su su[-flmp][-][-c<指令>][-s][用戶帳號]15.顯示指定用戶所屬的組命令 groups用戶名16.監(jiān)控后臺進(jìn)程命令ps

ps[選項]17.結(jié)束進(jìn)程

kill[-s信號|-p][-a]進(jìn)程號

18.進(jìn)程睡眠 sleep[--help][--version]number[smhd]2.2文件管理命令1.顯示文件內(nèi)容命令cat

cat[選項]文件列表2.復(fù)制文件命令cp

cp[選項]源文件目標(biāo)文件

cp[選項]源文件組目標(biāo)目錄3.刪除文件或目錄命令rm

rm[選項]文件列表-rf選項和通配符4.移動或更改文件、目錄名稱命令mv mv[-f][-i]文件1文件2

mv[-f][-i]目錄1目錄2

mv[-f][-i]文件列表目錄5.

鏈接文件的命令

ln[選項]目標(biāo)[鏈接名]

ln[選項]目標(biāo)目錄2.3

目錄及其操作命令1.列出文件或目錄

ls[選項][文件目錄列表]-l–a選項2.改變工作目錄 cd[name]3.建立新目錄

mkdir[-m模式][-p目錄名]目錄4.刪除目錄

rmdir-p目錄列表5.變更文件或目錄的權(quán)限命令chmod chmod[選項]文件和目錄列表6.顯示當(dāng)前工作目錄命令pwd

pwd[--help][--version]7.分頁查看文件內(nèi)容more

more文件名

cat文件名|more2.3目錄及其操作命令Linux是一個多用戶的操作系統(tǒng),有著完善的權(quán)限管理機(jī)制。不同的用戶有著不同的權(quán)限,這些權(quán)限決定了用戶能在Linux下執(zhí)行哪些操作。第一項是由10個字符組成的字符串,例如“drwxr-xr-x”,說明了該文件/目錄的文件類型和文件訪問權(quán)限。第一個字符表示文件類型。從左起第2個字符到第10個字符表示文件訪問權(quán)限。并且以3個字符為一組,分為3組。組中的每個位置對應(yīng)一個指定的權(quán)限,其順序為:讀、寫、執(zhí)行。3組字符又分別代表文件所有者權(quán)限、文件從屬組權(quán)限以及其他用戶權(quán)限。chmod命令支持兩種文件權(quán)限設(shè)定的方法使用字符串設(shè)置權(quán)限使用八進(jìn)制數(shù)設(shè)置權(quán)限文件和目錄的權(quán)限可用八進(jìn)制數(shù)字模式來表示,3個八進(jìn)制數(shù)字分別表示用戶、用戶所在組成員、其它成員的權(quán)限。權(quán)限的順序是rwx,分別是讀、寫、執(zhí)行例如:權(quán)限是rw-對應(yīng)的八進(jìn)制數(shù)為6.2.4文件傳輸與編輯命令1.查找文件命令find

find查找位置[選項參數(shù)]2.查找文件中的字符串命令grep grep[選項]匹配字符串文件列表3.排序命令sort

sort[選項]文件2.5文件壓縮與磁盤掛載命令1.文件壓縮命令gzip

gzip[選項]壓縮(解壓縮)的文件名

2.文件打包命令tar tar[主選項+輔選項]文件或者目錄3.文件解壓縮命令unzip

unzip[選項]壓縮文件名.zip4.掛載的mount命令 mount–oiocharset=cp936/dev/cdrom/mnt/cdrom15.卸載的umount命令 umount/mnt/cdrom2.6網(wǎng)絡(luò)操作命令1.ifconfig命令

ifconfig-interface[options]address2.ip命令

ip[OPTIONS]OBJECT[COMMAND[ARGUMENTS]]3.ping命令

ping[選項]IP地址

4.netstat命令

netstat[選項][-A][--ip]5.telnet命令

telnet[選項][主機(jī)名稱IP地址<通信端口>]6.ftp命令

ftp[-dignv][主機(jī)名稱或IP地址]建立交叉編譯環(huán)境啟動代碼Bootloader的實現(xiàn)/移植kernel的配置/移植/編譯根文件系統(tǒng)Cramfs的實現(xiàn)嵌入式開發(fā)流程3.1嵌入式Linux的開發(fā)環(huán)境

3.1.1嵌入式Linux開發(fā)環(huán)境建立有幾個嵌入式Linux開發(fā)環(huán)境方案:(1)基于PC機(jī)WINDOWS操作系統(tǒng)下的CYGWIN;(2)在WINDOWS下安裝虛擬機(jī)VMware軟件,使用redhat9虛擬機(jī),即在虛擬機(jī)中安裝LINUX操作系統(tǒng);(3)直接安裝LINUX操作系統(tǒng),也可安裝ubuntu。交叉編譯 交叉編譯就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。 這里說的平臺分別指的是主機(jī)平臺Host和目標(biāo)平臺Target。 就我們在ARM平臺上移植Linux來說,Host是一臺一般的PC機(jī),它通過串口或網(wǎng)絡(luò)接口與Target通信;Target是arm-linux平臺(這里說的arm指的是平臺所使用的CPU是ARM9處理器,linux指的是運行的操作系統(tǒng)是Linux)。 我們在Host上開發(fā)程序,并在這個平臺上運行交叉編譯器CrossComplier,編譯我們的程序,而由CrossComplier生成的程序?qū)⒃赥arget上運行?!凹热晃覀円呀?jīng)有了主機(jī)編譯器,那為什么還要交叉編譯呢?”?需要交叉編譯的原因: 首先,在項目的起始階段,目標(biāo)平臺尚未建立,因此需要做交叉編譯,以生成我們所需要的Bootloader以及kernel(因為Bootloader和kernel的源碼需要經(jīng)過交叉編譯后才可以在目標(biāo)平臺上運行); 其次,當(dāng)目標(biāo)平臺能啟動之后,由于目標(biāo)平臺上資源的限制,當(dāng)我們編譯大型程序時,依然可能需要用到交叉編譯。交叉編譯我們在主機(jī)平臺上開發(fā)程序,并在這個平臺上運行交叉編譯器,編譯我們的程序;而由交叉編譯器生成的程序在目的平臺上運行。要進(jìn)行交叉編譯,我們需要在主機(jī)平臺上安裝對應(yīng)的交叉編譯工具鏈(crosscompilationtoolchain),然后用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標(biāo)平臺上運行的代碼。

armv4l-unknown-linux-gcc:交叉編譯linux內(nèi)核 arm-linux-gcc:交叉編譯linux內(nèi)核 arm-elf-gcc:主要交叉編譯uclinux內(nèi)核 arm-uclinux-gcc:交叉編譯uclinux內(nèi)核

主要下載網(wǎng)址: 為了在命令行中能夠?qū)ふ业浇徊婢幾g器,我們需要把它所在的路徑加入到PATH環(huán)境變量中(例:/usr/local/arm/bin:$PATH)。常用在ARM平臺的GNUToolchain3.1.2嵌入式Linux開發(fā)的一般過程1.了解硬件;2.準(zhǔn)備需要使用的Linux工具以及其他工具;3.安排內(nèi)存地址;4.編寫啟動代碼和機(jī)器相關(guān)代碼;5.編寫驅(qū)動程序;6.C庫、GUI和系統(tǒng)程序的移植;7.調(diào)試。

3.1嵌入式Linux的開發(fā)環(huán)境3.2Linux開發(fā)工具的使用3.3GNUmake命令和makefile文件3.4使用Automake和Autoconf生成makefile文件3.5嵌入式Linux編輯器vi的使用3.6Emacs綜合編輯器第3章嵌入式Linux的開發(fā)環(huán)境及工具軟件3.2Linux開發(fā)工具的使用

3.2.1Linux開發(fā)工具GNUgcc的使用1、GCC簡介GCC是GNUCompilerCollection的簡稱,GCC是Linux平臺下最常用的編譯程序,除了支持C語言外,還支持多種其他語言,例如C++、Ada、Java、Objective-C、Fortran、Pascal等。GCC支持的體系結(jié)構(gòu)有40余種,常見的有x86系列、Arm、PowerPC等。同時,GCC還能運行在不同的操作系統(tǒng)上,如Linux、Solaris、Windows等。GCC無所不在宏定義#3.2Linux開發(fā)工具的使用

使用gcc編譯程序時,編譯過程可以細(xì)分為4個階段:(1)預(yù)處理(Preprocessing)、(2)編譯(Compilation)、(3)匯編(Assembly)(4)鏈接(Linking)。3.2.1Linux開發(fā)工具GNUgcc的使用2、GCC常用模式及選項gcc最基本的用法是:gcc[options]file...

其中options是以“-”開始的各種選項,file是相關(guān)的文件名。在使用gcc的時,必須給出必要的選項和文件名。gcc的整個編譯過程分別是:預(yù)處理、編譯,匯編和鏈接。3.2Linux開發(fā)工具的使用

示例程序//helloworld.c#include<stdio.h>intmain(void){printf("HelloWorld!\n");return0;}3.2.1Linux開發(fā)工具GNUgcc的使用2、GCC常用模式及選項GCC最常用的有兩種模式:編譯模式:gcchelloworld.c-ohelloworld編譯連接模式:gcc-chelloworld.c-ohelloworld.o說明:編譯模式生成的二進(jìn)制機(jī)器代碼為可執(zhí)行的;編譯連接模式生成的二進(jìn)制機(jī)器代碼不可執(zhí)行,只生成目標(biāo)文件helloworld.o。

可以自定義文件名,如gcc-chelloworld.c-omyHelloWorld.o3.2Linux開發(fā)工具的使用

3.2Linux開發(fā)工具的使用

(1)預(yù)處理(Preprocessing):(2)編譯(Compilation):(3)匯編(Assembly):(4)鏈接(Linking):一步到位的編譯指令:gcchelloworld.c-ohelloworldgcc-Ehelloworld.c-ohelloworld.igcc-Shelloworld.i-ohelloworld.sgcc-chelloworld.s-ohelloworld.ogcchelloworld.o-ohelloworld主要作以下幾種事情:所有的#define刪除,并且展開所有的宏定義;處理所有條件編譯指令;處理#include預(yù)編譯指令,將被包含的文件插入到該預(yù)編譯指令的位置。刪除所有的注釋//和;添加行號和文件標(biāo)識;保留所有的#pragma編譯器指令;生成匯編代碼編譯為目標(biāo)文件將程序的目標(biāo)文件與所需的所有附加的目標(biāo)文件連接起來,最終生成可執(zhí)行文件3.2.1Linux開發(fā)工具GNUgcc的使用多個文件的編譯通常整個程序是由多個源文件組成的,相應(yīng)地也就形成了多個編譯單元,使用GCC能夠很好地管理這些編譯單元。假設(shè)有一個由test1.c和test2.c兩個源文件組成的程序,為了對它們進(jìn)行編譯,并最終生成可執(zhí)行程序test,可以使用以下命令:

gcctest1.ctest2.c-otest3.2Linux開發(fā)工具的使用

gcc-ctest1.c-otest1.ogcc-ctest2.c-otest2.ogcctest1.otest2.o-otest源文件頭文件不在同一目錄下怎么辦?(假設(shè)test.c在./src目錄下,而包含文件在./inc目錄下)

$gcctest.c–I

../inc-otest此命令告訴GCC包含文件存放在../inc目錄下,即在當(dāng)前目錄的上一級。若在編譯時需要的包含文件存放在多個目錄下,可使用多個-I來指定各個目錄:$gcctest.c

–I

../inc–I

../../inc2-otest

這里指出了另一個包含子目錄inc2,較之前目錄它還要在再上兩級才能找到。

gcc的版本可以使用如下gcc–v命令查看:3.警告功能

當(dāng)GCC在編譯過程中檢查出錯誤,則中止編譯;但檢測到警告時卻能繼續(xù)編譯生成可執(zhí)行程序。在眾多的警告選項之中,最常用的是-Wall選項。該選項能發(fā)現(xiàn)程序中一系列的常見錯誤警告,舉例如下:

$gcc-Walltest.c-otest該選項相當(dāng)于同時使用了下列所有的選項:unused-function:遇到僅聲明過但尚未定義的靜態(tài)函數(shù)時發(fā)出警告。unused-label:遇到聲明過但不使用的標(biāo)號的警告。unused-parameter:從未用過的函數(shù)參數(shù)的警告。

●unused-variable:在本地聲明但從未用過的變量的警告●unused-value:僅計算但從未用過的值的警告。●format:檢查對printf和scanf等函數(shù)的調(diào)用,確認(rèn)各參數(shù)類型和格式串中的一致?!駃mplicit-int:警告沒有規(guī)定類型的聲明?!駃mplicit-function-:在函數(shù)在未經(jīng)聲明就使用時給予警告?!馽har-subscripts:警告把char類型作為數(shù)組下標(biāo)?!駇issing-braces:聚合初始化兩邊缺少大括號。●Parentheses:在某些情況下如果忽略了括號,編譯器就發(fā)出警告。當(dāng)gcc在編譯不符合ANSI/ISOC語言標(biāo)準(zhǔn)的源代碼時,如果加上了-pedantic選項,那么使用了擴(kuò)展語法的地方將產(chǎn)生相應(yīng)的警告信息

生成可執(zhí)行文件是否可以直接執(zhí)行呢?編譯器會自動鏈接一些程序庫,但是有些程序庫需要手動鏈接。大多數(shù)系統(tǒng)庫都在/lib目錄下。程序庫以lib開頭命名,鏈接時只需寫lib后擴(kuò)展名前的部分。4.庫依賴函數(shù)庫實際上就是一些頭文件(.h)和庫文件(.so或者.a)的集合。Linux下大多數(shù)函數(shù)都默認(rèn)將頭文件放到/usr/include/目錄下,而庫文件則放到/usr/lib/目錄下,但并不是所有的情況都是這樣。正因如此,gcc在編譯時必須讓編譯器知道如何來查找所需要的頭文件和庫文件。可通過-L選項向gcc的庫文件搜索路徑中添加新的目錄。如:

[david@DAVIDdavid]$gccdavid.c-L/home/david/lib–ldavid-odavid注意:-l選項,指示gcc去連接庫文件david.so。Linux下的庫文件在命名時有一個約定,那就是應(yīng)該以lib三個字母開頭。由于所有的庫文件都遵循了同樣的規(guī)范,因此在用-l選項指定鏈接的庫文件名時可以省去lib三個字母。也就是說gcc在對-ldavid進(jìn)行處理時,會自動去鏈接名為libdavid.so的文件。Linux下的庫文件分為兩大類:動態(tài)鏈接庫(通常以.so結(jié)尾)和靜態(tài)鏈接庫(通常以.a結(jié)尾),默認(rèn)情況下,gcc在鏈接時優(yōu)先使用動態(tài)鏈接庫,只有當(dāng)動態(tài)鏈接庫不存在時才考慮使用靜態(tài)鏈接庫。在編譯時加上-static選項,強(qiáng)制使用靜態(tài)鏈接庫。例如,如果在/home/david/lib/目錄下有鏈接時所需要的庫文件libfoo.so和libfoo.a,為了讓gcc在鏈接時只用到靜態(tài)鏈接庫,可以使用下面的命令:[david@DAVIDdavid]$gccfoo.c-L/home/david/lib-static–ldavid-odavid3.2.2GDB調(diào)試器簡介Linux系統(tǒng)中包含了GNU調(diào)試程序gdb,用來調(diào)試C和C++程序的調(diào)試器。gdb提供如下功能:●運行程序,設(shè)置所有的能影響程序運行的參數(shù)和環(huán)境?!窨刂瞥绦蛟谥付ǖ臈l件下停止運行。●當(dāng)程序停止時,可以檢查程序的狀態(tài)。●修改程序的錯誤,并重新運行程序?!駝討B(tài)監(jiān)視程序中變量的值?!窨梢詥尾綀?zhí)行代碼,觀察程序的運行狀態(tài)。

gdb使用實例1.gdb的啟動在終端窗口中,有兩種方法運行g(shù)db,即在終端窗口的命令行中直接輸入gdb命令或gdbfilename命令運行g(shù)db。方法1:先啟動gdb后執(zhí)行filefilename命令。即gdbfilefilename執(zhí)行上述兩條命令就可啟動gdb,并裝入可執(zhí)行的程序filename。方法2:啟動gdb的同時裝入可執(zhí)行的程序。即gdbfilename其中,filename是要調(diào)試的可執(zhí)行文件。這和啟動gdb后執(zhí)行filefilename命令效果完全一樣。啟動gdb后,就可以使用gdb的命令調(diào)試程序。2.gdb的基本命令gdb中的命令分為以下幾類:工作環(huán)境相關(guān)命令、設(shè)置斷點與恢復(fù)命令、源代碼查看命令、查看運行數(shù)據(jù)相關(guān)命令及修改運行參數(shù)命令。gdb的命令可以通過help命令進(jìn)行查找命令所屬的種類(class),可以從相關(guān)class找到相應(yīng)命令。如下所示:(gdb)help此命令可列出命令的種類。(gdb)helpdata此命令查找data類種的命令,并列出data類種的所有命令。

(gdb)helpcall此命令查找call命令。

直接鍵入“help[command]”來查看命令。(1)工作環(huán)境相關(guān)命令(2)設(shè)置斷點與恢復(fù)命令infob(3)gdb中源碼查看相關(guān)命令(4)gdb中查看運行數(shù)據(jù)相關(guān)命令(5)其他gdb命令●run命令:執(zhí)行當(dāng)前被調(diào)試的程序?!駅ill命令:停止正在調(diào)試的應(yīng)用程序。●watch命令:設(shè)置監(jiān)視點,監(jiān)視表達(dá)式的變化?!馻watch命令:設(shè)置讀寫監(jiān)視點。當(dāng)要監(jiān)視的表達(dá)式被讀或?qū)憰r將應(yīng)用程序掛起。它的語法與watch命令相同。●rwatch命令:設(shè)置讀監(jiān)視點,當(dāng)監(jiān)視表達(dá)式被讀時將程序掛起,等侍調(diào)試。此命令的語法與watch相同?!駃nfobreak命令:顯示當(dāng)前斷點列表,包括每個斷點到達(dá)的次數(shù)?!駃nfofiles命令:顯示調(diào)試文件的信息。●infofunc命令:顯示所有的函數(shù)名?!駃nfolocal命令:顯示當(dāng)前函數(shù)的所有局部變量的信息。●infoprog命令:顯示調(diào)試程序的執(zhí)行狀態(tài)?!馭hell命令:執(zhí)行LinuxShell命令?!駇ake命令:不退出gdb而重新編譯生成可執(zhí)行文件。●Quit命令:退出gdb。(6)gdb中修改運行參數(shù)相關(guān)命令gdb可修改運行時的參數(shù),并使該變量按照用戶當(dāng)前輸入的值繼續(xù)運行。方法為:在單步執(zhí)行的過程中,鍵入命令:set變量=設(shè)定值在此之后,程序就會按照該設(shè)定的值運行了。特別注意,在gcc編譯選項中一定要加入”-g”。只有在代碼處于“運行”或“暫?!睜顟B(tài)時才能查看變量值,設(shè)置斷點后程序在指定行之前停止。3.3make與makefilegccdriver.cstack.cmisc.c–opolish一旦其中一個文件修改了,需要重新執(zhí)行上面的命令。問題:1)所有的文件都需要重新編譯,若這些源文件都很大,編譯時間將大大增加2)若源文件數(shù)目眾多,沒有誰會愿意一次有一次地輸入輸入如此冗長的命令3.3make與makefile如何解決一?如何解決二?如果更新了其中某個文件,只需gcc-c編譯該文件,然后把所有目標(biāo)文件鏈接起來(使用上述兩個解決方案中最后一條命令,得到新的可執(zhí)行文件。#gcc-cdriver.c#gcc-cstack.c#gcc-cmisc.c#gccdriver.ostack.omisc.o–opolish#gcc-cdriver.cstack.cmisc.c#gccdriver.ostack.omisc.o–opolish3.3make與makefileC語言寫的軟件都分割成多個源文件(.c和.h)。這樣結(jié)構(gòu)相對單一的文件,優(yōu)點是:1)源文件短小,易于編輯、編譯和測試,即更具模塊化。2)采用該結(jié)構(gòu)使得只有改動的文件才需要編譯,而不是整個系統(tǒng)。3)支持信息隱藏。即只需知道文件功能,無須知道文件如何寫成。缺點:1)必須知道組成整個系統(tǒng)有哪些文件,文件之間的內(nèi)在聯(lián)系,以及自上次編譯以來哪些文件被修改過;2)編譯多文件的C程序時,需要一次又有一次的輸入兩行又長又臭的命令:一個用于編譯目標(biāo)文件,一個用于把目標(biāo)文件鏈接成可執(zhí)行文件。3.3.1make解決上述問題的方法使用Linux的make工具。它提供了一種可以用于構(gòu)建大規(guī)模工程的、強(qiáng)勁而靈活的機(jī)制。make工具依賴于一個特殊的名為makefile的文件,這個文件描述了系統(tǒng)中各個模塊之間的依賴關(guān)系。系統(tǒng)中部分文件改變時,make根據(jù)這些關(guān)系決定一個需要重新編譯的文件的最小集合。當(dāng)軟件系統(tǒng)較大時,用腦子記住所有頭文件、源文件、目標(biāo)文件和執(zhí)行文件之間的依賴關(guān)系簡直不可能,make可以幫助我們。3.3.1makemake工具的使用語法:make[-fmakefile][options][target]用途:make工具為名為makefile或Makefile的文件,或者由-f指定的文件makefile中指定的依賴關(guān)系對系統(tǒng)進(jìn)行更新。

常用選項:-d顯示調(diào)試信息-f告訴make使用指定文件作為依賴關(guān)系文件,而不是默認(rèn)的makefile或者M(jìn)akefile。如果指定的文件名是-,那么make將從標(biāo)準(zhǔn)輸入讀入依賴文件。

makefile描述模塊之間的依賴關(guān)系make規(guī)則make規(guī)則的語法格式

目標(biāo)文件列表:依賴文件列表

<Tab>命令列表make規(guī)則的另一種寫法

目標(biāo)文件列表:依賴文件列表;命令列表

(命令用分號隔開)3.3.2makefile目標(biāo)文件列表依賴文件列表命令列表<Tab>3.3.2makefile3.3make與makefile包含makefile和源文件的目錄一般被稱為構(gòu)建目錄(buildingdirectory),此例中/root/exam01為構(gòu)建目錄3.3.2makefile為了演示make的功能,現(xiàn)把power.c分割成兩個文件:power.c和compute.c。其中power.c中包含main函數(shù),compute.c中包含compute函數(shù),它被main所調(diào)用。如何得到可執(zhí)行文件power?gcc–ccompute.cpower.cgcccompute.opower.o–opower-lm如何編寫make規(guī)則?powerpower.ocompute.opowerpower.ocompute.opower.ccompute.cmake規(guī)則:power:power.ocompute.o

gccpower.ocompute.o–o

power-lmmake規(guī)則:power.o:power.cgcc–cpower.ccompute.o:compute.cgcc–ccompute.c最終的makefile內(nèi)容:power:power.ocompute.ogccpower.ocompute.o–opower–lmpower.o:power.cgcc–cpower.ccompute.o:compute.cgcc–ccompute.c目標(biāo)文件列表:依賴文件列表

<Tab>命令列表3.3.2makefilecompute.hmain.hmain.cinput.hinput.ccompute.c練習(xí)現(xiàn)把程序結(jié)構(gòu)做進(jìn)一步修改,把它分割成6個文件:main.c、compute.c、input.c、compute.h、input.h和main.h。compute.h和input.h僅包含了compute和input函數(shù)的聲明但沒有定義。定義部分在compute.c和input.c中。main.h中包含的是兩條顯示給用戶的提示信息。powermain.oinput.oinput.hinput.hcompute.ocompute.cmain.cmain.hcompute.hinput.ccompute.h3.3.3makefile的規(guī)則1.make可以自動執(zhí)行像下面例子中的命令:

xxx.o:xxx.czzz.hgcc–cx

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論