




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式操作系統(tǒng)1什麼是嵌入式系統(tǒng)? 嵌入式系統(tǒng)(Embeddedsystem)是“以應(yīng)用為中心,以電腦技術(shù)為基礎(chǔ),並且軟硬體可裁減,適用於應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用電腦系統(tǒng)”,是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的系統(tǒng)“。按照歷史性、本質(zhì)性、普遍性要求,嵌入式系統(tǒng)應(yīng)定義為:“嵌入到對(duì)象體系中的專用電腦系統(tǒng)”?!扒度胄浴?、“專用性”與“電腦系統(tǒng)”是嵌入式系統(tǒng)的三個(gè)基本要素。對(duì)象系統(tǒng)則是指嵌入式系統(tǒng)所嵌入的宿主系統(tǒng).1、從硬體上,將基於CPU的處圍器件,整合到CPU晶片內(nèi)部,比如早期基於X86體系結(jié)構(gòu)下的電腦,CPU只是有運(yùn)算器和累加器的功能,一切晶片要靠外部橋路來(lái)擴(kuò)展實(shí)現(xiàn),象串口之類(lèi)的都是靠外部的的串口控制器晶片實(shí)現(xiàn),而目前的這種串口控制器晶片早已集成到CPU內(nèi)部;PC機(jī)有顯卡,而多數(shù)嵌入式處理器都帶有LCD控制器,但某種意義上就相當(dāng)於顯卡。比較高端的ARM類(lèi)IntelXscale架構(gòu)下的IXP網(wǎng)路處理器CPU內(nèi)部集成PCI控制器,網(wǎng)路處理器引擎等。如何理解“嵌入”2、從軟體上,就是在定制操作系統(tǒng)內(nèi)核裏將應(yīng)用一併選入,編譯後將內(nèi)核下載到ROM中。而在定制操作系統(tǒng)內(nèi)核時(shí)所選擇的應(yīng)用程式組件就是完成了軟體的“嵌入”,比如WinCE在內(nèi)核定制時(shí),會(huì)有相應(yīng)選擇,其中就是wordpad,PDF,MediaPlay等選擇,如果我們選擇了,在CE啟動(dòng)後,就可以在介面中找到這些東西,而PC上的windows操作系統(tǒng),多半的東西都需要我們重新安裝。
3、把軟體內(nèi)核或應(yīng)用文件系統(tǒng)等東西燒到嵌入式系統(tǒng)硬體平臺(tái)中的ROM中就實(shí)現(xiàn)了一個(gè)真正的“嵌入”。如何理解“嵌入”
嵌入式系統(tǒng)主要應(yīng)用領(lǐng)域消費(fèi)電子工業(yè)控制通信設(shè)備、家庭設(shè)備汽車(chē)電子醫(yī)療電子軍事國(guó)防航空航太 嵌入式系統(tǒng)無(wú)處不在,在移動(dòng)電話、數(shù)碼照相機(jī)、MP4、數(shù)字電視的機(jī)頂盒、微波爐、汽車(chē)內(nèi)部的噴油控制系統(tǒng)、ABS(防抱死制動(dòng)系統(tǒng))等裝置或設(shè)備都使用了嵌入式系統(tǒng)。嵌入式技術(shù)正在改變生活為什麼要學(xué)習(xí)嵌入式系統(tǒng)市場(chǎng)需求 中國(guó)具有世界最大嵌入式技術(shù)市場(chǎng),手持儀器設(shè)備、資訊家電、城市建設(shè)、工業(yè)控制、軍事應(yīng)用,……,嵌入式技術(shù)無(wú)處不在。企業(yè)人才需求 軟硬體設(shè)計(jì)人才,應(yīng)用開(kāi)發(fā)人才,綜合性人才,……技術(shù)發(fā)展趨勢(shì)要求
8位、16位、32位,即時(shí)操作系統(tǒng),……目前國(guó)內(nèi)沒(méi)有專門(mén)的嵌入式系統(tǒng)專業(yè)或課程體系 電腦專業(yè):偏軟 電子專業(yè):偏硬為什麼選擇嵌入式行業(yè)?嵌入式開(kāi)發(fā)是目前高薪IT職業(yè)。嵌入式開(kāi)發(fā)不會(huì)像桌面開(kāi)發(fā)那樣容易貶值。嵌入式開(kāi)發(fā)可作為長(zhǎng)期職業(yè)發(fā)展。嵌入式產(chǎn)品無(wú)處不在。就業(yè)起薪較高。
硬體是其基礎(chǔ)、軟體是其核心與靈魂。硬體主要由嵌入式微處理器、週邊硬體設(shè)備組成;軟體主要包括底層系統(tǒng)軟體和用戶應(yīng)用軟體組成嵌入式系統(tǒng)的組成
1.嵌入式系統(tǒng)硬體組成嵌入式處理器(CPU)是嵌入式系統(tǒng)的核心部分ARM、PowerPC、MC68000、MIPS等週邊設(shè)備存儲(chǔ)設(shè)備(如RAM、SRAM、Flash等)通信設(shè)備(如RS-232介面、以太網(wǎng)介面等)顯示設(shè)備(如顯示幕等)嵌入式系統(tǒng)的組成
2.嵌入式系統(tǒng)軟體組成對(duì)於使用操作系統(tǒng)的嵌入式系統(tǒng)來(lái)說(shuō),嵌入式系統(tǒng)軟體結(jié)構(gòu)一般包含4個(gè)層面:即時(shí)操作系統(tǒng)RTOS、應(yīng)用程式介面API層、設(shè)備驅(qū)動(dòng)層、實(shí)際應(yīng)用程式層。
嵌入式系統(tǒng)軟體組成圖嵌入式系統(tǒng)的組成第1章嵌入式Linux操作系統(tǒng)簡(jiǎn)介本章教學(xué)目的及要求瞭解Linux的特徵及組成;瞭解Linux的內(nèi)核結(jié)構(gòu)及相關(guān)源代碼;瞭解常見(jiàn)的嵌入式操作系統(tǒng);瞭解嵌入式系統(tǒng)的開(kāi)發(fā)流程。1.1Linux的特徵及組成1.1.1Linux操作系統(tǒng)發(fā)展歷史 Linux最初是專門(mén)為基於Intel處理器的個(gè)人電腦而設(shè)計(jì)的。Linux的前身指的是由LinusTorvalds維護(hù)開(kāi)發(fā)的開(kāi)放源代碼的類(lèi)Unix操作系統(tǒng)的內(nèi)核。
目前大多數(shù)人用它來(lái)表示以Linux內(nèi)核為基礎(chǔ)的整個(gè)操作系統(tǒng)。從這種意義講,Linux指的是源碼開(kāi)放,包含內(nèi)核和系統(tǒng)工具、完整的開(kāi)發(fā)環(huán)境和應(yīng)用的類(lèi)Unix操作系統(tǒng)。
同時(shí),Linux遵循GNU(GNU’sNotUnix)的通用公共許可證GPL(GeneralPublicLicense),是自由軟體家族中的一員。自由軟體最早由美國(guó)麻省理工學(xué)院MIT的RichardStallman提出。自1984年起,在MIT的支持下,Richard創(chuàng)建了自由軟體基金會(huì)FSF(FreeSoftwareFoundation)。FSF的主要專案是GNU計(jì)畫(huà)(革奴計(jì)畫(huà)),它的目標(biāo)是建立可自由發(fā)佈和可移植的類(lèi)Unix操作系統(tǒng)。同時(shí),Richard創(chuàng)作了通用公共許可證GPL作為GNU的版權(quán)聲明。GPL也叫Copyleft,這與我們平常所說(shuō)的Copyright截然相反。任何人只要遵循GPL,就可以對(duì)Linux內(nèi)核加以修改併發(fā)布給他人使用。
Copyleft標(biāo)誌什麼是自由軟體?1.1.1Linux操作系統(tǒng)發(fā)展歷史2011年11月,Linux內(nèi)核發(fā)佈最新版3.1.2Linux之所以受到廣大電腦愛(ài)好者的喜愛(ài)主要原因: 一是它屬於自由軟體,用戶不用支付任何費(fèi)用就可以獲得它和它的源代碼,並且可以根據(jù)自己的需要對(duì)它進(jìn)行必要的修改和無(wú)約束地繼續(xù)傳播。 另一個(gè)原因是,它具有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做一個(gè)免費(fèi)的操作系統(tǒng)(只是為了愛(ài)好),不會(huì)像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嵌入式開(kāi)發(fā)(單片機(jī)、晶片)1.Linux系統(tǒng)的特點(diǎn)開(kāi)放性:指系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)範(fàn),特別是遵循開(kāi)放系統(tǒng)互連(OSI)國(guó)際標(biāo)準(zhǔn)。多用戶:是指系統(tǒng)資源可以被不同用戶使用,每個(gè)用戶對(duì)自己的資源(例如:檔、設(shè)備)有特定的許可權(quán),互不影響。多任務(wù):它是指電腦同時(shí)執(zhí)行多個(gè)程式,而且各個(gè)程式的運(yùn)行互相獨(dú)立。良好的用戶介面:Linux向用戶提供了3種介面:用戶介面、系統(tǒng)調(diào)用、圖形用戶介面。它利用滑鼠、菜單、窗口、滾動(dòng)條等設(shè)施,給用戶呈現(xiàn)一個(gè)直觀、易操作、交互性強(qiáng)的友好的圖形化介面1.1.2Linux系統(tǒng)的特點(diǎn)及組成設(shè)備獨(dú)立性:是指操作系統(tǒng)把所有外部設(shè)備統(tǒng)一當(dāng)作成文件來(lái)看待,只要安裝它們的驅(qū)動(dòng)程式,任何用戶都可以象使用檔一樣,操縱、使用這些設(shè)備,而不必知道它們的具體存在形式。Linux是具有設(shè)備獨(dú)立性的操作系統(tǒng),它的內(nèi)核具有高度適應(yīng)能力提供了豐富的網(wǎng)路功能:完善的內(nèi)置網(wǎng)路是Linux一大特點(diǎn)。可靠的安全系統(tǒng):Linux採(cǎi)取了許多安全技術(shù)措施,包括對(duì)讀、寫(xiě)控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等,這為網(wǎng)路多用戶環(huán)境中的用戶提供了必要的安全保障。良好的可移植性:是指將操作系統(tǒng)從一個(gè)平臺(tái)轉(zhuǎn)移到另一個(gè)平臺(tái)使它仍然能按其自身的方式運(yùn)行的能力。Linux是一種可移植的操作系統(tǒng),能夠在從微型電腦到大型電腦的任何環(huán)境中和任何平臺(tái)上運(yùn)行。1.1.2Linux系統(tǒng)的特點(diǎn)及組成2.Linux系統(tǒng)的組成Linux一般由以下4部分組成:Linux的內(nèi)核:內(nèi)核是系統(tǒng)的核心,是運(yùn)行程式和管理像磁片和印表機(jī)等硬體設(shè)備的核心程式。LinuxShell:
Shell是系統(tǒng)的用戶介面,它是一個(gè)命令解釋器,它解釋用戶輸入的命令,並且把它們送到內(nèi)核。提供了用戶與內(nèi)核進(jìn)行交互操作的一種介面。Linux應(yīng)用系統(tǒng):標(biāo)準(zhǔn)的Linux系統(tǒng)都有一整套稱為應(yīng)用程式的程式集,包括文本編輯器、編程語(yǔ)言、XWindow、辦公套件、Internet工具、資料庫(kù)等。Linux檔系統(tǒng):
Linux檔系統(tǒng)是檔存放在磁片等存儲(chǔ)設(shè)備上的組織方法。Linux能支持多種目前許多的檔系統(tǒng),如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。1.Linux的內(nèi)核版本 Linux內(nèi)核採(cǎi)用雙樹(shù)結(jié)構(gòu)。一棵樹(shù)是穩(wěn)定樹(shù),主要用於發(fā)行;另一棵樹(shù)是非穩(wěn)定樹(shù)或開(kāi)發(fā)樹(shù),用於產(chǎn)品開(kāi)發(fā)、改進(jìn)。 源代碼版本序號(hào)的形式為r.x.y,其中r為主版本號(hào),代表較大改動(dòng);x為次版本號(hào),表示功能性的改動(dòng);y為末版本號(hào),表示BUG的改動(dòng)(錯(cuò)誤修補(bǔ)的次數(shù))。其中r介於0到9之間,x和y則介於0到99之間。 對(duì)於穩(wěn)定樹(shù)來(lái)說(shuō),x是偶數(shù);對(duì)於開(kāi)發(fā)樹(shù)來(lái)說(shuō),x是比相應(yīng)穩(wěn)定樹(shù)大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只有一個(gè)標(biāo)準(zhǔn)化的版本,但有好多個(gè)不同的發(fā)佈版本。如今的Linux已經(jīng)有超過(guò)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)勢(shì)RedHatLinux是最成熟也是目前最流行的一種Linux發(fā)佈版本,無(wú)論在銷(xiāo)售還是裝機(jī)容量上都居榜首。RedHatLinux可運(yùn)行在多種硬體平臺(tái)上。市場(chǎng)上有大量的文章是針對(duì)RedHatLinux來(lái)介紹的,同時(shí)其站點(diǎn)包含有大量文檔,如Users’Guide、FAQ等。在RedHat的300名工程師中,有6名來(lái)自於全世界最頂尖的Linux核心開(kāi)發(fā)者,7名來(lái)自全球最出色Linux開(kāi)發(fā)工具工程師。全世界,也許只有RedHat能夠把Linux和開(kāi)源技術(shù)以及企業(yè)級(jí)的培訓(xùn)、技術(shù)支持和諮詢?nèi)诤系萌绱嗣烂?。RedHat的培訓(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ì)最高的國(guó)際IT認(rèn)證。RedHat的發(fā)展戰(zhàn)略是每三年發(fā)佈一個(gè)新版本的企業(yè)級(jí)Linux操作系統(tǒng),並且每六個(gè)月發(fā)佈一次更新。第一階段:linux平臺(tái)上的開(kāi)發(fā),包括vi,gcc,gdb,make,jdk,tomcat,mysql..和linux基本操作第二階段:加厚c語(yǔ)言功底《c專家編程》或是java語(yǔ)言第三階段:學(xué)習(xí)unix環(huán)境高級(jí)編程《unix環(huán)境高級(jí)編程》第四階段:linux應(yīng)用系統(tǒng)開(kāi)發(fā)/linux嵌入式開(kāi)發(fā)推薦書(shū)籍《鳥(niǎo)哥的Linux的私房菜基礎(chǔ)學(xué)習(xí)篇》鳥(niǎo)哥、許偉、林彩娥等編著《Linux編程從入門(mén)到精通》宮虎波編著《Linux內(nèi)核完全剖析》趙炯編著實(shí)踐合理利用網(wǎng)路資源:論壇、視頻等如何學(xué)習(xí)Linux1.2.1Linux內(nèi)核結(jié)構(gòu)1.2Linux的內(nèi)核分析內(nèi)核負(fù)責(zé)管理磁片上的檔、記憶體,負(fù)責(zé)啟動(dòng)並運(yùn)行程式,負(fù)責(zé)從網(wǎng)路上接收和發(fā)送數(shù)據(jù)包等等。內(nèi)核實(shí)際是抽象的資源操作到具體硬體操作細(xì)節(jié)之間的介面。
從程式員來(lái)看,Linux內(nèi)核抽象了許多硬體細(xì)節(jié),使程式員可以以統(tǒng)一的方式進(jìn)行數(shù)據(jù)處理。
從用戶來(lái)看,Linux是一個(gè)資源管理者,幫助用戶方便的管理自己的數(shù)據(jù),完成自己的工作。
Linux是多用戶、多任務(wù)的操作系統(tǒng)。Linux內(nèi)核保證每個(gè)用戶都象自己獨(dú)佔(zhàn)記憶體和其他硬體資源一樣運(yùn)行其進(jìn)程,並使各進(jìn)程公平合理地使用各種資源。1.2.2Linux內(nèi)核的作用1.2.3Linux內(nèi)核的抽象結(jié)構(gòu)
5個(gè)子系統(tǒng)提供對(duì)各種網(wǎng)路協(xié)議和網(wǎng)路硬體的支持。分為網(wǎng)路協(xié)議和網(wǎng)路設(shè)備驅(qū)動(dòng)兩部分。保證多個(gè)進(jìn)程安全地共用記憶體區(qū)域。負(fù)責(zé)控制進(jìn)程對(duì)CPU的訪問(wèn)。支持進(jìn)程間各種通信機(jī)制為所有設(shè)備提供統(tǒng)一的介面,支持?jǐn)?shù)十種不同的檔系統(tǒng)。包括邏輯檔系統(tǒng)和設(shè)備驅(qū)動(dòng)程式。各個(gè)子系統(tǒng)之間的依賴關(guān)係互相依賴。在多道程序環(huán)境下,程式要運(yùn)行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程的第一件事情,就是將程式和數(shù)據(jù)裝入記憶體。依賴
支持共用記憶體通信機(jī)制,這種機(jī)制允許兩個(gè)進(jìn)程除了擁有自己的私有空間,還可以存取共同的記憶體區(qū)域。虛擬檔系統(tǒng)利用網(wǎng)路介面支持網(wǎng)路檔系統(tǒng)(NFS)記憶體管理利用虛擬檔系統(tǒng)支持交換,交換進(jìn)程定期由調(diào)度程式調(diào)度,這也是記憶體管理依賴於進(jìn)程調(diào)度的唯一原因。各個(gè)子系統(tǒng)之間的依賴關(guān)係
進(jìn)程調(diào)度與記憶體管理之間的關(guān)係:這兩個(gè)子系統(tǒng)互相依賴。在多道程序環(huán)境下,程式要運(yùn)行必須為之創(chuàng)建進(jìn)程,而創(chuàng)建進(jìn)程的第一件事情,就是將程式和數(shù)據(jù)裝入記憶體。進(jìn)程間通信與記憶體管理的關(guān)係:進(jìn)程間通信子系統(tǒng)要依賴記憶體管理支持共用記憶體通信機(jī)制,這種機(jī)制允許兩個(gè)進(jìn)程除了擁有自己的私有空間,還可以存取共同的記憶體區(qū)域。
虛擬檔系統(tǒng)與網(wǎng)路介面之間的關(guān)係:虛擬檔系統(tǒng)利用網(wǎng)路介面支持網(wǎng)路檔系統(tǒng)(NFS)。記憶體管理與虛擬檔系統(tǒng)之間的關(guān)係:記憶體管理利用虛擬檔系統(tǒng)支持交換,交換進(jìn)程定期由調(diào)度程式調(diào)度,這也是記憶體管理依賴於進(jìn)程調(diào)度的唯一原因。當(dāng)一個(gè)進(jìn)程存取的記憶體映射被換出時(shí),記憶體管理向檔系統(tǒng)發(fā)出請(qǐng)求,同時(shí),掛起當(dāng)前正在運(yùn)行的進(jìn)程。1.2.3Linux內(nèi)核的抽象結(jié)構(gòu)
一般在Linux系統(tǒng)中的/usr/src/Linux-*.*.*(*.*.*代表內(nèi)核版本)目錄下就是內(nèi)核源代碼。Linux內(nèi)核非常龐大,包括驅(qū)動(dòng)程式在內(nèi)有數(shù)百兆之多。1.2.4Linux內(nèi)核的源代碼1.2.4Linux內(nèi)核的源代碼arch目錄:包含了體系結(jié)構(gòu)相關(guān)部分的內(nèi)核代碼,其中的每一個(gè)目錄都代表一種硬體平臺(tái),比如ARM平臺(tái)和PC機(jī)使用的i386。對(duì)於任何一種平臺(tái),都包括以下5個(gè)目錄:boot、kernel、lib、mm和math-xxx。顯然,移植工作的重點(diǎn)就是arch目錄下的檔。/mm目錄:包含了所有的記憶體管理代碼。/init目錄:包含了內(nèi)核的初始化代碼(不是系統(tǒng)的引導(dǎo)代碼),有main.c和version.c兩個(gè)檔。內(nèi)核從此工作。/fs目錄:包含了Linux所支持的所有檔系統(tǒng)。一般來(lái)說(shuō),檔系統(tǒng)與硬體無(wú)關(guān)。/ipc目錄:包含了核心進(jìn)程間的通信代碼。/kernel目錄:包含了內(nèi)核管理的核心代碼。/include目錄:包含了建立內(nèi)核代碼時(shí)所需的大部分頭檔,比如,與平臺(tái)無(wú)關(guān)的頭檔在include/linux子目錄下。此外,也包括了不同平臺(tái)需要的庫(kù)檔,比如,asm-arm是ARM平臺(tái)需要的庫(kù)檔。/net目錄:包含了和網(wǎng)路相關(guān)的代碼,其每一個(gè)子目錄對(duì)應(yīng)於網(wǎng)路的一個(gè)方面。/lib目錄:包含了所有的庫(kù)代碼。其他目錄:Documentation目錄包含了許多非常詳細(xì)的文檔。Scripts目錄主要在配置內(nèi)核時(shí)用到,存放了配置內(nèi)核的一些腳本檔,如“makemenuconfig”命令。1.2.4Linux內(nèi)核的源代碼1.3常見(jiàn)的嵌入式操作系統(tǒng)1.3.1嵌入式操作系統(tǒng)概念和分類(lèi)
操作系統(tǒng)(OS,OperatingSystem):
是隱藏底層不同硬體的差異,向在其上運(yùn)行的應(yīng)用程式提供一個(gè)統(tǒng)一的調(diào)用介面。
操作系統(tǒng)主要完成三項(xiàng)任務(wù):
記憶體管理多任務(wù)管理週邊設(shè)備管理。應(yīng)用程式操作系統(tǒng)系統(tǒng)介面驅(qū)動(dòng)程式硬體硬體硬體硬體1.3.1嵌入式操作系統(tǒng)概念和分類(lèi)概念嵌入式操作系統(tǒng)(EmbeddedOperatingSystem)
負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬體資源的分配、調(diào)度、控制、協(xié)調(diào);能夠通過(guò)加載/卸載某些模組來(lái)達(dá)到系統(tǒng)所要求的功能。EOS是相對(duì)於一般操作系統(tǒng)而言的,它除具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、檔處理等外,還有以下特點(diǎn):強(qiáng)穩(wěn)定性,弱交互性:具有很強(qiáng)的穩(wěn)定性;較強(qiáng)的即時(shí)性;可伸縮性:開(kāi)放、可伸縮性的體系結(jié)構(gòu);外設(shè)介面的統(tǒng)一性:提供各種設(shè)備驅(qū)動(dòng)介面。即時(shí)操作系統(tǒng)(Real-TimeOperatingSystem,RTOS),是指操作系統(tǒng)本身要能在一個(gè)固定時(shí)限內(nèi)對(duì)程式調(diào)用(或外部事件)做出正確的反應(yīng),亦即對(duì)時(shí)序與穩(wěn)定性的要求十分嚴(yán)格。目前國(guó)際較為知名的有:VxWorks、NeutrinoRTOS、NucleusPlus、OS/9、VRTX、LinuxOS,RTLinux、BlueCatRT等。通用型操作系統(tǒng):執(zhí)行性能與反應(yīng)速度比起即時(shí)操作系統(tǒng),相對(duì)沒(méi)有那麼嚴(yán)格。目前較知名的有:WindowsCE、PalmOS、TimeSysLinux/GPL、BlueCatLinux等。
嵌入式操作系統(tǒng)的性能通常取決於核心程式,而核心的工作主要在任務(wù)管理(TaskManagement)、任務(wù)調(diào)度(TaskScheduling)、進(jìn)程間的通信(IPC)、記憶體管理(MemoryManagement)。1.3.1嵌入式操作系統(tǒng)概念和分類(lèi)分類(lèi)比較著名的嵌入式操作系統(tǒng)(瞭解)嵌入式LinuxμC/OS-IIWindowsCEVxWorksQNX 利用Linux搭建嵌入式操作系統(tǒng)是近年來(lái)最令人振奮的方案之一,Linux將來(lái)可能會(huì)成為嵌入式系統(tǒng)主流操作系統(tǒng)。
1.3.2嵌入式Linux(1)嵌入式Linux是按照嵌入式操作系統(tǒng)的要求而設(shè)計(jì)的一種小型操作系統(tǒng)。由一個(gè)內(nèi)核及一些根據(jù)需要進(jìn)行定制的系統(tǒng)模組組成。其kernel很小,一般只有幾百kB左右。即使加上其他必須的模組和應(yīng)用程式,所需的存儲(chǔ)空間也很小。它有多任務(wù)、多進(jìn)程的系統(tǒng)特徵,有些還具有即時(shí)性。
1.3.2嵌入式Linux(2)嵌入式Linux操作系統(tǒng)的優(yōu)勢(shì)(1)、支持多種體系結(jié)構(gòu); 目前Linux能夠支持x86,ARM,IPS,APARC等多種CPU的體系機(jī)構(gòu),已被移植到數(shù)十種硬體平臺(tái)上。(2)、多任務(wù),內(nèi)核穩(wěn)定,可定制,源代碼開(kāi)放;(3)、強(qiáng)大的網(wǎng)路支持功能; 支持TCP/IP協(xié)議,及其上的高層協(xié)議,如ftp,Telnet,http等。同時(shí)支持Socket網(wǎng)路編程。(4)、支持多檔系統(tǒng);
linux支持FAT32,EXT2,EXT3等多種檔系統(tǒng),支持虛擬檔系統(tǒng),同時(shí)還可以連接其他的檔系統(tǒng),如ROMFS,JFFS等檔系統(tǒng)。嵌入式Linux操作系統(tǒng)的優(yōu)勢(shì)(5)、驅(qū)動(dòng)豐富,支持大量的外設(shè);
linux支持基本所有的PC外設(shè),具有豐富的外設(shè)驅(qū)動(dòng)程式。(6)、Linux具備一整套工具鏈。容易自行建立嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境、交叉運(yùn)行環(huán)境,並且可以跨越嵌入式系統(tǒng)開(kāi)發(fā)中仿真工具的障礙。一般開(kāi)發(fā)嵌入式操作系統(tǒng)的程式調(diào)試和跟蹤都是使用仿真器來(lái)實(shí)現(xiàn)的,而使用Linux系統(tǒng)做原型的時(shí)候,可以繞過(guò)這個(gè)障礙,直接使用內(nèi)核調(diào)試器來(lái)做操作系統(tǒng)的內(nèi)核調(diào)試和查錯(cuò)。μC/OS是一個(gè)典型的即時(shí)操作系統(tǒng)。該系統(tǒng)從1992年開(kāi)始發(fā)展,目前流行的是第二個(gè)版本,即μC/OSII。名稱μC/OS-II來(lái)源於術(shù)語(yǔ)Micro-ControllerOperatingSystem(微控制器操作系統(tǒng))。它通常也稱為MUCOS或者UCOS。1.3.3μC/OS-IIμC/OS-Ⅱ只是一個(gè)即時(shí)操作系統(tǒng)內(nèi)核,其特點(diǎn):提供任務(wù)調(diào)度、任務(wù)管理、時(shí)間管理、記憶體管理和任務(wù)間通信和同步等基本功能;沒(méi)有提供輸入輸出管理、檔管理、網(wǎng)路等額外的服務(wù)。源碼開(kāi)放及可擴(kuò)展?;秲?yōu)先順序調(diào)度的搶佔(zhàn)式即時(shí)內(nèi)核,在內(nèi)核之上提供最基本的系統(tǒng)服務(wù)。例如:信號(hào)量、郵箱、消息佇列、記憶體管理、中斷管理等。應(yīng)用領(lǐng)域包括可攜式電話、照相機(jī)、醫(yī)療器械、音響設(shè)備、發(fā)動(dòng)機(jī)控制、高速公路電話系統(tǒng)、自動(dòng)支付終端、交換機(jī)等。2000年,得到美國(guó)航空管理局(FAA)的認(rèn)證,可以用於飛行器中。1.3.3μC/OS-IIμC/OS-Ⅱ具有良好的可移植性。μC/OS-Ⅱ的大部分代碼都是用C語(yǔ)言寫(xiě)成的,只有與處理器的硬體相關(guān)的一部分代碼用組合語(yǔ)言編寫(xiě)。目前μC/OS-Ⅱ支持ARM、PowerPC、MIPS、68k/ColdFire和x86等多種體系結(jié)構(gòu)。是一個(gè)源碼公開(kāi)、可移植、可裁減、佔(zhàn)用資源少、搶先式的即時(shí)多任務(wù)操作系統(tǒng)。其絕大部分源碼採(cǎi)用ANSIC寫(xiě)的,移植性好。高校教學(xué)可免費(fèi)使用。目前的版本是μC/OS-IIV2.72。
1.3.3μC/OS-IIWindowsCE,微軟公司,它是從整體上為資源有限的平臺(tái)設(shè)計(jì)的多線程、完整優(yōu)先權(quán)、多任務(wù)的操作系統(tǒng)。模組化設(shè)計(jì),並允許針對(duì)從掌上電腦到專用的工控電子設(shè)備進(jìn)行定制。操作系統(tǒng)的基本內(nèi)核需要至少200KB的ROM。主要應(yīng)用於PDA,智能電話(smartphone)等多媒體網(wǎng)路產(chǎn)品。
嵌入式操作系統(tǒng)領(lǐng)域競(jìng)爭(zhēng)激烈,微軟公司不得不應(yīng)付來(lái)自Linux等免費(fèi)系統(tǒng)的衝擊。微軟公司在WindowsCE.Net4.2版中,增加一項(xiàng)授權(quán)價(jià)僅3美元的精簡(jiǎn)版本W(wǎng)indowsCE.NetCore?;镜墓δ馨ǎ杭磿r(shí)OS核心(RealTimeOSKernel),新檔系統(tǒng),IPv4、IPv6、WLAN、藍(lán)牙等聯(lián)網(wǎng)功能,WindowsMediaCodec,.Net開(kāi)發(fā)框架以及SQLServer.ce。低價(jià)版本的WindowsCE.Net,主要是看好語(yǔ)音電話、WLAN的無(wú)線橋接器和個(gè)性化視聽(tīng)設(shè)備的成長(zhǎng)潛力。1.3.4WindowsCE嵌入式LinuxOS與WindowsCE相比的優(yōu)點(diǎn)第一:Linux是開(kāi)放源代碼,遍佈全球的眾多Linux愛(ài)好者都是Linux開(kāi)發(fā)者的強(qiáng)大技術(shù)支持者;WindowsCE6.0內(nèi)核全部開(kāi)放,GUI不開(kāi)放。第二:Linux的內(nèi)核小、效率高;WindowsCE相比,佔(zhàn)用過(guò)多的RAM。第三:Linux是開(kāi)放源代碼的OS,在價(jià)格上極具競(jìng)爭(zhēng)力,適合中國(guó)國(guó)情。WindowsCE需要版權(quán)費(fèi)用。第四:Linux不僅支持x86晶片,還是一個(gè)跨平臺(tái)的系統(tǒng)。更換CPU時(shí)就不會(huì)遇到更換平臺(tái)的困擾。第五:Linux內(nèi)核的結(jié)構(gòu)在網(wǎng)路方面是非常完整的,它提供了對(duì)包括十兆位、百兆位及千兆位的以太網(wǎng)路,還有無(wú)線網(wǎng)路、Tokenring(令牌環(huán))和光纖甚至衛(wèi)星的支持,WindowsCE的網(wǎng)路功能也比較強(qiáng)大。嵌入式LinuxOS與WindowsCE相比的弱點(diǎn)第一:LINUX開(kāi)發(fā)難度較高,需要很高的技術(shù)實(shí)力,WINCE開(kāi)發(fā)相對(duì)較容易,開(kāi)發(fā)週期短,內(nèi)核完善,主要是應(yīng)用層開(kāi)發(fā)。第二:LINUX核心調(diào)試工具不全,調(diào)試不太方便,尚沒(méi)有很好的用戶圖形介面,WINCE的GUI豐富,開(kāi)發(fā)工具強(qiáng)大;第三,系統(tǒng)維護(hù)難度大。Linux在使用較完整的GUI時(shí)一般會(huì)佔(zhàn)用較大的記憶體,如果去掉部分無(wú)用的功能來(lái)減小使用的記憶體,但是如果不仔細(xì),將引起新的問(wèn)題。1.4嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)
1.硬體層:由嵌入式微處理器、週邊電路和外設(shè)組成。週邊電路有:電源電路、複位電路、調(diào)試介面和記憶體電路,就構(gòu)成一個(gè)嵌入式核心控制模組。
操作系統(tǒng)和應(yīng)用程式都可以固化在ROM或者Flash中。有些嵌入式系統(tǒng)還包括:LCD、鍵盤(pán)、USB介面,以及其他一些功能的擴(kuò)展電路。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)2.中間層:硬體層與軟體層之間為中間層,也稱為BSP(BoardSupportPackage,板級(jí)支持包)。作用:將系統(tǒng)軟體與底層硬體部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動(dòng)程式與硬體無(wú)關(guān);功能:具有相關(guān)硬體的初始化、數(shù)據(jù)的輸入/輸出操作和硬體設(shè)備的配置等功能。BSP是主板硬體環(huán)境和操作系統(tǒng)的中間介面,是軟體平臺(tái)中具有硬體依賴性的那一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好地運(yùn)行於硬體主板上。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)3.軟體層 主要是操作系統(tǒng),有的還包括檔系統(tǒng)、圖形用戶介面和網(wǎng)路系統(tǒng)等。操作系統(tǒng)是一個(gè)標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時(shí)器等資源都封裝起來(lái),以方便用戶使用。4.功能層 由基於操作系統(tǒng)開(kāi)發(fā)的應(yīng)用程式組成,用來(lái)完成對(duì)被控對(duì)象的控制功能。功能層是面向被控對(duì)象和用戶的,為了方便用戶操作,往往需要具有友好的人機(jī)介面。1.4.1嵌入式系統(tǒng)總體結(jié)構(gòu)1.4.2嵌入式系統(tǒng)的開(kāi)發(fā)特點(diǎn)1.採(cǎi)用宿主機(jī)/目標(biāo)機(jī)方式,所需要的開(kāi)發(fā)環(huán)境稱為交叉開(kāi)發(fā)環(huán)境2.為了保證穩(wěn)定性和即時(shí)性,選用RTOS開(kāi)發(fā)平臺(tái)3.生成代碼需要固態(tài)化存儲(chǔ)4.軟體代碼具有高質(zhì)量、高可靠性1.4.2嵌入式系統(tǒng)的開(kāi)發(fā)特點(diǎn)嵌入式系統(tǒng)的應(yīng)用開(kāi)發(fā)一般由5個(gè)階段構(gòu)成:需求分析設(shè)計(jì)規(guī)格說(shuō)明書(shū)(功能性和非功能性需求、任務(wù)和目標(biāo))體系結(jié)構(gòu)設(shè)計(jì)如何實(shí)現(xiàn)需求,對(duì)硬體、軟體的功能劃分,硬體、軟體、操作系統(tǒng)的選型硬體/軟體設(shè)計(jì)軟體(應(yīng)用程式)和硬體的詳細(xì)設(shè)計(jì)系統(tǒng)集成軟體和硬體集成調(diào)試代碼固化。將程式寫(xiě)入到Flash等非易失性記憶體中。各階段間往往要求不斷地反復(fù)和修改,直到最終完成設(shè)計(jì)目標(biāo)。1.4.3嵌入式系統(tǒng)開(kāi)發(fā)流程系統(tǒng)的調(diào)試有如下幾種:1.根源程式模擬器(Simulator)
2.即時(shí)線上仿真系統(tǒng)ICE(In-CircuitEmulator)方式--是一種完全仿造調(diào)試目標(biāo)CPU設(shè)計(jì)的儀器3.監(jiān)控器方式4.線上調(diào)試器方式ICD5.高級(jí)語(yǔ)言編譯器(CompilerTools)1.4.4嵌入式系統(tǒng)調(diào)試有關(guān)嵌入式系統(tǒng)學(xué)習(xí)的四個(gè)層面:
嵌入式系統(tǒng)分為4層,硬體層、驅(qū)動(dòng)層、操作系統(tǒng)層和應(yīng)用層。1、硬體層,是整個(gè)嵌入式系統(tǒng)的根本,如果現(xiàn)在單片機(jī)及介面這塊很熟悉,並且能用C和組合語(yǔ)言來(lái)編程的話,從嵌入式系統(tǒng)的硬體層走起來(lái)相對(duì)容易,硬體層也是驅(qū)動(dòng)層的基礎(chǔ),一個(gè)優(yōu)秀的驅(qū)動(dòng)工程師是要能夠看懂硬體的電路圖和自行完成CPLD的邏輯設(shè)計(jì)的,同時(shí)還要對(duì)操作系統(tǒng)內(nèi)核及其調(diào)度性相當(dāng)?shù)氖煜さ摹5搀w平臺(tái)是基礎(chǔ),增值還要靠軟體。硬體層比較適合於,電子、通信、自動(dòng)化、機(jī)電一體、資訊工程類(lèi)專業(yè)的人來(lái)搞,需要掌握的專業(yè)基礎(chǔ)知識(shí)有,單片機(jī)原理及介面技術(shù)、微機(jī)原理及介面技術(shù)、C語(yǔ)言。
2、驅(qū)動(dòng)層,這部分比較難,驅(qū)動(dòng)工程師不僅要能看懂電路圖還要能對(duì)操作系統(tǒng)內(nèi)核十分的精通,以便其所寫(xiě)的驅(qū)動(dòng)程式在系統(tǒng)調(diào)用時(shí),不會(huì)獨(dú)佔(zhàn)操作系統(tǒng)時(shí)間片,而導(dǎo)至其他任務(wù)不能動(dòng)行,不懂操作系統(tǒng)內(nèi)核架構(gòu)和即時(shí)調(diào)度性,沒(méi)有良好的驅(qū)動(dòng)編寫(xiě)風(fēng)格,按大多數(shù)書(shū)上所說(shuō)添加的驅(qū)動(dòng)的方式,很多人都能做到,但可能連個(gè)初級(jí)的驅(qū)動(dòng)工程師的水準(zhǔn)都達(dá)不到,這樣所寫(xiě)的驅(qū)動(dòng)在應(yīng)用調(diào)用時(shí)就如同windows下我們打開(kāi)一個(gè)程式運(yùn)行後,再打開(kāi)一個(gè)程式時(shí),要不就是中斷以前的程式,要不就是等上一會(huì)才能運(yùn)行後來(lái)打開(kāi)的程式。想做個(gè)好的驅(qū)動(dòng)人員沒(méi)有三、四年功底,操作系統(tǒng)內(nèi)核不研究上幾遍,是太不容易成功的,但其工資在嵌入式系統(tǒng)四層中可是最高的。驅(qū)動(dòng)層比較適合於電子、通信、自動(dòng)化、機(jī)電一體、資訊工程類(lèi)專業(yè)尤其是電腦偏體系結(jié)構(gòu)類(lèi)專業(yè)的人來(lái)搞,除硬體層所具備的基礎(chǔ)學(xué)科外,還要對(duì)數(shù)據(jù)結(jié)構(gòu)與演算法、操作系統(tǒng)原理、編譯原理都要十分精通瞭解。3、操作系統(tǒng)層,對(duì)於操作系統(tǒng)層目前可能只能說(shuō)是簡(jiǎn)單的移植,而很少有人來(lái)自已寫(xiě)操作系統(tǒng),或者寫(xiě)出缺胳膊少腿的操作系統(tǒng)來(lái),這部分工作大都由驅(qū)動(dòng)工程師來(lái)完成。操作系統(tǒng)是負(fù)責(zé)系統(tǒng)任務(wù)的調(diào)試、磁片和文件的管理,而嵌入式系統(tǒng)的即時(shí)性十分重要。據(jù)說(shuō),XP操作系統(tǒng)是微軟投入300人用兩年時(shí)間才搞定的,總時(shí)工時(shí)是600人年,中科院軟體所自己的女?huà)zHopen操作系統(tǒng)估計(jì)也得花費(fèi)幾百人年才能搞定。4、應(yīng)用層,相對(duì)來(lái)講較為容易,如果會(huì)在windows下進(jìn)行編程介面函數(shù)調(diào)用,到嵌入式操作系統(tǒng)下只是編譯和開(kāi)發(fā)環(huán)境有相應(yīng)的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統(tǒng)中涉及的演算法由專業(yè)演算法的人來(lái)處理的,不必歸結(jié)到嵌入式系統(tǒng)範(fàn)疇內(nèi)。但如果涉及嵌入式系統(tǒng)下麵嵌入式資料庫(kù)、基於嵌入式系統(tǒng)的網(wǎng)路編程和基於某此應(yīng)用層面的協(xié)議應(yīng)用開(kāi)發(fā)(比如基於SIP、H.323、Astrisk)方面又較為複雜,並且有難度了。學(xué)習(xí)目標(biāo)與定位
先有目標(biāo),再去定位。學(xué)ARM,從硬體上講,一方面就是學(xué)習(xí)介面電路設(shè)計(jì),另一方面就是學(xué)習(xí)彙編和C語(yǔ)言的板級(jí)編程。如果從軟體上講,就是要學(xué)習(xí)基於ARM處理器的操作系統(tǒng)層面的驅(qū)動(dòng)、移植。這些對(duì)於初學(xué)都來(lái)說(shuō)必須明確,要麼從硬體著手開(kāi)始學(xué),要麼從操作系統(tǒng)的熟悉到應(yīng)用開(kāi)始學(xué),但不管學(xué)什麼,只要不是純的操作系統(tǒng)級(jí)以上基於API的應(yīng)用層的編程,硬體的寄存器類(lèi)的東西還是要能看懂的,基於板級(jí)的彙編和C編程還是要會(huì)的。因此針對(duì)於嵌入式系統(tǒng)的硬體層和驅(qū)動(dòng)層的人,ARM的介面電路設(shè)計(jì)、ARM的C語(yǔ)言和組合語(yǔ)言編程及調(diào)試開(kāi)發(fā)環(huán)境還是需要掌握的。
學(xué)習(xí)目標(biāo)與定位因此對(duì)於初學(xué)者必然要把握住方向,自己的目標(biāo)是什麼,自己要在那一層面上走。然後再著手學(xué)習(xí)較好,與ARM相關(guān)的嵌入式系統(tǒng)的較為實(shí)際的兩個(gè)層面硬體層和驅(qū)動(dòng)層,不管學(xué)好了那一層都會(huì)很有前途的。
如果想從嵌入式系統(tǒng)的應(yīng)用層面的走的話,可能與ARM及其體系相去較遠(yuǎn),要著重研究基於嵌入式操作系統(tǒng)的環(huán)境應(yīng)用與相應(yīng)開(kāi)發(fā)工具,比如WinCE操作系統(tǒng)下的EVC應(yīng)用開(kāi)發(fā)(與windows下的VC相類(lèi)似),如果想再有突破就往某些音視頻類(lèi)的協(xié)議上靠,比如VOIP領(lǐng)域的基於SIP或H.323協(xié)議的應(yīng)用層開(kāi)發(fā),或是基於嵌入式網(wǎng)路資料庫(kù)的開(kāi)發(fā)等等。對(duì)於初學(xué)者來(lái)講,要量力而行,不要認(rèn)為驅(qū)動(dòng)層工資高就把它當(dāng)成方向了,要結(jié)合自身特點(diǎn),選擇適合自己的目標(biāo)。嵌入式系統(tǒng)的學(xué)習(xí)1、分析一種嵌入式操作系統(tǒng)的源代碼。根據(jù)具體需要,在瞭解操作系統(tǒng)基本原理的情況下,選擇需要瞭解的部分,重點(diǎn)分析。建議不通讀。2、分析一種通信協(xié)議棧的實(shí)現(xiàn)方式並熟悉相應(yīng)軟體的使用。3、深入瞭解一種嵌入式開(kāi)發(fā)。推薦使用GNUTools開(kāi)發(fā)工具。2.1系統(tǒng)管理命令1.登錄和退出 Login: Logout:2.關(guān)機(jī)或重新啟動(dòng)命令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)並重新啟動(dòng)3.重新開(kāi)機(jī)命令reboot$reboot2.1系統(tǒng)管理命令4.聯(lián)機(jī)幫助命令 (1)man顯示幫助手冊(cè)
$manCmd$man–fCmd(只顯示命令功能) $man-kfiles (2)系統(tǒng)幫助文檔
#helpCommand適用於內(nèi)部命令例如:helpcd #Command–help/-h適用於外部命令例如:ls--help(3)whereis用於查詢某個(gè)命令存在於哪個(gè)目錄
$whereis-brm內(nèi)部命令:是指寫(xiě)在bash源碼裏面的,其執(zhí)行速度比外部命令快,因?yàn)榻馕鰞?nèi)部命令shell不需要?jiǎng)?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.增加用戶帳號(hào)
useradd[選項(xiàng)]用戶名
6.修改用戶帳號(hào)
usermod[-LU][-c<備註>][-d<登入目錄>][-e<有效期限>][-f<緩衝天數(shù)>][-g<群組>][-G<群組>][-l<帳號(hào)名稱>][-s][-u][用戶帳號(hào)]7.刪除用戶帳號(hào)
userdel[-r][用戶帳號(hào)]2.1系統(tǒng)管理命令8.組增加命令 groupadd[-r]group9.組帳號(hào)修改命令
groupmod[-g<群組識(shí)別碼><-o>][-n<新群組名稱>][群組名稱]10.刪除組帳號(hào) groupdel[群組名稱]2.1系統(tǒng)管理命令11.口令維護(hù)命令 passwd[用戶名]12.組中用戶成員的維護(hù)
(1)添加用戶到使用的組的命令格式為: gpasswd–a用戶帳號(hào)名組帳號(hào)名 (2)從組中刪除用戶的命令格式為: gpasswd–d用戶帳號(hào)名組帳號(hào)名 (3)設(shè)置用戶為組管理員的命令格式為: gpasswd-A組管理員用戶列表用戶組
13.顯示用戶和組的狀態(tài)命令id
id
[-gGnru][--help][--version][用戶名稱] 2.1系統(tǒng)管理命令14.用戶切換命令su su[-flmp][-][-c<指令>][-s][用戶帳號(hào)]15.顯示指定用戶所屬的組命令 groups用戶名16.監(jiān)控後臺(tái)進(jìn)程命令ps
ps[選項(xiàng)]17.結(jié)束進(jìn)程
kill[-s信號(hào)|-p][-a]進(jìn)程號(hào)
18.進(jìn)程睡眠 sleep[--help][--version]number[smhd]2.2檔管理命令1.顯示檔內(nèi)容命令cat
cat[選項(xiàng)]檔列表2.複製檔命令cp
cp[選項(xiàng)]原始檔案目標(biāo)檔
cp[選項(xiàng)]原始檔案組目標(biāo)目錄3.刪除檔或目錄命令rm
rm[選項(xiàng)]檔列表-rf選項(xiàng)和通配符4.移動(dòng)或更改檔、目錄名稱命令mv mv[-f][-i]檔1檔2
mv[-f][-i]目錄1目錄2
mv[-f][-i]檔列表目錄5.
鏈接檔的命令
ln[選項(xiàng)]目標(biāo)[鏈接名]
ln[選項(xiàng)]目標(biāo)目錄2.3
目錄及其操作命令1.列出檔或目錄
ls[選項(xiàng)][檔目錄列表]-l–a選項(xiàng)2.改變工作目錄 cd[name]3.建立新目錄
mkdir[-m模式][-p目錄名]目錄4.刪除目錄
rmdir-p目錄列表5.變更檔或目錄的許可權(quán)命令chmod chmod[選項(xiàng)]檔和目錄列表6.顯示當(dāng)前工作目錄命令pwd
pwd[--help][--version]7.分頁(yè)查看檔內(nèi)容more
more檔案名
cat檔案名|more2.3目錄及其操作命令Linux是一個(gè)多用戶的操作系統(tǒng),有著完善的許可權(quán)管理機(jī)制。不同的用戶有著不同的許可權(quán),這些許可權(quán)決定了用戶能在Linux下執(zhí)行哪些操作。第一項(xiàng)是由10個(gè)字元組成的字串,例如“drwxr-xr-x”,說(shuō)明了該檔/目錄的檔類(lèi)型和文件訪問(wèn)許可權(quán)。第一個(gè)字元表示檔類(lèi)型。從左起第2個(gè)字元到第10個(gè)字元表示檔訪問(wèn)許可權(quán)。並且以3個(gè)字元為一組,分為3組。組中的每個(gè)位置對(duì)應(yīng)一個(gè)指定的許可權(quán),其順序?yàn)椋鹤x、寫(xiě)、執(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ù)字模式來(lái)表示,3個(gè)八進(jìn)制數(shù)字分別表示用戶、用戶所在組成員、其他成員的許可權(quán)。許可權(quán)的順序是rwx,分別是讀、寫(xiě)、執(zhí)行例如:許可權(quán)是rw-對(duì)應(yīng)的八進(jìn)制數(shù)為6.2.4檔傳輸與編輯命令1.查找檔命令find
find查找位置[選項(xiàng)參數(shù)]2.查找檔中的字串命令grep grep[選項(xiàng)]匹配字串檔列表3.排序命令sort
sort[選項(xiàng)]檔2.5檔壓縮與磁片掛載命令1.檔壓縮命令gzip
gzip[選項(xiàng)]壓縮(解壓縮)的檔案名
2.檔打包命令tar tar[主選項(xiàng)+輔選項(xiàng)]檔或者目錄3.檔解壓縮命令unzip
unzip[選項(xiàng)]壓縮檔案名.zip4.掛載的mount命令 mount–oiocharset=cp936/dev/cdrom/mnt/cdrom15.卸載的umount命令 umount/mnt/cdrom2.6網(wǎng)路操作命令1.ifconfig命令
ifconfig-interface[options]address2.ip命令
ip[OPTIONS]OBJECT[COMMAND[ARGUMENTS]]3.ping命令
ping[選項(xiàng)]IP地址
4.netstat命令
netstat[選項(xiàng)][-A][--ip]5.telnet命令
telnet[選項(xiàng)][主機(jī)名稱IP地址<通信端口>]6.ftp命令
ftp[-dignv][主機(jī)名稱或IP地址]建立交叉編譯環(huán)境啟動(dòng)代碼Bootloader的實(shí)現(xiàn)/移植kernel的配置/移植/編譯根檔系統(tǒng)Cramfs的實(shí)現(xiàn)嵌入式開(kāi)發(fā)流程3.1嵌入式Linux的開(kāi)發(fā)環(huán)境
3.1.1嵌入式Linux開(kāi)發(fā)環(huán)境建立有幾個(gè)嵌入式Linux開(kāi)發(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。交叉編譯 交叉編譯就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。 這裏說(shuō)的平臺(tái)分別指的是主機(jī)平臺(tái)Host和目標(biāo)平臺(tái)Target。 就我們?cè)贏RM平臺(tái)上移植Linux來(lái)說(shuō),Host是一臺(tái)一般的PC機(jī),它通過(guò)串口或網(wǎng)路介面與Target通信;Target是arm-linux平臺(tái)(這裏說(shuō)的arm指的是平臺(tái)所使用的CPU是ARM9處理器,linux指的是運(yùn)行的操作系統(tǒng)是Linux)。 我們?cè)贖ost上開(kāi)發(fā)程式,並在這個(gè)平臺(tái)上運(yùn)行交叉編譯器CrossComplier,編譯我們的程式,而由CrossComplier生成的程式將在Target上運(yùn)行?!凹热晃覀円呀?jīng)有了主機(jī)編譯器,那為什麼還要交叉編譯呢?”?需要交叉編譯的原因: 首先,在專案的起始階段,目標(biāo)平臺(tái)尚未建立,因此需要做交叉編譯,以生成我們所需要的Bootloader以及kernel(因?yàn)锽ootloader和kernel的源碼需要經(jīng)過(guò)交叉編譯後才可以在目標(biāo)平臺(tái)上運(yùn)行); 其次,當(dāng)目標(biāo)平臺(tái)能啟動(dòng)之後,由於目標(biāo)平臺(tái)上資源的限制,當(dāng)我們編譯大型程式時(shí),依然可能需要用到交叉編譯。交叉編譯我們?cè)谥鳈C(jī)平臺(tái)上開(kāi)發(fā)程式,並在這個(gè)平臺(tái)上運(yùn)行交叉編譯器,編譯我們的程式;而由交叉編譯器生成的程式在目的平臺(tái)上運(yùn)行。要進(jìn)行交叉編譯,我們需要在主機(jī)平臺(tái)上安裝對(duì)應(yīng)的交叉編譯工具鏈(crosscompilationtoolchain),然後用這個(gè)交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標(biāo)平臺(tái)上運(yùn)行的代碼。
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)境變數(shù)中(例:/usr/local/arm/bin:$PATH)。常用在ARM平臺(tái)的GNUToolchain3.1.2嵌入式Linux開(kāi)發(fā)的一般過(guò)程1.瞭解硬體;2.準(zhǔn)備需要使用的Linux工具以及其他工具;3.安排記憶體地址;4.編寫(xiě)啟動(dòng)代碼和機(jī)器相關(guān)代碼;5.編寫(xiě)驅(qū)動(dòng)程式;6.C庫(kù)、GUI和系統(tǒng)程式的移植;7.調(diào)試。
3.1嵌入式Linux的開(kāi)發(fā)環(huán)境3.2Linux開(kāi)發(fā)工具的使用3.3GNUmake命令和makefile檔3.4使用Automake和Autoconf生成makefile檔3.5嵌入式Linux編輯器vi的使用3.6Emacs綜合編輯器第3章嵌入式Linux的開(kāi)發(fā)環(huán)境及工具軟體3.2Linux開(kāi)發(fā)工具的使用
3.2.1Linux開(kāi)發(fā)工具GNUgcc的使用1、GCC簡(jiǎn)介GCC是GNUCompilerCollection的簡(jiǎn)稱,GCC是Linux平臺(tái)下最常用的編譯程序,除了支持C語(yǔ)言外,還支持多種其他語(yǔ)言,例如C++、Ada、Java、Objective-C、Fortran、Pascal等。GCC支持的體系結(jié)構(gòu)有40餘種,常見(jiàn)的有x86系列、Arm、PowerPC等。同時(shí),GCC還能運(yùn)行在不同的操作系統(tǒng)上,如Linux、Solaris、Windows等。GCC無(wú)所不在宏定義#3.2Linux開(kāi)發(fā)工具的使用
使用gcc編譯程序時(shí),編譯過(guò)程可以細(xì)分為4個(gè)階段:(1)預(yù)處理(Preprocessing)、(2)編譯(Compilation)、(3)彙編(Assembly)(4)鏈接(Linking)。3.2.1Linux開(kāi)發(fā)工具GNUgcc的使用2、GCC常用模式及選項(xiàng)gcc最基本的用法是:gcc[options]file...
其中options是以“-”開(kāi)始的各種選項(xiàng),file是相關(guān)的檔案名。在使用gcc的時(shí),必須給出必要的選項(xiàng)和文件名。gcc的整個(gè)編譯過(guò)程分別是:預(yù)處理、編譯,彙編和鏈接。3.2Linux開(kāi)發(fā)工具的使用
示例程式//helloworld.c#include<stdio.h>intmain(void){printf("HelloWorld!\n");return0;}3.2.1Linux開(kāi)發(fā)工具GNUgcc的使用2、GCC常用模式及選項(xiàng)GCC最常用的有兩種模式:編譯模式:gcchelloworld.c-ohelloworld編譯連接模式:gcc-chelloworld.c-ohelloworld.o說(shuō)明:編譯模式生成的二進(jìn)位機(jī)器代碼為可執(zhí)行的;編譯連接模式生成的二進(jìn)位機(jī)器代碼不可執(zhí)行,只生成目標(biāo)檔helloworld.o。
可以自定義檔案名,如gcc-chelloworld.c-omyHelloWorld.o3.2Linux開(kāi)發(fā)工具的使用
3.2Linux開(kāi)發(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刪除,並且展開(kāi)所有的宏定義;處理所有條件編譯指令;處理#include預(yù)編譯指令,將被包含的檔插入到該預(yù)編譯指令的位置。刪除所有的注釋//和;添加行號(hào)和文件標(biāo)識(shí);保留所有的#pragma編譯器指令;生成彙編代碼編譯為目標(biāo)檔將程式的目標(biāo)檔與所需的所有附加的目標(biāo)檔連接起來(lái),最終生成可執(zhí)行檔3.2.1Linux開(kāi)發(fā)工具GNUgcc的使用多個(gè)檔的編譯通常整個(gè)程式是由多個(gè)原始檔案組成的,相應(yīng)地也就形成了多個(gè)編譯單元,使用GCC能夠很好地管理這些編譯單元。假設(shè)有一個(gè)由test1.c和test2.c兩個(gè)原始檔案組成的程式,為了對(duì)它們進(jìn)行編譯,並最終生成可執(zhí)行程式test,可以使用以下命令:
gcctest1.ctest2.c-otest3.2Linux開(kāi)發(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)前目錄的上一級(jí)。若在編譯時(shí)需要的包含檔存放在多個(gè)目錄下,可使用多個(gè)-I來(lái)指定各個(gè)目錄:$gcctest.c
–I
../inc–I
../../inc2-otest
這裏指出了另一個(gè)包含子目錄inc2,較之前目錄它還要在再上兩級(jí)才能找到。
gcc的版本可以使用如下gcc–v命令查看:3.警告功能
當(dāng)GCC在編譯過(guò)程中檢查出錯(cuò)誤,則中止編譯;但檢測(cè)到警告時(shí)卻能繼續(xù)編譯生成可執(zhí)行程式。在眾多的警告選項(xiàng)之中,最常用的是-Wall選項(xiàng)。該選項(xiàng)能發(fā)現(xiàn)程式中一系列的常見(jiàn)錯(cuò)誤警告,舉例如下:
$gcc-Walltest.c-otest該選項(xiàng)相當(dāng)於同時(shí)使用了下列所有的選項(xiàng):unused-function:遇到僅聲明過(guò)但尚未定義的靜態(tài)函數(shù)時(shí)發(fā)出警告。unused-label:遇到聲明過(guò)但不使用的標(biāo)號(hào)的警告。unused-parameter:從未用過(guò)的函數(shù)參數(shù)的警告。
●unused-variable:在本地聲明但從未用過(guò)的變數(shù)的警告●unused-value:僅計(jì)算但從未用過(guò)的值的警告。●format:檢查對(duì)printf和scanf等函數(shù)的調(diào)用,確認(rèn)各參數(shù)類(lèi)型和格式串中的一致?!駃mplicit-int:警告沒(méi)有規(guī)定類(lèi)型的聲明。●implicit-function-:在函數(shù)在未經(jīng)聲明就使用時(shí)給予警告。●char-subscripts:警告把char類(lèi)型作為數(shù)組下標(biāo)?!駇issing-braces:聚合初始化兩邊缺少大括弧。●Parentheses:在某些情況下如果忽略了括弧,編譯器就發(fā)出警告。當(dāng)gcc在編譯不符合ANSI/ISOC語(yǔ)言標(biāo)準(zhǔn)的源代碼時(shí),如果加上了-pedantic選項(xiàng),那麼使用了擴(kuò)展語(yǔ)法的地方將產(chǎn)生相應(yīng)的警告資訊
生成可執(zhí)行檔是否可以直接執(zhí)行呢?編譯器會(huì)自動(dòng)鏈接一些程式庫(kù),但是有些程式庫(kù)需要手動(dòng)鏈接。大多數(shù)系統(tǒng)庫(kù)都在/lib目錄下。程式庫(kù)以lib開(kāi)頭命名,鏈接時(shí)只需寫(xiě)lib後擴(kuò)展名前的部分。4.庫(kù)依賴函數(shù)庫(kù)實(shí)際上就是一些頭檔(.h)和庫(kù)檔(.so或者.a)的集合。Linux下大多數(shù)函數(shù)都默認(rèn)將頭檔放到/usr/include/目錄下,而庫(kù)檔則放到/usr/lib/目錄下,但並不是所有的情況都是這樣。正因如此,gcc在編譯時(shí)必須讓編譯器知道如何來(lái)查找所需要的頭檔和庫(kù)檔。可通過(guò)-L選項(xiàng)向gcc的庫(kù)檔搜索路徑中添加新的目錄。如:
[david@DAVIDdavid]$gccdavid.c-L/home/david/lib–ldavid-odavid注意:-l選項(xiàng),指示gcc去連接庫(kù)檔david.so。Linux下的庫(kù)檔在命名時(shí)有一個(gè)約定,那就是應(yīng)該以lib三個(gè)字母開(kāi)頭。由於所有的庫(kù)檔都遵循了同樣的規(guī)範(fàn),因此在用-l選項(xiàng)指定鏈接的庫(kù)檔案名時(shí)可以省去lib三個(gè)字母。也就是說(shuō)gcc在對(duì)-ldavid進(jìn)行處理時(shí),會(huì)自動(dòng)去鏈接名為libdavid.so的檔。Linux下的庫(kù)檔分為兩大類(lèi):動(dòng)態(tài)鏈接庫(kù)(通常以.so結(jié)尾)和靜態(tài)鏈接庫(kù)(通常以.a結(jié)尾),默認(rèn)情況下,gcc在鏈接時(shí)優(yōu)先使用動(dòng)態(tài)鏈接庫(kù),只有當(dāng)動(dòng)態(tài)鏈接庫(kù)不存在時(shí)才考慮使用靜態(tài)鏈接庫(kù)。在編譯時(shí)加上-static選項(xiàng),強(qiáng)制使用靜態(tài)鏈接庫(kù)。例如,如果在/home/david/lib/目錄下有鏈接時(shí)所需要的庫(kù)檔libfoo.so和libfoo.a,為了讓gcc在鏈接時(shí)只用到靜態(tài)鏈接庫(kù),可以使用下麵的命令:[david@DAVIDdavid]$gccfoo.c-L/home/david/lib-static–ldavid-odavid3.2.2GDB調(diào)試器簡(jiǎn)介L(zhǎng)inux系統(tǒng)中包含了GNU調(diào)試程式gdb,用來(lái)調(diào)試C和C++程式的調(diào)試器。gdb提供如下功能:●運(yùn)行程式,設(shè)置所有的能影響程式運(yùn)行的參數(shù)和環(huán)境?!窨刂瞥淌皆谥付ǖ臈l件下停止運(yùn)行。●當(dāng)程式停止時(shí),可以檢查程式的狀態(tài)。●修改程式的錯(cuò)誤,並重新運(yùn)行程式?!駝?dòng)態(tài)監(jiān)視程式中變數(shù)的值?!窨梢詥尾綀?zhí)行代碼,觀察程式的運(yùn)行狀態(tài)。
gdb使用實(shí)例1.gdb的啟動(dòng)在終端窗口中,有兩種方法運(yùn)行g(shù)db,即在終端窗口的命令行中直接輸入gdb命令或gdbfilename命令運(yùn)行g(shù)db。方法1:先啟動(dòng)gdb後執(zhí)行filefilename命令。即gdbfilefilename執(zhí)行上述兩條命令就可啟動(dòng)gdb,並裝入可執(zhí)行的程式filename。方法2:?jiǎn)?dòng)gdb的同時(shí)裝入可執(zhí)行的程式。即gdbfilename其中,filename是要調(diào)試的可執(zhí)行檔。這和啟動(dòng)gdb後執(zhí)行filefilename命令效果完全一樣。啟動(dòng)gdb後,就可以使用gdb的命令調(diào)試程式。2.gdb的基本命令gdb中的命令分為以下幾類(lèi):工作環(huán)境相關(guān)命令、設(shè)置中斷點(diǎn)與恢復(fù)命令、源代碼查看命令、查看運(yùn)行數(shù)據(jù)相關(guān)命令及修改運(yùn)行參數(shù)命令。gdb的命令可以通過(guò)help命令進(jìn)行查找命令所屬的種類(lèi)(class),可以從相關(guān)class找到相應(yīng)命令。如下所示:(gdb)help此命令可列出命令的種類(lèi)。(gdb)helpdata此命令查找data類(lèi)種的命令,並列出data類(lèi)種的所有命令。
(gdb)helpcall此命令查找call命令。
直接鍵入“help[command]”來(lái)查看命令。(1)工作環(huán)境相關(guān)命令(2)設(shè)置中斷點(diǎn)與恢復(fù)命令infob(3)gdb中源碼查看相關(guān)命令(4)gdb中查看運(yùn)行數(shù)據(jù)相關(guān)命令(5)其他gdb命令●run命令:執(zhí)行當(dāng)前被調(diào)試的程式?!駅ill命令:停止正在調(diào)試的應(yīng)用程式?!駑atch命令:設(shè)置監(jiān)視點(diǎn),監(jiān)視運(yùn)算式的變化。●awatch命令:設(shè)置讀寫(xiě)監(jiān)視點(diǎn)。當(dāng)要監(jiān)視的運(yùn)算式被讀或?qū)憰r(shí)將應(yīng)用程式掛起。它的語(yǔ)法與watch命令相同?!駌watch命令:設(shè)置讀監(jiān)視點(diǎn),當(dāng)監(jiān)視運(yùn)算式被讀時(shí)將程式掛起,等侍調(diào)試。此命令的語(yǔ)法與watch相同。●infobreak命令:顯示當(dāng)前中斷點(diǎn)列表,包括每個(gè)中斷點(diǎn)到達(dá)的次數(shù)?!駃nfofiles命令:顯示調(diào)試檔的資訊。●infofunc命令:顯示所有的函數(shù)名。●infolocal命令:顯示當(dāng)前函數(shù)的所有局部變數(shù)的資訊。●infoprog命令:顯示調(diào)試程式的執(zhí)行狀態(tài)。●Shell命令:執(zhí)行LinuxShell命令。●make命令:不退出gdb而重新編譯生成可執(zhí)行檔。●Quit命令:退出gdb。(6)gdb中修改運(yùn)行參數(shù)相關(guān)命令gdb可修改運(yùn)行時(shí)的參數(shù),並使該變數(shù)按照用戶當(dāng)前輸入的值繼續(xù)運(yùn)行。方法為:在單步執(zhí)行的過(guò)程中,鍵入命令:set變數(shù)=設(shè)定值在此之後,程式就會(huì)按照該設(shè)定的值運(yùn)行了。特別注意,在gcc編譯選項(xiàng)中一定要加入”-g”。只有在代碼處?kù)丁斑\(yùn)行”或“暫?!睜顟B(tài)時(shí)才能查看變數(shù)值,設(shè)置中斷點(diǎn)後程式在指定行之前停止。3.3make與makefilegccdriver.cstack.cmisc.c–opolish一旦其中一個(gè)檔修改了,需要重新執(zhí)行上面的命令。問(wèn)題:1)所有的檔都需要重新編譯,若這些原始檔案都很大,編譯時(shí)間將大大增加2)若原始檔案數(shù)目眾多,沒(méi)有誰(shuí)會(huì)願(yuàn)意一次有一次地輸入輸入如此冗長(zhǎng)的命令3.3make與makefile如何解決一?如何解決二?如果更新了其中某個(gè)檔,只需gcc-c編譯該檔,然後把所有目標(biāo)檔鏈接起來(lái)(使用上述兩個(gè)解決方案中最後一條命令,得到新的可執(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語(yǔ)言寫(xiě)的軟體都分割成多個(gè)原始檔案(.c和.h)。這樣結(jié)構(gòu)相對(duì)單一的檔,優(yōu)點(diǎn)是:1)原始檔案短小,易於編輯、編譯和測(cè)試,即更具模組化。2)採(cǎi)用該結(jié)構(gòu)使得只有改動(dòng)的檔才需要編譯,而不是整個(gè)系統(tǒng)。3)支持資訊隱藏。即只需知道檔功能,無(wú)須知道檔如何寫(xiě)成。缺點(diǎn):1)必須知道組成整個(gè)系統(tǒng)有哪些檔,檔之間的內(nèi)在聯(lián)繫,以及自上次編譯以來(lái)哪些檔被修改過(guò);2)編譯多檔的C程式時(shí),需要一次又有一次的輸入兩行又長(zhǎng)又臭的命令:一個(gè)用於編譯目標(biāo)檔,一個(gè)用於把目標(biāo)檔鏈接成可執(zhí)行檔。3.3.1make解決上述問(wèn)題的方法使用Linux的make工具。它提供了一種可以用於構(gòu)建大規(guī)模工程的、強(qiáng)勁而靈活的機(jī)制。make工具依賴於一個(gè)特殊的名為makefile的檔,這個(gè)檔描述了系統(tǒng)中各個(gè)模組之間的依賴關(guān)係。系統(tǒng)中部分文件改變時(shí),make根據(jù)這些關(guān)係決定一個(gè)需要重新編譯的檔的最小集合。當(dāng)軟體系統(tǒng)較大時(shí),用腦子記住所有頭檔、原始檔案、目標(biāo)檔和執(zhí)行檔之間的依賴關(guān)係簡(jiǎn)直不可能,make可以幫助我們。3.3.1makemake工具的使用語(yǔ)法:make[-fmakefile][options][target]用途:make工具為名為makefile或Makefile的檔,或者由-f指定的檔makefile中指定的依賴關(guān)係對(duì)系統(tǒng)進(jìn)行更新。
常用選項(xiàng):-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ī)則的語(yǔ)法格式
目標(biāo)檔列表:依賴檔列表
<Tab>命令列表make規(guī)則的另一種寫(xiě)法
目標(biāo)檔列表:依賴檔列表;命令列表
(命令用分號(hào)隔開(kāi))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分割成兩個(gè)檔: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如何編寫(xiě)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個(gè)檔:main.c、compute.c、input.c、compute.h、input.h和main.h。compute.h和input.h僅包含了compute和input函數(shù)的聲明但沒(méi)有定義。定義部分在compute.c和input.c中。main.h中包含的是兩條顯示給用戶的提示資訊。powermain.oinput.oinput.hinput.hcompute.ocompute.cmain.cmain.hcompute.hinput.ccompute.h3.3.3makefile的規(guī)則1.make可以自動(dòng)執(zhí)行像下麵例子中的命令:
xxx.o:xxx.czzz.hgcc–cxxx.cmake知道目標(biāo)檔和相應(yīng)的原始檔案的名字一般相同(稱之為標(biāo)準(zhǔn)依賴關(guān)係),因此,可以把xxx.o:xxx.c這樣的依賴關(guān)係從makefile中去掉。power
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)生課題申報(bào)書(shū)范例
- 醫(yī)藥集采合同范例
- 廠車(chē)出租合同范例
- 課題申報(bào)書(shū)如何排版
- 劇本轉(zhuǎn)讓合同范本
- 伐樹(shù)合同范本
- 合同范本工程延期
- 完善老舊農(nóng)機(jī)報(bào)廢更新機(jī)制的措施
- 發(fā)票附帶合同范本
- 后增補(bǔ)合同范例
- 腦卒中后吞咽障礙患者進(jìn)食護(hù)理-護(hù)理團(tuán)標(biāo)
- 全國(guó)各省(直轄市、自治區(qū))市(自治州、地區(qū))縣(縣級(jí)市)區(qū)名稱一覽表
- 新收入準(zhǔn)則深度解讀和案例分析以及稅會(huì)差異分析
- 大學(xué)美育導(dǎo)引 課件 第五章 體驗(yàn)人生在世-戲劇
- 大學(xué)美育導(dǎo)引 課件 第六章 沉浸光影世界-電影
- 中小學(xué)校課外讀物負(fù)面清單管理措施
- 土石方工程投標(biāo)書(shū)技術(shù)標(biāo)
- 中醫(yī)學(xué)教學(xué)課件經(jīng)絡(luò)與穴位
- 胸腹聯(lián)合傷完整版本
- 裝修店長(zhǎng)述職報(bào)告
- 整體解決方案研究:智慧物聯(lián)網(wǎng)在化肥行業(yè)的應(yīng)用
評(píng)論
0/150
提交評(píng)論