版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式設(shè)計(jì)與開發(fā)課程目的理論與實(shí)踐相結(jié)合,使大家既能對(duì)嵌入式系統(tǒng)及開發(fā)有一個(gè)全景的把握,又能為深入理解嵌入式系統(tǒng)打下一定的基礎(chǔ)。了解嵌入式系統(tǒng)前沿發(fā)展趨勢(shì),了解嵌入式技術(shù)研發(fā)的基本概念、方法和知識(shí),獲得嵌入式開發(fā)設(shè)計(jì)實(shí)踐經(jīng)驗(yàn)。課程的主要內(nèi)容嵌入式系統(tǒng)基礎(chǔ)嵌入式系統(tǒng)概述
嵌入式系統(tǒng)分類、發(fā)展歷程、特點(diǎn)、應(yīng)用領(lǐng)域、組成、發(fā)展趨勢(shì)。嵌入式軟件系統(tǒng)基礎(chǔ)
了解嵌入式軟件的體系,了解嵌入式操作系統(tǒng)LINUX內(nèi)核、文件系統(tǒng),BOOTLOADER的概念,學(xué)會(huì)編寫,編譯,調(diào)試應(yīng)用程序,驅(qū)動(dòng)程序。課程的主要內(nèi)容ARM體系結(jié)構(gòu)
了解ARM體系結(jié)構(gòu)的發(fā)展和特點(diǎn),內(nèi)核分類和版本等內(nèi)容
。嵌入式微處理器平臺(tái)
了解ARM嵌入式處理器exynos4412的基本功能部件。實(shí)驗(yàn)參考資料嵌入式系統(tǒng)開發(fā)與應(yīng)用,北京航空航天大學(xué)出版社,田澤嵌入式系統(tǒng)原理與開發(fā),西安電子科技大學(xué)出版社,
夏靖波ARM體系結(jié)構(gòu)與編程,清華大學(xué)出版社,杜春雷4412datasheet32位嵌入式系統(tǒng)硬件設(shè)計(jì)與調(diào)試,機(jī)械工業(yè)出版社,張崙第1講
緒論嵌入式系統(tǒng)的定義IEEE(電氣和電子工程師協(xié)會(huì))對(duì)嵌入式系統(tǒng)定義為:嵌入式系統(tǒng)是“控制、監(jiān)視或者輔助裝置、機(jī)器和設(shè)備運(yùn)行的裝置”
Devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants。嵌入式系統(tǒng)的定義
一個(gè)普遍被認(rèn)同的嵌入式系統(tǒng)的定義是:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng),對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物。嵌入式系統(tǒng)的定義廣義:凡是帶有微處理器的專用軟硬件系統(tǒng)都可以稱為嵌入式系統(tǒng),這些系統(tǒng)在完成較為單一的功能時(shí)具有簡(jiǎn)潔迅速的特點(diǎn)。但是由于沒有操作系統(tǒng),管理系統(tǒng)硬件和軟件能力有限,特別是對(duì)于復(fù)雜的多任務(wù)系統(tǒng)。狹義:是指使用32位以上的嵌入式微處理器,具有嵌入式操作系統(tǒng),完成特定功能的嵌入式系統(tǒng)。我們這里所說的嵌入式系統(tǒng)是指狹義上的嵌入式系統(tǒng)。嵌入式系統(tǒng)的演變單片機(jī)系統(tǒng):自行編寫所有程序;68360/386EX控制系統(tǒng),有簡(jiǎn)單的操作系統(tǒng);32位嵌入式處理器+嵌入式操作系統(tǒng),如Linux、UCOS等+GUI圖形界面;各種SoC+嵌入式操作系統(tǒng)+嵌入式Web設(shè)備server以及各種復(fù)雜網(wǎng)絡(luò)協(xié)議棧+GUI圖形界面+無線模塊=現(xiàn)代可移動(dòng)的網(wǎng)絡(luò)智能設(shè)備。嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的特點(diǎn)嵌入式系統(tǒng)通常是形式多樣、面向特定應(yīng)用的嵌入式系統(tǒng)設(shè)計(jì)高效,通常極其關(guān)注成本嵌入式系統(tǒng)是各學(xué)科結(jié)合的產(chǎn)物嵌入式系統(tǒng)得到多種類型的處理器和處理器體系結(jié)構(gòu)的支持嵌入式系統(tǒng)有實(shí)時(shí)性和可靠性的要求嵌入式系統(tǒng)開發(fā)需要專門工具和特殊方法通用計(jì)算機(jī)與嵌入式系統(tǒng)對(duì)比特征通用計(jì)算機(jī)嵌入式系統(tǒng)形式和類型看得見的計(jì)算機(jī)。按其體系結(jié)構(gòu)、運(yùn)算速度和結(jié)構(gòu)規(guī)模等因素分為大、中、小型機(jī)和微機(jī)。看不見的計(jì)算機(jī)。形式多樣,應(yīng)用領(lǐng)域廣泛,按應(yīng)用來分。組成通用處理器、標(biāo)準(zhǔn)總線和外設(shè)。軟件和硬件相對(duì)獨(dú)立。集成度高:面向應(yīng)用的嵌入式微處理器,總線和外部接口多集成在處理器內(nèi)部。非標(biāo)準(zhǔn)化。外部接口復(fù)雜。軟件與硬件是緊密集成。開發(fā)方式開發(fā)平臺(tái)和運(yùn)行平臺(tái)都是通用計(jì)算機(jī)采用交叉開發(fā)方式,開發(fā)平臺(tái)一般是通用計(jì)算機(jī),運(yùn)行平臺(tái)是嵌入式系統(tǒng)。二次開發(fā)應(yīng)用程序可重新編制一般不能再編程嵌入式系統(tǒng)的組成外圍硬件嵌入式處理器操作系統(tǒng)應(yīng)用程序軟件系統(tǒng)開發(fā)環(huán)境編譯下載和調(diào)試系統(tǒng)引導(dǎo)中間軟件硬件系統(tǒng)嵌入式系統(tǒng)的組成實(shí)驗(yàn)板嵌入式處理器嵌入式處理器分類嵌入式微處理器
指計(jì)算機(jī)或嵌入式控制器的中央控制單元以及必要的功能邏輯電路,具有體積小、功耗低,成本低、可靠性高的優(yōu)點(diǎn)。目前主要有PowerPC、68000、MIPS、ARM系列等。嵌入式微控制器
俗稱單片機(jī),一個(gè)微處理器和一些外圍設(shè)備共同集成封裝到一個(gè)電路。代表性的通用系列包括8051等,半通用系列如:支持USB接口的MCU8XC930/931、C540、C541;支持I2C、CAN-Bus、LCD及眾多專用MCU和兼容系列。目前MCU占嵌入式系統(tǒng)約70%的市場(chǎng)份額。
嵌入式處理器分類SOC
一個(gè)處理器和其他外圍支持設(shè)備集成到一個(gè)芯片上,在一個(gè)硅片上實(shí)現(xiàn)一個(gè)復(fù)雜的系統(tǒng)
。DSP
特別為了數(shù)字信號(hào)處理設(shè)計(jì)的處理器,主要有數(shù)字濾波、FFT、譜分析等方面
。DSP處理器對(duì)系統(tǒng)結(jié)構(gòu)和指令進(jìn)行了特殊設(shè)計(jì),使其適合于執(zhí)行DSP算法,編譯效率較高,指令執(zhí)行速度也較高。有代表性的產(chǎn)品是TexasInstruments的TMS320系列和Motorola的DSP56000系列。硬件最小系統(tǒng)外圍硬件
外圍硬件是嵌入式系統(tǒng)處理器以外的硬件,它為系統(tǒng)提供了運(yùn)行條件和部分功能。
在運(yùn)行條件方面,最基礎(chǔ)的是時(shí)鐘和電源部件,它們不可能集成到處理器內(nèi)部,但它們對(duì)于處理器運(yùn)轉(zhuǎn)是必需的。他們與處理器、內(nèi)存構(gòu)成了硬件最小系統(tǒng)。
外圍硬件也將提供在系統(tǒng)中需要,但是微處理器內(nèi)部不具有的功能,主要分為存儲(chǔ)器設(shè)備、I/O設(shè)備和通信設(shè)備三大類。
處理器通過總線方式或GPIO方式擴(kuò)展外圍硬件。系統(tǒng)程序的下載嵌入式系統(tǒng)處理器ROM\FlashRAM電源時(shí)鐘(PC)主機(jī)JTAG下載燒寫調(diào)試串口/usb存儲(chǔ)器設(shè)備嵌入式系統(tǒng)的存儲(chǔ)器包括主存和外存。大多數(shù)嵌入式系統(tǒng)的代碼和數(shù)據(jù)都存儲(chǔ)在處理器可直接訪問的存儲(chǔ)空間即主存中。系統(tǒng)上電后在主存中的代碼直接運(yùn)行。主存儲(chǔ)器的特點(diǎn)是速度快,一般采用ROM、EPROM、NorFlash、SRAM、DRAM、SDRAM等存儲(chǔ)器件。存儲(chǔ)器設(shè)備目前有些嵌入式系統(tǒng)除了主存外,還有外存。外存是處理器不能直接訪問的存儲(chǔ)器,用來存放各種信息,相對(duì)主存而言具有價(jià)格低、容量大的特點(diǎn)。在嵌入式系統(tǒng)中,外存的主要種類有NandFlash、SD卡、T-Flash卡、CompactFlash、SmartMedia、MemoryStick、MultiMediaCard、硬盤、eMMC等。
存儲(chǔ)器設(shè)備芯片種類讀寫方式擴(kuò)展方式功能和特點(diǎn)價(jià)格SRAM線性讀、寫地址數(shù)據(jù)總線運(yùn)行代碼可讀寫數(shù)據(jù)速度很快貴SDRAM線性讀、寫特殊內(nèi)存控制器的支持運(yùn)行代碼可讀寫數(shù)據(jù)便宜NORFLASH線性讀寫需要根據(jù)時(shí)序地址數(shù)據(jù)總線固化代碼和數(shù)據(jù)運(yùn)行代碼較貴NANDFLASH根據(jù)時(shí)序讀寫GPIO或者普通總線方式大規(guī)??勺x寫數(shù)據(jù)不能線性訪問便宜I/O設(shè)備鍵盤、LCD、觸摸屏、SPEAKER、MIC、攝像頭、各種傳感器等設(shè)備,完成與外界交互的數(shù)據(jù)的輸入輸出。
通信設(shè)備串口、藍(lán)牙、紅外、網(wǎng)絡(luò)設(shè)備、USB設(shè)備等。USBDEVICEUSBHOSTUSBOTGUSB設(shè)備:網(wǎng)絡(luò)設(shè)備:提供和通用計(jì)算機(jī)類似的網(wǎng)絡(luò)功能。嵌入式系統(tǒng)的硬件結(jié)構(gòu)
嵌入式系統(tǒng)硬件結(jié)構(gòu)的特點(diǎn):以嵌入式處理器為核心,
集成度高嵌入式操作系統(tǒng)
運(yùn)行在嵌入式硬件平臺(tái)上,對(duì)整個(gè)系統(tǒng)及其所操作的部件、裝置等資源進(jìn)行統(tǒng)一協(xié)調(diào)、指揮和控制的系統(tǒng)軟件。嵌入式操作系統(tǒng)和硬件配合密切。
具有微型化、可剪裁、實(shí)時(shí)性、高可靠性、易移植性等特點(diǎn)。嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)進(jìn)程管理進(jìn)程間通信中斷處理內(nèi)存管理設(shè)備管理文件系統(tǒng)……操作系統(tǒng)單任務(wù)操作系統(tǒng)DOS分時(shí)操作系統(tǒng)桌面系統(tǒng)WindowsLinuxUnix實(shí)時(shí)操作系統(tǒng)RTOS軟實(shí)時(shí)OS硬實(shí)時(shí)OS嵌入式LINUXWinceiOSRT-LINUXU/COSIIVxWORKSMac
OS流行的操作系統(tǒng)嵌入式開發(fā)分類硬件開發(fā)電路設(shè)計(jì)驅(qū)動(dòng)開發(fā)系統(tǒng)開發(fā)LINUX開發(fā)WINCE開發(fā)軟件開發(fā)應(yīng)用程序圖形界面驅(qū)動(dòng)開發(fā)必備基礎(chǔ)計(jì)算機(jī)操作能力操作系統(tǒng)原理單片機(jī)基礎(chǔ)C語言基礎(chǔ)獨(dú)立解決問題能力硬件基礎(chǔ)開發(fā)需要專門工具和特殊方法由于嵌入式系統(tǒng)資源有限,一般不具備自主開發(fā)能力,產(chǎn)品發(fā)布后用戶通常也不能對(duì)其中的軟件進(jìn)行修改,必須有一套專門的開發(fā)環(huán)境。該開發(fā)環(huán)境包括專門的開發(fā)工具(包括設(shè)計(jì)、編譯、調(diào)試、測(cè)試等工具),采用交叉開發(fā)的方式進(jìn)行,交叉開發(fā)環(huán)境如圖所示。嵌入式系統(tǒng)的發(fā)展趨勢(shì)以信息家電、移動(dòng)終端、汽車電子、網(wǎng)絡(luò)設(shè)備等為代表的互聯(lián)網(wǎng)時(shí)代的嵌入式系統(tǒng),不僅為嵌入式市場(chǎng)展現(xiàn)了美好前景,注入了新的生命,同時(shí)也對(duì)嵌入式系統(tǒng)技術(shù),提出新的挑戰(zhàn):支持日趨增長(zhǎng)的功能密度靈活的網(wǎng)絡(luò)聯(lián)接輕便的移動(dòng)應(yīng)用多媒體的信息處理、低功耗、人機(jī)界面友好互動(dòng)支持二次開發(fā)和動(dòng)態(tài)升級(jí)等嵌入式系統(tǒng)的發(fā)展趨勢(shì)面向應(yīng)用領(lǐng)域的、高度集成的、以32位嵌入式微處理器為核心的SOC(SystemOnChip)將成為應(yīng)用主流SoC給系統(tǒng)帶來高性能之外更多更重要的好處穩(wěn)定性、體積、散熱、功耗···
處理器外設(shè)存儲(chǔ)器I/O“Systemonboard”“Systemonchip”USB以太網(wǎng)memory嵌入式系統(tǒng)的發(fā)展趨勢(shì)嵌入式應(yīng)用軟件的開發(fā)需要強(qiáng)大的開發(fā)工具和操作系統(tǒng)的支持采用實(shí)時(shí)多任務(wù)編程技術(shù)和交叉開發(fā)工具技術(shù)來控制功能復(fù)雜性,簡(jiǎn)化應(yīng)用程序設(shè)計(jì)、保障軟件質(zhì)量和縮短開發(fā)周期。
嵌入式操作系統(tǒng)將在現(xiàn)有的基礎(chǔ)上,不斷采用先進(jìn)的操作系統(tǒng)技術(shù),結(jié)合嵌入式系統(tǒng)的需求向:可適應(yīng)不同的嵌入式硬件平臺(tái)具有可移植、可伸縮、功能強(qiáng)大、可配置、良好的實(shí)時(shí)性、可靠性、高可用方向發(fā)展
嵌入式系統(tǒng)的發(fā)展趨勢(shì)嵌入式開發(fā)工具支持多種硬件平臺(tái)覆蓋嵌入式軟件開發(fā)過程各個(gè)階段高效高度集成的工具集方向發(fā)展RequirementAnalysisSoftwareDesignCodingTestRelease嵌入式軟件開發(fā)基本過程嵌入式系統(tǒng)的發(fā)展趨勢(shì)嵌入式系統(tǒng)聯(lián)網(wǎng)成為必然趨勢(shì),驅(qū)動(dòng)了大量新的應(yīng)用針對(duì)外部聯(lián)網(wǎng)要求,嵌入系統(tǒng)必需配有通信接口,需要TCP/IP協(xié)議簇軟件支持。針對(duì)內(nèi)部聯(lián)網(wǎng)要求,新一代嵌入式系統(tǒng)還需具備IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同時(shí)也需要提供相應(yīng)的通信組網(wǎng)協(xié)議軟件和物理層驅(qū)動(dòng)軟件。為了支持網(wǎng)絡(luò)交互的應(yīng)用,還需內(nèi)置XML瀏覽器和WebServer。嵌入式系統(tǒng)的發(fā)展趨勢(shì)嵌入式系統(tǒng)向新的嵌入式計(jì)算模型方向發(fā)展
支持自然的人機(jī)交互和互動(dòng)的、圖形化、多媒體的嵌入式人機(jī)界面。操作簡(jiǎn)便、直觀、無須學(xué)習(xí)??删幊痰那度胧较到y(tǒng)。嵌入式系統(tǒng)可支持二次開發(fā)如采用嵌入式Java技術(shù),可動(dòng)態(tài)加載和升級(jí)軟件,增強(qiáng)嵌入式系統(tǒng)功能。謝謝!嵌入式系統(tǒng)設(shè)計(jì)電子信息工程操作系統(tǒng)簡(jiǎn)介操作系統(tǒng)(OperationSystem,簡(jiǎn)稱OS)是管理計(jì)算機(jī)硬件與軟件資源的程序,是計(jì)算機(jī)系統(tǒng)的內(nèi)核與基石。操作系統(tǒng)本質(zhì)上是運(yùn)行在計(jì)算機(jī)上的軟件程序
;為用戶提供一個(gè)與系統(tǒng)交互的操作界面;操作系統(tǒng)分內(nèi)核與外殼:操作系統(tǒng)簡(jiǎn)介—Windows目前最流行的個(gè)人桌面操作系統(tǒng)。操作系統(tǒng)簡(jiǎn)介—Unix最早的多用戶、多任務(wù)操作系統(tǒng)。操作系統(tǒng)簡(jiǎn)介—UnixUnix在發(fā)展過程中產(chǎn)生了許多版本或分支:BSD,美國(guó)加州大學(xué)伯克利分校推出的“BerkeleySoftwareDistribution”,簡(jiǎn)稱BSD。AIX,IBM公司主持研究的Unix版本,主要是針對(duì)IBM計(jì)算機(jī)硬件環(huán)境進(jìn)行了優(yōu)化和增強(qiáng)。HP-UX,HP公司的Unix系統(tǒng)版本,主要運(yùn)行在HP的計(jì)算機(jī)和工作站上。Solaris,原來稱為SunOS,是Sun公司開發(fā)的Unix版本,包含有Sun公司開發(fā)的許多圖形用戶界面系統(tǒng)工具和應(yīng)用程序,主要用于Sun公司的計(jì)算機(jī)和工作站上。Linux簡(jiǎn)介-Linux誕生關(guān)于Linux誕生歷史,關(guān)注以下幾個(gè)要點(diǎn):1991年,芬蘭的業(yè)余計(jì)算機(jī)愛好者Linus
Torvalds編寫了一款類似Minix的系統(tǒng)(基于微內(nèi)核架構(gòu)的類Unix操作系統(tǒng))被ftp管理員命名為L(zhǎng)inux加入到自由軟件基金的GNU計(jì)劃中Linux是一個(gè)自由的,免費(fèi)的,源碼開放的操作系統(tǒng)。目的就是為了建立不受任何商品化軟件版權(quán)制約的,全世界都能使用的Unix兼容產(chǎn)品。Linux簡(jiǎn)介關(guān)于Linux,首先要注意以下兩個(gè)要點(diǎn):類Unix系統(tǒng):Linux是一種自由、開放源碼的類似Unix的操作系統(tǒng)Linux內(nèi)核:嚴(yán)格來說,Linux這個(gè)詞本身只表示Linux內(nèi)核Linux簡(jiǎn)介-Linux內(nèi)核版本Linux內(nèi)核版本由3個(gè)數(shù)字組成:a.b.c
:
如linux3.5.0a:當(dāng)前發(fā)布的內(nèi)核主版本;b:偶數(shù)表示穩(wěn)定版,奇數(shù)表示開發(fā)中的版本;c:錯(cuò)誤修補(bǔ)的次數(shù)。Linux內(nèi)核在內(nèi)核官方網(wǎng)站上發(fā)布Linux簡(jiǎn)介-Linux內(nèi)核歷史1991.9
:Linux0.01在網(wǎng)上發(fā)布1994.3
:Linux內(nèi)核V1.0發(fā)布。支持基于i386單處理器的
計(jì)算機(jī)系統(tǒng)。1996.6
:Linux內(nèi)核V2.0發(fā)布。這是第一個(gè)在單系統(tǒng)中支
持多處理器的穩(wěn)定內(nèi)核版本,也支持更多的處理
器類型。2001.1:2.4使用一種適應(yīng)性很強(qiáng)的資源管理系統(tǒng)2003.12:2.6性能、安全性和驅(qū)動(dòng)程序進(jìn)行改進(jìn)2011.6:3.0發(fā)布2015.4.:4.0發(fā)布目前:5.3.13…Linux簡(jiǎn)介-Linux發(fā)型版Linux內(nèi)核必須配備一些軟件、安裝工具以及圖形界面才方便用戶使用,這就是Linux發(fā)行版。Linux簡(jiǎn)介-Linux發(fā)型版Linux簡(jiǎn)介-Linux發(fā)型版Linux簡(jiǎn)介-Linux發(fā)型版UbuntuLinux系統(tǒng)具有如下特色:系統(tǒng)安全性高,采用“sudo”工具,所有系統(tǒng)相關(guān)的任務(wù)均需要使用此指令,并輸入密碼,比起傳統(tǒng)系統(tǒng)以管理員賬號(hào)進(jìn)行管理工作具有更大的安全性。統(tǒng)易用性強(qiáng),傳統(tǒng)的Linux系統(tǒng)軟件安裝和刪除經(jīng)常需要用戶自己解決軟件的依賴性問題,Ubuntu采用APT系統(tǒng)可輕松進(jìn)行軟件安裝和刪除。供多種安裝方式,可以直接裸機(jī)安裝或在虛擬機(jī)上進(jìn)行安裝,也可以通過安裝程序提供的wubi.exe程序在Windows上進(jìn)行安裝,這為初學(xué)者學(xué)習(xí)和研究Linux帶來了便利界面友好,Ubuntu提供的桌面操作方式特別適合熟悉Windows的用戶,初學(xué)者易于上手
Linux操作系統(tǒng)的安裝幾個(gè)鏡像站,在國(guó)內(nèi)就能快速下載Ubuntu。請(qǐng)選擇離你比較近的源。中科大鏡像站(地址:安徽):/safecheck/index?url=x+Z5mMbGPAteBfGoS4pBb5UGmZ+zDgzzNBM7bZN0zRC1gu5dU1c3/skwQQjIFj//vlnXhaeHD7f+gRrewqjb5oM7mWkryo7ogu1cJrPl1bxoCOw5Cm21dzytw8ob9eQpdj2oeHoEzTI=清華大學(xué)鏡像站:/safecheck/index?url=x+Z5mMbGPAteBfGoS4pBb4cACE4jBV7IoXOsSsLhbUqbZ1nDMnhIO8n2coX5IgFk4g+qFJyVYi+Ne6l+DXpCJb2BScxfh2+sZhIn6a8UAwfa85yf1EsTbQo2NtTjj/KopHabK7PnOYdT0sjgIIm+zjA8Zu4mdgY0浙江大學(xué)鏡像站:/safecheck/index?url=x+Z5mMbGPAteBfGoS4pBbzb82g3ZMWQwMR3RT21PpdNg8JPuZK/wJMkwQQjIFj//vlnXhaeHD7f+gRrewqjb5oM7mWkryo7ogu1cJrPl1bxoCOw5Cm21dzytw8ob9eQpdj2oeHoEzTI=重慶大學(xué)鏡像站:/safecheck/index?url=x+Z5mMbGPAteBfGoS4pBb9+fhaLj4IKMMR3RT21PpdNg8JPuZK/wJMkwQQjIFj//vlnXhaeHD7f+gRrewqjb5oM7mWkryo7ogu1cJrPl1bxoCOw5Cm21dzytw8ob9eQpdj2oeHoEzTI=蘭州大學(xué)鏡像站:/safecheck/index?url=x+Z5mMbGPAteBfGoS4pBb5iivANJt1r14XmQ+ZhwjOTiD6oUnJViL417qX4NekIlvYFJzF+Hb6xmEifprxQDB9rznJ/USxNtCjY21OOP8qikdpsrs+c5h1PSyOAgib7OMDxm7iZ2BjQ=Vmare虛擬機(jī)軟件簡(jiǎn)介
VMWare是一個(gè)“虛擬機(jī)”軟件.它使用戶可以在一臺(tái)機(jī)器上同時(shí)運(yùn)行多個(gè)操作系統(tǒng).多個(gè)操作系統(tǒng)在主系統(tǒng)的平臺(tái)上,可像Windows應(yīng)用程序那樣切換.而且每個(gè)操作系統(tǒng)都可以進(jìn)行虛擬的分區(qū)、配置而不影響真實(shí)硬盤的數(shù)據(jù).通過Vmare虛擬機(jī)使用ubuntu操作系統(tǒng)謝謝!敬請(qǐng)后續(xù)!嵌入式系統(tǒng)設(shè)計(jì)Linux基礎(chǔ)文件系統(tǒng)基礎(chǔ)命令文件屬性文件備份和壓縮vim/vi文件系統(tǒng)目錄目錄在文件類型上用d標(biāo)識(shí)用
/
分隔目錄層Linux操作系統(tǒng)都有且僅有一個(gè)起始目錄,我們用一個(gè)單獨(dú)的
/
來表示,稱其為根目錄。/usr/local/bin根目錄下的目錄/bin:存儲(chǔ)常用用戶指令。/boot:存儲(chǔ)核心、模塊映像等啟動(dòng)用文件/dev:存儲(chǔ)設(shè)備文件/etc:存儲(chǔ)系統(tǒng)、服務(wù)的配置目錄與文件/home:存放個(gè)人主目錄/lib:存放庫文件,諸如核心模塊、驅(qū)動(dòng)/lost+found:存儲(chǔ)fsck用的孤兒文件根目錄下的目錄(二)/mnt:系統(tǒng)加載文件系統(tǒng)時(shí)用的常用掛載點(diǎn)/opt:第三方工具使用的安裝目錄/proc:虛擬文件系統(tǒng),包含系統(tǒng)訊息等資料/root:root用戶的主目錄/sbin:存儲(chǔ)系統(tǒng)管理用指令/tmp:臨時(shí)文件的暫存點(diǎn)/usr:存放與用戶直接相關(guān)的文件與目錄/var:存儲(chǔ)在系統(tǒng)運(yùn)行中可能會(huì)更改的數(shù)據(jù)常用操作系統(tǒng)對(duì)各種文件系統(tǒng)的兼容性操作系統(tǒng)名稱LinuxDOSWindows95Windows98WindowsNTOS/2采用的文件系統(tǒng)Ext2FATVFATFAT32NTFSHPFSExt2√FAT√√√√√√VFAT√√√√√FAT32√√N(yùn)TFS√√HPFS√√文件系統(tǒng)文件系統(tǒng)Linux文件Linux可以支持長(zhǎng)達(dá)256個(gè)字符的文件名稱,在命令中如果以文件名稱作為參數(shù),則文件名稱中不能直接使用以下字符:!@#$%^&*()[]{}‘“\/|;<>空格文件系統(tǒng)一般約定凡是以“.c”作為后綴的文件是C語言編寫的源程序文件。其他一些經(jīng)常使用的后綴有:.sh:shell過程文件。.html:HTML超文本文件。.pl:PERL語言編寫的程序文件。.c:C語言程序文件。.o:編譯程序產(chǎn)生的目標(biāo)文件。.tar:tar命令產(chǎn)生的備份包文件。.gz:gzip命令產(chǎn)生的壓縮包文件。初始Ubuntu-Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng)一、進(jìn)入U(xiǎn)buntu
密碼:123456二、打開終端打開:按鍵“Ctrl”+“Alt”+“t”
退出:按鍵“Ctrl”+“d三、切換為root用戶
輸入命令:su
輸入密碼:123456shellBASH是BourneAgainShell的簡(jiǎn)寫,是linux最常用的shell。shell是一種命令語言解析器。它是用戶和內(nèi)核的一個(gè)接口,它將用戶輸入的每一個(gè)命令進(jìn)行解析,然后傳給內(nèi)核。Shell在用戶成功登錄系統(tǒng)是啟動(dòng),始終作為用戶和內(nèi)核的交互手段,直到用戶退出系統(tǒng)。本地登錄login:xitee(用戶名)password:_123456__(密碼)提示符與home目錄[root@ubuntu/root]#[當(dāng)前用戶名@主機(jī)名當(dāng)前目錄]提示符因用戶而異home目錄是用戶登入系統(tǒng)后即所在的默認(rèn)目錄。特殊
root
被稱為超級(jí)用戶,對(duì)系統(tǒng)有至高無上的控制權(quán),不受任何限制。一般來說,一般用戶的home目錄集中在/home目錄下,root的home目錄為/root運(yùn)行指令格式指令名
[選項(xiàng)]
[參數(shù)]例子:ls-l/home幫助和在線幫助指令--help例:mknod--helpman指令例:manmknodinfo指令例:infomknod列表命令ls<路徑>↙作用:查看路徑中的文件及子目錄名稱列表。其中<路徑>是用相對(duì)法或絕對(duì)法書寫的到要觀察的目錄的路徑。如果省略路徑則為查看當(dāng)前目錄下的內(nèi)容ls-a查看當(dāng)前目錄下所有文件,包括隱藏文件ls
–l列表形式查看ls–al以列表形式查看所有文件llls
*.txt查看當(dāng)前目錄下后綴為txt的文件文件類型在linux中,所有東西都被當(dāng)成文件。文件權(quán)限前的第一個(gè)字母用來標(biāo)識(shí)文件類型:-:一般文件d:目錄文件b:塊設(shè)備文件c:字符設(shè)備文件l:鏈接文件p:人工管道找到當(dāng)前目錄pwd↙輸入后會(huì)得到當(dāng)前目錄的路徑基礎(chǔ)命令清屏當(dāng)屏幕上顯示了太多的內(nèi)容以至顯得雜亂時(shí),可用命令:clear↙或者ctrl+l(L的小寫)進(jìn)行清屏。清屏后,屏幕上的內(nèi)容將被全部清除,系統(tǒng)提示符定位在屏幕左上角處?;A(chǔ)命令離開系統(tǒng)重啟rebootshutdown-rnowinit6關(guān)機(jī)haltshutdown-hnowpoweroffinit0命令補(bǔ)全輸入命令的前一個(gè)或者幾個(gè)字母,按下Tab鍵,就會(huì)自動(dòng)補(bǔ)全命令。如果有多個(gè)選擇,多按一次tab系統(tǒng)會(huì)自動(dòng)列出切換找到系統(tǒng)目錄/usr/src/linux-headers-3.5.0-23cd/us[tab]sr[tab]li[tab]
命令遍歷按向上方向鍵可以逐條查找之前的命令按向下方向鍵可以逐條向前遍歷命令中斷命令的執(zhí)行Ctrl+c切換路徑命令cd<路徑>↙其中<路徑>是用相對(duì)法或絕對(duì)法書寫的到要切換的目錄的路徑。cdcd..cd/home/xitee/drivercd../Download文件系統(tǒng)文件路徑絕對(duì)路徑起點(diǎn)是根目錄,從”/”開始寫起。沒有歧義,路徑較長(zhǎng),輸入麻煩。cd/usr相對(duì)路徑從當(dāng)前路徑直接寫,路徑一般較短。容易產(chǎn)生歧義。cdusr.文件與..文件在每一個(gè)目錄下都有一個(gè).文件與..文件。.文件是對(duì)當(dāng)前目錄的一個(gè)硬連接..文件是對(duì)上級(jí)目錄的一個(gè)硬連接cd./bincd../bincd/bincd../../boot/grubcat命令cat<文件名稱>cat123.txt顯示一個(gè)文本文件的內(nèi)容,catfile1>file2復(fù)制文件rm刪除命令rm<帶路徑指引的文件名稱>↙刪除文件rm
–rf
123.txtrm
123.txtrm–r可以刪除目錄也可以刪除文件注意:rm刪除的文件在回收站是找不到的,
很難恢復(fù),小心使用!cp復(fù)制命令cp<源文件名稱><目標(biāo)文件名稱>↙復(fù)制文件cp123.txt1234.txtcp123.txt/root/1234.txtcp123.txt/rootcp–r目錄名/root將目錄中子目錄一起拷貝到/rootmv剪切命令mv<原文件或子目錄名稱><新名稱>↙改變文件、目錄名稱,搬移整棵目錄樹mvaaabbb將文件aaa更名為bbbmvinfo/logs將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名為logs。mkdir創(chuàng)建目錄命令創(chuàng)建新的子目錄使用的命令是mkdir,用法是:mkdir[<路徑>/]<新目錄名稱>↙<路徑>指出新目錄所在的位置,如果路徑指引被省略,則表示在當(dāng)前目錄下創(chuàng)建新的子目錄。常用mkdir–p<目錄名稱>來遞歸產(chǎn)生目錄mkdirabc//當(dāng)前目錄下創(chuàng)建abc目錄mkdirabc/123//當(dāng)前目錄下的abc目錄下創(chuàng)建123子目錄刪除目錄命令刪除目錄刪除目錄的命令是rmdir,用法為:rmdir<目錄名稱>如果省略路徑指引,那就表示要?jiǎng)h除的子目錄位于當(dāng)前目錄下。此命令只能刪除空目錄,如果用它去刪除一個(gè)非空目錄,系統(tǒng)會(huì)給出錯(cuò)提示以降低發(fā)生誤操作的機(jī)會(huì)。要用rmdir刪非空目錄,用法是:rm–rabc刪除abc目錄文件系統(tǒng)通配符與多文件操作在Linux中,是通過通配符來實(shí)現(xiàn)一種符號(hào)可代表多個(gè)操作對(duì)象的目的,Linux下使用的通配符有三種,除了在DOS中常被使用的“*”和“?”外,還有“[]”:*:代表在其所在的位置上可以是任意多個(gè)任意字符(包括空字符)。?:代表在其所在位置上可以是任意的單個(gè)字符。[]:這是一個(gè)較特別的符號(hào),在“[”和“]”之間是一個(gè)字符集。[!]:匹配不在[!和]之間的符號(hào)。[-]:可用連續(xù)的符號(hào),將它寫成[a-h];而全體英文字母(包括大小寫)組成的字符集則可寫成[a-zA-Z]。{str1,str2}:匹配包含str1和str2的字符串。文件系統(tǒng)硬鏈接
在Linux下,一個(gè)文件可以同時(shí)歸屬于多個(gè)不同目錄,相應(yīng)的操作稱為鏈接,使用ln命令可以將一個(gè)現(xiàn)存的文件鏈接到另外一個(gè)目錄。ln<原文件名><鏈接文件名>軟鏈接
相當(dāng)于快捷方式;在符號(hào)鏈接文件類型標(biāo)示為“l(fā)”,表示這是一個(gè)符號(hào)鏈接,在彩色終端上還可以看到該文件的顏色與其他類型的文件是不一樣的。ln-s<原文件名><鏈接文件名>lnorg.txtnew1.txtlnorg.txtnew2.txtln–sorg.txtsoftlin.txt文件屬性顯示文件屬性一個(gè)文件除了作為標(biāo)識(shí)的文件名稱以外還有許多特性,例如:最后修改時(shí)間、最后訪問時(shí)間、文件的類別(一般文件、目錄或符號(hào)鏈接等)、硬鏈接數(shù)目、文件的長(zhǎng)度等。此外,Linux是一個(gè)多用戶的系統(tǒng),在對(duì)文件進(jìn)行操作時(shí),必會(huì)涉及到安全性——即用戶操作權(quán)限的問題,所有這些特性,我們統(tǒng)稱為文件的屬性。要得到文件的屬性信息,可以使用帶-l可選項(xiàng)的ls命令。利用它可以得到當(dāng)前目錄下每一個(gè)文件(廣義的文件,包括目錄、符號(hào)鏈接等)屬性的詳細(xì)信息,如圖所示。
文件權(quán)限
對(duì)于每一個(gè)文件,Linux都提供了一套文件權(quán)限系統(tǒng)。文件權(quán)限系統(tǒng),將操作文件的用戶都分成三類文件的擁有者(u)文件所屬組的成員(g)其他用戶(o)文件權(quán)限類型
對(duì)于每一類用戶,權(quán)限系統(tǒng)又分別提供他們?nèi)N權(quán)限讀(r)
:用戶是否有權(quán)力讀文件的內(nèi)容寫(w)
:用戶是否有權(quán)利改變文件的內(nèi)容執(zhí)行(x)
:用戶是否有權(quán)利執(zhí)行文件chmod改變文件權(quán)限命令
使用chmod
來改變文件的當(dāng)前權(quán)限chmod<a|u|g|o><+|-|=><權(quán)限字串><帶路徑指引的文件名稱>↙+:增加權(quán)限-:取消權(quán)限=:只賦予某個(gè)權(quán)限chmodo-r123.txtchmodu=rw.bash_profile只有文件的擁有者和root才可以改變文件的權(quán)限使用數(shù)字來改變文件權(quán)限
chmod<八進(jìn)制權(quán)限字串><文件或目錄名>↙chmod后可以用三個(gè)數(shù)字來表示用戶權(quán)限第一位代表文件擁有者權(quán)限第二位代表文件所屬組成員權(quán)限第三位代表其他用戶權(quán)限每一個(gè)數(shù)字都采用加和的方式4(讀)2(寫)1(執(zhí)行)chmod667123.txtrw-r-xrw-111111111656練習(xí)一1、/home/xitee目錄下新建一個(gè)目錄,命名為自己的名字2、從windows端拖一個(gè)文件到/root目錄中,并將該文件用命令拷貝到自己的目錄下3、將該文件的權(quán)限改為777.文件備份和壓縮gzip,gunzipLinux標(biāo)準(zhǔn)壓縮工具對(duì)文本文件可以達(dá)到75%的壓縮率compress,uncompress舊的Unix壓縮工具bzip2,bunzip2更新的Linux壓縮工具比gzip有著更高的壓縮率tar<參數(shù)>文件名
文件名在Linux下,有專用的備份命令tar,配合gzip程序可以很好得完成備份恢復(fù)工作-c:建立壓縮檔案-x:解壓-t:查看內(nèi)容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件這五個(gè)是獨(dú)立的命令,壓縮解壓都要用到其中一個(gè),可以和別的命令連用但只能用其中一個(gè)。下面的參數(shù)是根據(jù)需要在壓縮或解壓檔案時(shí)可選的。-z:有g(shù)zip屬性的-j:有bz2屬性的-Z:有compress屬性的-v:顯示所有過程-O:將文件解開到標(biāo)準(zhǔn)輸出-f:
使用檔案名字,該參數(shù)必須是最后一個(gè)參數(shù),只能接檔案名。文件備份和壓縮對(duì)于解開以tar.gz或tgz結(jié)尾的文件,使用命令:
tar–zxvffile1.tar.gz對(duì)于解開以tar.bz2,結(jié)尾的文件,使用命令:
tar–jxvffile1.tar.bz2若把文件壓縮為tar.gz結(jié)尾的文件,使用命令:
tar–czvffile.tar.gzfile若把文件壓縮為tar.gz結(jié)尾的文件,使用命令:
tar–cjvffile.tar.bz2file1、把以下文件從/root/yizhi/boot-kernel-source/拷貝到自己的目錄下并解壓縮:iTop4412_Kernel_3.0_20191007.tar.gz2、把解壓縮后的文件重新壓縮為tar.bz2格式。練習(xí)二vim(vi)文件編輯命令作為一個(gè)編輯器,vi被廣泛地運(yùn)用在各種Unix操作系統(tǒng)上。Vi是Linux中的標(biāo)準(zhǔn)文本編輯器。在ubuntu上,已經(jīng)安裝了vim(viimproved)打開文件vim文件名如果文件已存在,則此文件被打開且顯示文件內(nèi)容如果文件不存在,則vim在第一次存盤時(shí)自動(dòng)建立在硬盤上指令模式可以切換到底行模式,按鍵盤“shift+冒號(hào)”,進(jìn)入底行模式,底行模式可以輸入查找命令,退出,保存等底行模式,切換到指令模式,按鍵盤“Esc”指令模式后,切換到輸入模式,按鍵盤“I”,”a”,”o”,在文件的最下面一行出現(xiàn)“Insert”,高亮光標(biāo)出現(xiàn)在第一行第一列,此時(shí)可編譯文本。工作模式存寫文件底行模式下::w保存當(dāng)前文件:q如果未對(duì)文件做改動(dòng)則退出:wq/:x/ZZ保存當(dāng)前文件并退出:q!放棄存儲(chǔ)并退出:e文件名
打開另一文件并開始編輯輸入模式-輸入i進(jìn)入輸入新文檔用<ESC>退出輸入模式回到指令模式下/vi-vim練習(xí)三1、 使用vim工具新建一個(gè)txt文件,文件命名為自己的姓名和學(xué)號(hào),向其中輸入若干文字,并將該文件夾分別打包壓縮為.tar.gz和.tar.bz2兩種格式。熟悉vim的各種用法,再將該文件導(dǎo)出到windows系統(tǒng)中。嵌入式系統(tǒng)的組成外圍硬件嵌入式處理器操作系統(tǒng)應(yīng)用程序軟件系統(tǒng)開發(fā)環(huán)境編譯下載和調(diào)試系統(tǒng)引導(dǎo)中間軟件硬件系統(tǒng)第7章linux編程基礎(chǔ)
編寫簡(jiǎn)單的C語言程序,使用gcc編譯器將程序編譯為可執(zhí)行程序QtopiaCore應(yīng)用程序設(shè)計(jì)
利用qt平臺(tái),編寫可視化的GUIAPP第3章Linux系統(tǒng)編程基礎(chǔ)#include<stdio.h>intmain(void){intx;printf(“Helloworld!\n”);return0;}源程序:hello.c如何變成可執(zhí)行的程序?嵌入式應(yīng)用的生成編譯(Compile)是指從高級(jí)語言轉(zhuǎn)換成匯編語言的過程。從本質(zhì)上編譯是一個(gè)文本轉(zhuǎn)換的過程(從文本文件到文本文件)。編譯包含了C語言的語法解析和生成匯編語言兩個(gè)步驟。匯編(Assemble)是指從匯編語言程序生成目標(biāo)系統(tǒng)的二進(jìn)制代碼(機(jī)器代碼)的過程。相對(duì)于編譯過程的語法解析,匯編的過程相對(duì)簡(jiǎn)單。這是因?yàn)閷?duì)于一款特定的處理器,其匯編語言和二進(jìn)制的機(jī)器代碼是一一對(duì)應(yīng)的。鏈接(Link)過程將匯編成的多個(gè)機(jī)器代碼組合成一個(gè)可執(zhí)行程序。一般來說,通過編譯和匯編過程,每一個(gè)源文件將生成一個(gè)目標(biāo)文件。鏈接器的作用就是將這些目標(biāo)文件組合,組合的過程包括了代碼段、數(shù)據(jù)段等部分的合并,以及添加相應(yīng)的文件頭。GNUTools綜述GNUTools是Linux環(huán)境下的開發(fā)工具,用于代碼的生成。GNUTools的重要組成部分是GCC。GCC
是GNUCompilerCollection的縮寫,是一個(gè)非常優(yōu)秀的跨平臺(tái)編譯器集合,支持x86、ARM、MIPS和PowerPC等多種目標(biāo)平臺(tái),支持C、C++、Java、ADA、Fortran和Pascal等多種高級(jí)語言。GNUTools綜述文件類型擴(kuò)展名文件說明文本文件*.cC語言源文件*.C/*.cxx/*.cppC++語言源文件*.i預(yù)處理后的C語言源文件*.ii預(yù)處理后的C++語言源文件*.s*.S匯編語言*.h頭文件二進(jìn)制文件.o目標(biāo)文件.so動(dòng)態(tài)庫.a靜態(tài)庫GNUTools綜述
預(yù)處理
編譯
匯編
鏈接編譯原理gcc/g++在執(zhí)行編譯的時(shí)候,只要分四個(gè)階段:階段功能工具生成文件預(yù)處理完成宏定義和include文件展開等工作預(yù)處理器無(.i)編譯根據(jù)編譯參數(shù)進(jìn)行不同程度的優(yōu)化,編譯成匯編代碼;gcc匯編文件.s匯編用匯編器把匯編代碼進(jìn)一步生成目標(biāo)代碼匯編器as目標(biāo)文件.o鏈接用連接器把生成的目標(biāo)代碼和系統(tǒng)或用戶提供的庫連接起來,生成可執(zhí)行文件鏈接器ld可執(zhí)行文件使用gcc和不同的參數(shù)統(tǒng)一編譯、匯編和鏈接過程gcc編譯格式:編譯器名稱[option][filename]…編譯器:gcc:linux默認(rèn)的c編譯器g++:linux默認(rèn)的c++編譯器arm-linux-gcc:arm開發(fā)板的c編譯器,需要安裝編譯原理gcc常用編譯選項(xiàng):-E
只運(yùn)行C預(yù)編譯器cpp,不生成文件-S
只把文件編譯成為匯編代碼-c
只生成object文件,不鏈接-o
生成指定的輸出文件
gcc一般的用法gcc–其他選項(xiàng)要處理的文件-o輸出文件階段功能命令生成文件預(yù)處理完成宏定義展開等工作gcc-Ehello.c–ohello.i無(.i)編譯編譯成匯編代碼;gcc-Shello.i–ohello.s匯編文件.s匯編生成目標(biāo)代碼gcc-chello.s–ohello.o目標(biāo)文件.o鏈接用連接器把生成的目標(biāo)代碼gcc
hello.o–ohello可執(zhí)行文件#include<stdio.h>intmain(void){printf(“Helloworld!\n”);return0;}gcc編譯gcc-chello.c–ohello.o從.c到.o:從.c到
可執(zhí)行程序一步到位:gcchello.c–ohellogcc-chello.c–ohello.ogcchello.o-ohello從.c到.o,->可執(zhí)行程序:gcc編譯錯(cuò)誤類型第一類∶C語法錯(cuò)誤錯(cuò)誤資訊∶文件中第n行有語法錯(cuò)誤(syntexerrror)。這種類型的錯(cuò)誤,一般都是C語言的語法錯(cuò)誤,檢查源代碼文件中第n行及該行之前的程序,有時(shí)也需要對(duì)該文件所包含的頭文件進(jìn)行檢查。第二類∶頭文件錯(cuò)誤錯(cuò)誤資訊∶找不到頭文件。這類錯(cuò)誤是源代碼文件中的包含頭文件有問題,可能的原因有頭文件名錯(cuò)誤、指定的頭文件所在目錄名錯(cuò)誤等,也可能是錯(cuò)誤地使用了雙引號(hào)和尖括號(hào)。gcc編譯錯(cuò)誤類型第三類∶檔案庫錯(cuò)誤錯(cuò)誤資訊∶連接程序找不到所需的函數(shù)庫,例如∶ld:-lm:Nosuchfileordirectory這類錯(cuò)誤是與目標(biāo)文件相連接的函數(shù)庫有錯(cuò)誤,可能的原因是函數(shù)庫名錯(cuò)誤、指定的函數(shù)庫所在目錄名稱錯(cuò)誤等。第四類∶未定義符號(hào)錯(cuò)誤資訊∶有未定義的符號(hào)(Undefinedsymbol)。這類錯(cuò)誤是在連接過程中出現(xiàn)的,可能有兩種原因∶一是使用變量但沒有定義;二是未定義的符號(hào)是庫函數(shù),在源程序中使用了該庫函數(shù),而連接過程中還沒有給定相應(yīng)的函數(shù)庫的名稱,可修改gcc連接選項(xiàng)中的-l和-L項(xiàng)。gcc編譯/*main.c*/#include"hello.h"intmain(void){hello();return0;}/*hello1.c*/#include<stdio.h>inthello(void){
printf("Helloworld!\n");return0;}/*hello1.h*/inthello(void);可執(zhí)行程序:
hello1一步完成:gccmain.chello1.c-ohello1多步完成:gcc-cmain.c-omain.ogcc-chello1.c-ohello1.ogccmain.ohello1.o-ohello1練習(xí)1:輸入三角形的三條邊的長(zhǎng),判斷是否構(gòu)成等邊三角形、等腰三角形、直角三角形、普通三角形,還是不能構(gòu)成三角形練習(xí)2:輸入一個(gè)整數(shù)n和一個(gè)字符c,輸出菱形圖案,菱形圖案由字符c構(gòu)成,圖案總共2n+1行如輸入:3*輸出:
*
***?
*****?*******?
*****?
***?
*gcc常用編譯選項(xiàng):-w
不生成任何警告信息
-Wall
生成所有級(jí)別的警告信息gcc–ohello–whello.cgcc–ohello–Wallhello.c/***hello.c******/#include<stdio.h>intmain(void){floatx,y;x=2.0;printf(“x=%f\n”,x);}gcc編譯gcc優(yōu)化編譯選項(xiàng):-O0
不進(jìn)行代碼優(yōu)化處理.默認(rèn)值-O,O1
進(jìn)行一般優(yōu)化,在盡可能快的編譯時(shí)間內(nèi)優(yōu)化代碼-O2
進(jìn)一步優(yōu)化,時(shí)間減少但是不增加代碼量,一般在內(nèi)核編譯時(shí)使用
-O3
較-O2進(jìn)一步優(yōu)化,以增大機(jī)器代碼為代價(jià)gcc–ohello1–O1hello.cgcc–ohello2–O2hello.cgcc–ohello3–O3hello.cgcc編譯/***********optimize.c************/#include<stdio.h>intmain(void){doublecounter;doubleresult;doubletemp;for(counter=0;counter<2000.0*2000.0*2000.0/20.0+2020;counter+=(5-1)/4){temp=counter/1979;result=counter;}
printf("result=%lf\n",result);return0;}gcc–ooptimize1optimize.cgcc–ooptimize2–O2optimize.cgcc–ooptimize3–O3optimizehello.ctime./optimize1time./optimize2time./optimize3gcc常用編譯選項(xiàng):-lLIBRARY指定鏈接時(shí)需要的其它函數(shù)庫“LIBRARY”-IDIR指定額外的頭文件搜索路徑DIR-LDIR指定額外的庫函數(shù)搜索路徑DIR-g
生成可被gdb使用的標(biāo)準(zhǔn)調(diào)試信息gcc編譯gcc編譯/*main.c*/#include"hello.h"intmain(void){hello();return0;}/*hello.c*/#include<stdio.h>inthello(void){printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);main.chello.chello.h存放在同一個(gè)目錄下-IDIR指定額外的頭文件搜索路徑DIR一步完成:gccmain.chello.c-ohello源程序:main.c
hello.c多步完成:gcc-cmain.c-omain.ogcc-chello.c-ohello.ogccmain.ohello.o-ohello可執(zhí)行程序:
hellogcc編譯-IDIR指定額外的頭文件搜索路徑DIR/*main.c*/#include<hello.h>intmain(void){hello();return0;}/*hello.c*/#include<hello.h>inthello(void){printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);main.chello.c存放在同一個(gè)目錄下hello.h存放另外一個(gè)目錄下:incgcc編譯-IDIR指定額外的頭文件搜索路徑DIR一步完成:gcc
main.c
hello.c-ohello–I./inc多步完成:gcc-cmain.c-omain.o–I./incgcc-chello.c-ohello.o–I./incgccmain.ohello.o-ohellogcc編譯-IDIR指定額外的頭文件搜索路徑DIR/******sinx.c*******/#include<stdio.h>#include<math.h>intmain(void){floatx,y;x=2.0;y=sin(x);printf(“sin(2.0)=%f\n”,y);return0;}gccsinx.c–osinx-Wall-lm-lLIBRARY指定鏈接時(shí)需要的其它函數(shù)庫“LIBRARY”這些庫存放在系統(tǒng)指定的目錄中-lm表示要使用libm.a庫文件和sinx.o鏈接成為可執(zhí)行程序/****libtest.h存放于myinc目錄****///字符串頭尾翻轉(zhuǎn)externvoidreverse_string(charstr[]);//每4個(gè)字符翻轉(zhuǎn)externvoidflip_string(charstr[]);mylib目錄中放了libtest.a庫#include<stdio.h>#include<libtest.h>intmain(void){charstr[20]="abcd12345";printf("orgstring:%s\n",str);reverse_string(str);printf("newstring:%s\n",str);return0;}編譯時(shí)需用-L./mylib指明庫所在的目錄,同時(shí)使用
-ltest指明是用什么庫編譯時(shí)用-I./myinc
指明位置-IDIR指定額外的頭文件搜索路徑DIR-LDIR指定額外的庫函數(shù)搜索路徑DIRgccuselib.c–ouselib–ltest–I./myinc–L./mylib練習(xí):下載libtest.a庫文件和libtest.h頭文件,分別保存在mylib和myinc目錄下,編寫測(cè)試完成頭文件中的函數(shù)的程序。練習(xí)1、熟悉gcc的使用:新建一個(gè)helloworld程序,對(duì)該文件進(jìn)行編譯、匯編、鏈接,生成可執(zhí)行文件。2、建立一個(gè)10個(gè)數(shù)的數(shù)組,找出數(shù)組中第二大和第二小的數(shù),并輸出。編寫該程序,存放為main.c,并編譯成可執(zhí)行程序,運(yùn)行程序。3、在第2題程序的基礎(chǔ)上,新建一個(gè)文件func.c,在該文件中寫出兩個(gè)函數(shù),分別完成尋找數(shù)組的最大值和最小值功能。在main.c中調(diào)用該函數(shù)。編譯成可執(zhí)行程序,運(yùn)行程序。makefile/*main.c*/#include"hello.h"intmain(void){hello();return0;}/*hello.c*/#include<stdio.h>inthello(void){printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);make和makefilemake是一個(gè)工具,一個(gè)編譯管理工具?;蛘哒fmake是一個(gè)命令。用來解決大項(xiàng)目的程序編譯管理問題。make的執(zhí)行依賴于一個(gè)叫做makefile(Makefile)的文件。makefile規(guī)則target:file1file2…//依賴關(guān)系(tab)<command>//編譯命令依賴關(guān)系:執(zhí)行編譯命令前,檢查file1、file2是否被修改過,如果被修改了,才執(zhí)行編譯命令makefile:hello
:hello.c//依賴關(guān)系 gcc–ohellohello.c
//編譯命令參考makefile:makefile規(guī)則/*main.c*/#include"hello.h"intmain(void){hello();return0;}/*hello.c*/#include<stdio.h>inthello(void){printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);makefile規(guī)則makefile:myprog:main.ohello.o//依賴關(guān)系 gcc–omyprog
main.ohello.o//編譯命令main.o:main.chello.h//依賴關(guān)系 gcc–cmain.c//編譯命令hello.o:hello.chello.h//依賴關(guān)系 gcc–chello.c//編譯命令clean: rmmyprogmain.ohello.oMakefile的運(yùn)行
編寫makefile后,在makefile同一個(gè)目錄下運(yùn)行命令make,即可執(zhí)行makefile中的編譯命令。
如果文件的命名不是makefile或者M(jìn)akefile,則需要在make后加入?yún)?shù)格式如下:make–ffilename。make命令運(yùn)行過程1、在makefile所在目錄下運(yùn)行make命令,系統(tǒng)會(huì)自動(dòng)找到makefile中第一個(gè)目標(biāo)(myprog),并以此為最終目標(biāo)文件。2、如果目標(biāo)文件不存在,或者所依賴的文件比目標(biāo)文件的更新時(shí)間更晚,則執(zhí)行該目標(biāo)下的命令重新生成目標(biāo)文件。4、clean:如果與第一個(gè)目標(biāo)(myprog)無關(guān)的目標(biāo),則需要顯式輸入makeclean3、如果依賴的文件不存在,則會(huì)執(zhí)行對(duì)應(yīng)的命令生成依賴文件。Make規(guī)則
make的依賴性,make會(huì)一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文件。
在找尋的過程中,如果出現(xiàn)錯(cuò)誤,比如最后被依賴的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò),而對(duì)于所定義的命令的錯(cuò)誤,或是編譯不成功,make根本不理,make只管文件的依賴性。makefile規(guī)則/*main.c*/#include"hello.h“#include“printstar.h”intmain(void){hello();
print_star(2,3);return0;}/*hello.c*/#include<stdio.h>inthello(void){
printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);/*printstar.c*/#include<stdio.h>include“printstar.h”voidprint_star(unsignedm,unsignedn){unsignedi,j;for(i=0;i<m;i++){for(j=0;j<n;j++)
printf(“*”);
printf(“\n”);}return;}/*printstar.h*/Voidprint_star(unsignedm,unsignedn);Makefile怎么寫?Makefile變量的使用makefile規(guī)則makefile:myprog:main.ohello.o//依賴關(guān)系 gcc–omyprog
main.ohello.o//編譯命令main.o:main.chello.h//依賴關(guān)系 gcc–cmain.c//編譯命令hello.o:hello.chello.h//依賴關(guān)系 gcc–chello.c//編譯命令clean: rmmyprogmain.ohello.oedit:main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o cc-oeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.omain.o:main.cdefs.h cc-cmain.ckbd.o:kbd.cdefs.hcommand.h cc-ckbd.ccommand.o:command.cdefs.hcommand.h cc-ccommand.cdisplay.o:display.cdefs.hbuffer.h cc-cdisplay.cinsert.o:insert.cdefs.hbuffer.h cc-cinsert.csearch.o:search.cdefs.hbuffer.h cc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.h cc-cfiles.cutils.o:utils.cdefs.h cc-cutils.cclean: rmeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o變量定義
為了makefile的易維護(hù),在makefile中可以使用變量。makefile的變量也就是一個(gè)字符串,理解成C語言中的宏可能會(huì)更好。objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o變量定義:變量使用:$(objects)edit:main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o gcc-oeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.omain.o:main.cdefs.h
gcc-cmain.ckbd.o:kbd.cdefs.hcommand.h gcc-ckbd.ccommand.o:command.cdefs.hcommand.h gcc-ccommand.cdisplay.o:display.cdefs.hbuffer.h gcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.h gcc-cinsert.csearch.o:search.cdefs.hbuffer.h gcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.h gcc-cfiles.cutils.o:utils.cdefs.h gcc-cutils.cclean: rmeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o
objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.oedit:$(objects) gcc-oedit$(objects)main.o:main.cdefs.h gcc-cmain.ckbd.o:kbd.cdefs.hcommand.h gcc-ckbd.ccommand.o:command.cdefs.hcommand.h gcc-ccommand.cdisplay.o:display.cdefs.hbuffer.h gcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.h gcc-cinsert.csearch.o:search.cdefs.hbuffer.h gcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.h gcc-cfiles.cutils.o:utils.cdefs.h gcc-cutils.cclean: rmedit$(objects)makefile規(guī)則/*main.c*/#include"hello.h"intmain(void){hello();return0;}/*hello.c*/#include<stdio.h>inthello(void){printf("Helloworld!\n");return0;}/*hello.h*/inthello(void);hello:main.ohello.o//依賴關(guān)系 gccmain.ohello.o–ohellomain.o:main.chello.h//依賴關(guān)系 gcc-Wall–O2–cmain.c–omain.ohello.o:hello.chello.h//依賴關(guān)系 gcc-Wall–O2–chello.c–ohello.oclean: rm–rhellomain.ohello.oCC=gccobjs=main.ohello.oCFLAGS=-Wall–O2
hello:$(objs) $(CC)$(objs)–ohellomain.o:main.chello.h $(CC)$(CFLAGS)–cmain.c-omain.ohello.o:hello.chello.h $(CC)$(CFLAGS)–chello.c–ohello.oclean: rm–rhello$(objs)修改后的makefile:ARM編譯器hello:main.ohello.o gccmain.ohello.o–ohellomain.o:main.chello.h gcc-Wall–O2–cmain.c–omain.ohello.o:hello.chello.h gcc-Wall–O2–chello.c–ohello.oclean: rm–rhellomain.ohello.o原來的makefile:CC=arm-linux-gcc幾個(gè)常用的變量$@:擴(kuò)展為當(dāng)前規(guī)則的目標(biāo)文件名$<:擴(kuò)展為當(dāng)前規(guī)則的依賴文件列表中的第一個(gè)文件名$^:擴(kuò)張為當(dāng)前規(guī)則的所有依賴文件(自動(dòng)除去重復(fù)文件)CC=gccobjs=main.ohello.oCFLAGS=-Wall–O2
hello:$(objs) $(CC)–ohello$(objs)main.o:main.chello.h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《活動(dòng)管理觀念篇》課件
- 《詩歌鑒賞解題技巧》課件
- 2024年農(nóng)業(yè)局振興農(nóng)業(yè)科技工作總結(jié)
- 寒假自習(xí)課 25春初中道德與法治八年級(jí)下冊(cè)教學(xué)課件 第三單元 第六課 第5課時(shí) 國(guó)家司法機(jī)關(guān)
- 某省房屋建筑和基礎(chǔ)設(shè)施工程標(biāo)準(zhǔn)施工招標(biāo)文件
- 《詩詞賞析》課件
- 2015年高考語文試卷(北京)(解析卷)
- 體育用品銷售代表工作總結(jié)
- 建筑行業(yè)增強(qiáng)施工現(xiàn)場(chǎng)衛(wèi)生保障
- 《電動(dòng)力學(xué)》課件
- 2025年高考化學(xué)二、三輪復(fù)習(xí)策略講座
- 2022年高考數(shù)學(xué)試卷(上海)(秋考)(空白卷)
- 山東省濟(jì)南市語文小升初2024年模擬試題與參考答案
- 裝配式建筑復(fù)習(xí)試題及答案
- 空氣動(dòng)力學(xué)仿真技術(shù):湍流模型:k-ε湍流模型原理與應(yīng)用
- 高中期末考試考風(fēng)考紀(jì)及誠(chéng)信教育
- 2025屆廣東省深圳市深圳外國(guó)語九年級(jí)物理第一學(xué)期期末經(jīng)典試題含解析
- 機(jī)械工程技術(shù)訓(xùn)練智慧樹知到期末考試答案章節(jié)答案2024年北京航空航天大學(xué)
- 醫(yī)生與患者關(guān)系中的信任與治療
- 心衰患者的容量管理中國(guó)專家共識(shí)-共識(shí)解讀
- 文字學(xué)概要完整版本
評(píng)論
0/150
提交評(píng)論