




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章1, 嵌入式系統(tǒng)發(fā)展的4個(gè)階段(書2)2, 嵌入式的發(fā)展趨勢(shì)(書2)3, 嵌入式的定義,組成與特點(diǎn)(書3)第三章4, 嵌入式的基本特征(書11)5, 嵌入式處理器分類(書12)6, Cortex A8 處理器(書27)第四章7, 嵌入式操作系統(tǒng)的特征(書83)8,嵌入式linux操作系統(tǒng)的特點(diǎn)(書87)第1章 嵌入式系統(tǒng)概述1.1 嵌入式系統(tǒng)的發(fā)展史l 1.1.1嵌入式系統(tǒng)發(fā)展的4個(gè)階段l 1.1.2嵌入式系統(tǒng)的發(fā)展趨勢(shì)l 1.2 嵌入式系統(tǒng)的定義、組成與特點(diǎn)l 1.2.1嵌入式系統(tǒng)的定義l 1.2.2嵌入式系統(tǒng)的組成l 1.2.3嵌入式系統(tǒng)的特點(diǎn)嵌入式系統(tǒng)的應(yīng)用領(lǐng)域嵌入式設(shè)計(jì)中,也產(chǎn)生
2、了階段性的開發(fā)方式和多級(jí)產(chǎn)業(yè)鏈。電子專業(yè)和計(jì)算機(jī)專業(yè)在嵌入式系統(tǒng)中產(chǎn)生了融合,它們可以嵌入式系統(tǒng)的下層和上層設(shè)計(jì)。由于嵌入式系統(tǒng)與客觀的對(duì)象有著很強(qiáng)的交互性,它與工業(yè)控制、通訊的等學(xué)科的聯(lián)系也非常緊密。嵌入式系統(tǒng)的發(fā)展史單片機(jī)模式和計(jì)算機(jī)模式嵌入式系統(tǒng)發(fā)展的4個(gè)階段1、以微控制器為核心的無操作系統(tǒng)階段2、以嵌入式微處理器為基礎(chǔ)的簡(jiǎn)單操作系統(tǒng)階段3、以嵌入式操作系統(tǒng)為標(biāo)志的中級(jí)嵌入式系統(tǒng)4、以Internet為標(biāo)志的高級(jí)嵌入式系統(tǒng)嵌入式系統(tǒng)的發(fā)展趨勢(shì)1、支持小型電子設(shè)備實(shí)現(xiàn)小尺寸、微功耗和低成本2、提供精巧的多媒體人機(jī)界面一個(gè)普遍被認(rèn)同的嵌入式系統(tǒng)的定義以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件
3、可裁剪、適應(yīng)應(yīng)用系統(tǒng),對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用 計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的組成微處理器,外圍硬件,嵌入式操作系統(tǒng),應(yīng)用程序,(開發(fā)環(huán)境)1 微處理器微處理器是嵌入式系統(tǒng)的核心。嵌入式微處理器一般都具有較高的集成度。嵌入式微處理器一般包含通用計(jì)算機(jī)CPU和芯片組的功能。2 外圍硬件外圍硬件是嵌入式系統(tǒng)處理器以外的硬件,它為系統(tǒng)提供了運(yùn)行條件和部分功能。在運(yùn)行條件方面,最基礎(chǔ)的是時(shí)鐘和電源部件,它們不可能集成到處理器內(nèi)部,但它們對(duì)于處理器運(yùn)轉(zhuǎn)是必需的。外圍硬件也將提供在系統(tǒng)中需要,但是微處理器內(nèi)部不具有的功能,如:內(nèi)存、各種通訊端口等。3 嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)的作用一般
4、只是為了應(yīng)用程序提供必要運(yùn)行環(huán)境(任務(wù)調(diào)度),附加任務(wù)通訊、內(nèi)存管理等功能。嵌入式系統(tǒng)和系統(tǒng)的硬件基礎(chǔ)關(guān)系緊密,一般都需要移植和配置才可以使用。嵌入式操作系統(tǒng)讓嵌入式系統(tǒng)的開發(fā)利用通用的功能模塊,這可以讓開發(fā)更加高效。4 應(yīng)用程序在嵌入式系統(tǒng)中,應(yīng)用程序的層級(jí)遠(yuǎn)遠(yuǎn)少于通用計(jì)算機(jī)。由于控制硬件是嵌入式系統(tǒng)基本的操作,因此嵌入式應(yīng)用程序依然與系統(tǒng)的硬件基礎(chǔ)關(guān)系密切。尤其在沒有操作系統(tǒng)的情況下,嵌入式的應(yīng)用程序需要直接訪問寄存器或者設(shè)備的地址來操作硬件。5 開發(fā)環(huán)境開發(fā)環(huán)境并不是嵌入式系統(tǒng)產(chǎn)品的一部分,但是它在嵌入式系統(tǒng)的產(chǎn)品的開發(fā)過程中起著至關(guān)重要的作用。不同嵌入式系統(tǒng)的開發(fā)環(huán)境差異是很大的。嵌入
5、式系統(tǒng)的特點(diǎn)特定的設(shè)計(jì),各學(xué)科結(jié)合的產(chǎn)物,高效的設(shè)計(jì),與具體應(yīng)用相結(jié)合,存儲(chǔ)特性,交叉開發(fā)開發(fā)平臺(tái)1、裝有Ubuntu系統(tǒng)或裝有Ubuntu虛擬機(jī)的PC機(jī)一臺(tái);2、凌陽A8嵌入式實(shí)驗(yàn)箱一臺(tái);操作系統(tǒng)(1)Linux在所有的操作系統(tǒng)中,Linux是一個(gè)發(fā)展最快、應(yīng)用最為廣泛的操作系統(tǒng)。Linux本身的種種特性使其成為嵌入式開發(fā)中的首選。(2)mC/OS它的特點(diǎn)是:公開源代碼,代碼結(jié)構(gòu)清晰,注釋詳盡,組織有條理,可移植性好;可裁剪,可固化;搶占式內(nèi)核,最多可以管理60個(gè)任務(wù)。(3)Windows CEWindows CE是微軟的產(chǎn)品,它是從整體上為有限資源的平臺(tái)設(shè)計(jì)的多線程、完整優(yōu)先權(quán)、多任務(wù)的操
6、作系統(tǒng)。(4)VxWorksVxWorks是WindRiver公司專門為實(shí)時(shí)嵌入式系統(tǒng)設(shè)計(jì)開發(fā)的操作系統(tǒng)軟件,為程序員提供了高效的實(shí)時(shí)任務(wù)調(diào)度、中斷管理,實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信。(5)QNX這也是一款實(shí)時(shí)操作系統(tǒng),由加拿大QNX軟件系統(tǒng)有限公司開發(fā)。廣泛應(yīng)用于自動(dòng)化、控制、機(jī)器人科學(xué)、電信、數(shù)據(jù)通信、航空航天、計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)、醫(yī)療儀器設(shè)備、交通運(yùn)輸、安全防衛(wèi)系統(tǒng)、POS機(jī)、零售機(jī)等任務(wù)關(guān)鍵型應(yīng)用領(lǐng)域。linux背景知識(shí)Unix:Unix是1969年AT&T貝爾實(shí)驗(yàn)室創(chuàng)造的一種健壯、靈活的操作系統(tǒng)。特點(diǎn)是:可靠性高、伸縮性強(qiáng)、開放性好、植根于網(wǎng)絡(luò)、強(qiáng)大的數(shù)據(jù)庫支持功能。GNU: GN
7、U是GNUs not UNIX的縮寫。 GNU Project開始于1984年,由自由軟件基金(FSF ,F(xiàn)ree SoftwareFoundation)支持,目的是為了建立免費(fèi)的UNIX系統(tǒng)。Free Software :自由軟件。free并不是免費(fèi)。使用者有使用、研究、修改、發(fā)布的自由。如此整個(gè)社群都能受惠,前提是獲取或開放源碼。GPL:General Public License 通用公共授權(quán)。Copyleft :Copyleft帶有標(biāo)準(zhǔn)的copyright聲明,確認(rèn)作者的所有權(quán)和標(biāo)志。但它放棄了標(biāo)準(zhǔn)copyright中暗含的一些其它權(quán)利:它聲明,你不但可以自由分發(fā)該成果,你也可以自由地
8、修改它。但你不能聲明你做了原始的工作,或聲明是由他人做的。最終,所有派生的工作必須遵循這些條款。嵌入式LinuxLinux起源于芬蘭一個(gè)名為L(zhǎng)inus Torvalds的業(yè)余愛好,是最為流行的一款開放源代碼的操作系統(tǒng)。Linux 1991年問世,現(xiàn)在已經(jīng)發(fā)展成為一個(gè)功能強(qiáng)大、設(shè)計(jì)完善的操作系統(tǒng)。Linux系統(tǒng)現(xiàn)已成為嵌入式操作系統(tǒng)的理想選擇。嵌入式Linux源碼開放、免費(fèi),同時(shí)提供強(qiáng)大功能,包括支持多種文件系統(tǒng)、內(nèi)置TCP/IP等網(wǎng)絡(luò)協(xié)議、支持圖形用戶界面,并且易于移植。嵌入式Linux特點(diǎn)開放源代碼、模塊化設(shè)計(jì),穩(wěn)定性好,網(wǎng)絡(luò)功能強(qiáng)大,跨平臺(tái)Linux 的發(fā)行版本Ubuntu,Red Hat
9、,F(xiàn)edora,OpenSUSE,Debian,Mandriva,Mint,PCLinuxOS,Slackware,Gentoo,CentOS典型的嵌入式處理器ARMARM 公司是全球領(lǐng)先的16/32 位RISC 微處理器知識(shí)產(chǎn)權(quán)設(shè)計(jì)供應(yīng)商。ARM 公司通過將其高性能、低成本、低功耗的RISC 微處理器,外圍和系統(tǒng)芯片設(shè)計(jì)技術(shù)轉(zhuǎn)讓給合作伙伴來生產(chǎn)各具特色的芯片。ARM 公司已成為移動(dòng)通信、手持設(shè)備、多媒體數(shù)字消費(fèi)嵌入式解決方案的RISC 標(biāo)準(zhǔn)。ARM 處理器的3 大特點(diǎn):小體積、低功耗、低成本而高性能; 16/32 位雙指令集;全球眾多的合作伙伴CORTEX-A8本實(shí)驗(yàn)箱采用三星公司的ARM
10、CORTEX-A8內(nèi)核的S5PV210芯片作為處理器。 該芯片又名“蜂鳥”(Hummingbird),是三星推出的一款適用于智能手機(jī)和平板電腦等多媒體設(shè)備的應(yīng)用處理器,主頻可達(dá)1GHZ,64/32 位內(nèi)部總線結(jié)構(gòu),32/32KB 的數(shù)據(jù)/指令一級(jí)緩存,512KB 的二級(jí)緩存,可以實(shí)現(xiàn)2000DMIPS(每秒運(yùn)算2 億條指令集)的高性能運(yùn)算能力。Cortex-A8采用了復(fù)雜的流水線構(gòu)架,是ARM公司第一款超級(jí)標(biāo)量處理器。S5PV210 的存儲(chǔ)控制器支持LPDDR1,LPDDR2 和DDR2 類型的RAM,F(xiàn)lash 支持Nandflash,Norflash,OneNand 等,外圍接口豐富。本實(shí)
11、驗(yàn)箱包括以下資源:S5PV210 核心處理器,1GBytes DDRII,1GBytes NAND Flash,UART 接口,USB2.0 接口(HOST/OTG),以太網(wǎng)接口,GPRS 接口,GPS 接口,Zigbee 無線通信接口,F(xiàn)M 收音機(jī)接口 等。實(shí)驗(yàn)箱資源完備,支持多種方式啟動(dòng),例如SD 卡啟動(dòng)、NAND 啟動(dòng)等。一般情況下,更新系統(tǒng)時(shí)采用SD卡啟動(dòng),正常情況都采用NAND啟動(dòng),即自動(dòng)運(yùn)行NANDFLASH中的UBOOT,從而啟動(dòng)系統(tǒng)。(1)系統(tǒng)在出廠時(shí)默認(rèn)的啟動(dòng)方式是Nand 啟動(dòng),啟動(dòng)之前確認(rèn)核心板旁邊的撥碼開關(guān)(SW1)的第二位置“ON”端,其余的撥至“OFF”端。(2)將
12、實(shí)驗(yàn)箱核心板左側(cè)的撥碼開關(guān)的第3和第4位,設(shè)置為ON,其余設(shè)置為OFF;即為SD卡啟動(dòng)。并將制作好的SD卡插入實(shí)驗(yàn)箱右下角的“SD2”插槽內(nèi)。嵌入式Linux開發(fā)流程建立開發(fā)環(huán)境操作系統(tǒng)一般使用Linux的某個(gè)發(fā)行版,在本課程中采用Ubuntu10.10,選擇定制安裝或全部安裝,通過網(wǎng)絡(luò)下載相應(yīng)的GCC交叉編譯器進(jìn)行安裝(比如arm-linux-gcc),或者安裝產(chǎn)品廠家提供的交叉編譯器。配置開發(fā)主機(jī)配置MINICOM,一般參數(shù)為波特率115200,數(shù)據(jù)位8位,停止位1,無奇偶校驗(yàn),軟硬件控制流設(shè)為無。在WINDOWS下的超級(jí)終端的配置也是這樣。MINICOM軟件的作用是作為調(diào)試嵌入式開發(fā)板信
13、息輸出的監(jiān)視器和鍵盤輸入的工具。配置網(wǎng)絡(luò),主要是配置NFS網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過程。建立引導(dǎo)裝載程序BootLoader從網(wǎng)絡(luò)上下載一些公開源代碼的BootLoader,如U-Boot、BLOB、VIVI、LILO、ARM-Boot、Redboot等,根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的ARM7、ARM9系列芯片,這樣就需要編寫燒寫開發(fā)板上flash的燒寫程序,網(wǎng)絡(luò)上有免費(fèi)下載的WINDOWS下通過JTAG并口簡(jiǎn)易仿真器燒寫ARM外圍flash芯片的程序。也有LINUX下公開源代碼的J-Flash程序。如果不能燒寫自己的開發(fā)
14、板,就需要根據(jù)自己的具體電路進(jìn)行源代碼修改。這是讓系統(tǒng)可以正常運(yùn)行的第一步。如果你購(gòu)買了廠家的仿真器當(dāng)然比較容易燒寫flash了,但是其中的核心技術(shù)是無法了解的。這對(duì)于需要迅速開發(fā)應(yīng)用的人來說可以極大地提高開發(fā)速度。下載別人已經(jīng)移植好的Linux操作系統(tǒng),如uCLinux、ARM-Linux、PPC-Linux等,如果有專門針對(duì)你所使用的CPU移植好的Linux操作系統(tǒng)那是再好不過,下載后再添加自己的特定硬件的驅(qū)動(dòng)程序,進(jìn)行調(diào)試修改,對(duì)于帶MMU 的CPU 可以使用模塊方式調(diào)試驅(qū)動(dòng),對(duì)于uCLinux這樣的系統(tǒng)好像只能編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。建立根文件系統(tǒng)可以使用BusyBox軟件進(jìn)行功能裁減,產(chǎn)
15、生一個(gè)最基本的根文件系統(tǒng),再根據(jù)自己的應(yīng)用需要添加其他的程序??梢孕薷母募到y(tǒng)中默認(rèn)的啟動(dòng)腳本,來適應(yīng)應(yīng)用的需要。啟動(dòng)腳本存放位置位于/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自動(dòng)掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會(huì)隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用mkcramfs 、genromfs等工具產(chǎn)生燒寫映象文件。建立應(yīng)用程序的flash磁盤分區(qū),一般使用JFFS2或YAFFS文件系統(tǒng),這需要在內(nèi)核中提供這些文件系統(tǒng)的驅(qū)動(dòng),有的系統(tǒng)使用一個(gè)線性Flash(NOR 型)512K32
16、M,有的系統(tǒng)使用非線性Flash(NAND 型)8512M,有的兩個(gè)同時(shí)使用,需要根據(jù)應(yīng)用規(guī)劃Flash的分區(qū)方案。嵌入式Linux開發(fā)環(huán)境搭建流程環(huán)境配置步驟1、連接PC機(jī)與實(shí)驗(yàn)箱2、制作引導(dǎo)卡(SD卡)3、復(fù)制Linux鏡像文件4、燒寫系統(tǒng)(燒寫過程不考)首次啟動(dòng)1、將實(shí)驗(yàn)箱設(shè)置為由Nand Flash啟動(dòng),開關(guān)2設(shè)置為ON,其余均為OFF。2、按下實(shí)驗(yàn)箱的RESET按鍵,或者POWER_ON按鍵。3、燒寫后的首次啟動(dòng)需要進(jìn)行坐標(biāo)校驗(yàn)。(30秒內(nèi))4、如需重新校驗(yàn),在終端執(zhí)行/usr/local/tslib/bin/ts_calibrate開發(fā)機(jī)環(huán)境要求開發(fā)機(jī)(PC機(jī))運(yùn)行嵌入式Linux
17、操作系統(tǒng)。本課程選擇發(fā)行版Ubuntu10.10系統(tǒng),并且使用虛擬機(jī)運(yùn)行。網(wǎng)絡(luò)環(huán)境配置手動(dòng)配置的方式為實(shí)驗(yàn)箱分配IP地址-i后面的參數(shù)是實(shí)驗(yàn)箱的IP地址;-m后面的參數(shù)是子網(wǎng)掩碼;-g后面的參數(shù)是網(wǎng)關(guān)地址。如果不需要網(wǎng)關(guān),可以將-g和其后面的參數(shù)省略。設(shè)置完成之后,需要執(zhí)行“servicenetwork restart”命令重啟網(wǎng)絡(luò)服務(wù),使設(shè)置生效。如需查看實(shí)驗(yàn)箱當(dāng)前的IP地址,可以執(zhí)行命令“ifconfig eth0”。windows到實(shí)驗(yàn)箱的/root目錄。在地址欄輸入:ftp:/A8的IP地址,即可訪問/root目錄。Ubuntu下運(yùn)行效果第五章9,shell編程(書119)10,mak
18、efile(書158)第六章11,bootloader的基本概念(書179)第七章12,linux內(nèi)核的功能(書193)13,linux內(nèi)核的特點(diǎn)(書195)1 、Linux 簡(jiǎn)介2 、Linux 目錄結(jié)構(gòu)3 、Linux 常用命令4 、Linux 文件訪問5 、Shell 編程Linux簡(jiǎn)介一個(gè)典型的Linux發(fā)行版包括:Linux內(nèi)核,一些GNU程序庫和工具,命令行shell,圖形界面的X Window系統(tǒng)和相應(yīng)的桌面環(huán)境,如KDE或GNOME,并包含數(shù)千種從辦公套件,編譯器,文本編輯器到科學(xué)工具的應(yīng)用軟件。紅帽(Redhat)、Ubuntu等Linux的發(fā)展離不開GNU ( GNU 在英
19、文中原意為非洲牛羚,這里是GNU isNot Unix 的遞歸縮寫), GNU計(jì)劃又稱革奴計(jì)劃,是由Richard Stallman在1983年9月27日公開發(fā)起的,它的目標(biāo)是創(chuàng)建一套完全自由的操作系統(tǒng)。GNU計(jì)劃開發(fā)出了許多高質(zhì)量的免費(fèi)軟件,如:GCC、GDB、Bash Shell等,這些軟件為L(zhǎng)inux的開發(fā)創(chuàng)造了基本的環(huán)境,是Linux發(fā)展的重要基礎(chǔ),因此,嚴(yán)格來講,Linux應(yīng)該被稱為GNU/Linux。Linux一般目錄結(jié)構(gòu)/bin : 存放常用命令,例如cp,ls等l /boot: 存放系統(tǒng)內(nèi)核以及啟動(dòng)管理器,類似grubl /dev:存放設(shè)備文件l /etc: 存放相應(yīng)的系統(tǒng)配置
20、文件l /home:用戶工作根目錄l /lib: 存放系統(tǒng)最基本的動(dòng)態(tài)鏈接共享庫l /root:超級(jí)用戶的工作目錄l /sbin:系統(tǒng)管理員的常用管理程序,是系統(tǒng)級(jí)的可執(zhí)行文件l /tmp: 存放臨時(shí)文件l /lost+found:系統(tǒng)出現(xiàn)異常時(shí),用于保存部分資料,存放在文件系統(tǒng)修復(fù)時(shí)恢復(fù)的文件/misc : 一些實(shí)用工具l /mnt: 光驅(qū)、硬盤等的掛載點(diǎn)l /media: 光驅(qū)的自動(dòng)掛載點(diǎn)l /proc: 操作系統(tǒng)的實(shí)時(shí)信息l /sys: 系統(tǒng)中的硬件設(shè)備信息l /srv: 服務(wù)啟動(dòng)后需要提取的信息,特定服務(wù)的文件l /var:主要存放系統(tǒng)日志l /usr:存放用戶程序l /tftpboo
21、t: tftp服務(wù)器的服務(wù)目錄l /selinux:系統(tǒng)提供的selinux安全程序,存放提供強(qiáng)制訪問控制的相應(yīng)文件Ubuntu 10.10發(fā)行版中另有以下目錄l /cdrom:Ubuntu系統(tǒng)安裝光盤鏡像的掛載位置,這個(gè)目錄根據(jù)用戶的實(shí)際情況而存在,有些系統(tǒng)中可能沒有。l /opt:用于存放安裝時(shí)“可選”的程序。Linux常用命令進(jìn)入Linux系統(tǒng),必須要輸入用戶的賬號(hào),在系統(tǒng)安裝過程中可以創(chuàng)建以下兩種帳號(hào):l 1root-超級(jí)用戶帳號(hào)(系統(tǒng)管理員),使用這個(gè)帳號(hào)可以在系統(tǒng)中做任何事情。l 2普通用戶-這個(gè)帳號(hào)供普通用戶使用,可以進(jìn)行有限的操作。l 一般的Linux使用者均為普通用戶,而系統(tǒng)
22、管理員一般使用超級(jí)用戶帳號(hào)完成一些系統(tǒng)管理的工作。如果只需要完成一些由普通帳號(hào)就能完成的任務(wù),建議不要使用超級(jí)用戶帳號(hào),以免無意中破壞系統(tǒng),影響系統(tǒng)的正常運(yùn)行。用戶登錄分兩步:l 第一步,輸入用戶的登錄名l 第二步,輸入用戶的口令l 當(dāng)用戶正確地輸入用戶名和口令后,就能合法地進(jìn)入系統(tǒng)。屏幕顯示:l rootloclhost /root #l 這時(shí)就可以對(duì)系統(tǒng)做各種操作了。超級(jí)用戶的提示符是“#”,其他用戶的提示符是“$”。Linux常用命令添加用戶 useradd,切換用戶 su,格式:su 選項(xiàng)用戶名,范例:su root /切換到root用戶/并將root的環(huán)境變量同時(shí)帶入修改用戶密碼 p
23、asswd,格式:passwd 選項(xiàng) 用戶名關(guān)機(jī) shutdown復(fù)制 cp,移動(dòng)(剪切)mv,刪除 rm,創(chuàng)建目錄 mkdir,切換目錄 cd顯示當(dāng)前目錄絕對(duì)路徑 pwd,查看 ls,掛載 mount,網(wǎng)絡(luò)配置 ifconfig/ipconfig解壓/壓縮 tar,格式:tar 選項(xiàng) 目錄或文件,范例:l 1.tar cvf tmp.tar /home/tmpl 將/home/tmp目錄下的所有文件和目錄打包成一個(gè)tmp.tar文件l 2.tar xvf tmp.tar 目錄l 將打包文件tmp.tar在當(dāng)前目錄下解開3.tar cvzf tmp.tar.gz /home/tmpl 將/ho
24、me/tmp目錄下的所有文件和目錄打包并壓縮成一個(gè)tmp.tar.gz文件l 4.tar xvzf tmp.tar.gzl 將打包壓縮文件tmp.tar.gz在當(dāng)前目錄下解開解壓zip文件 unzip格式:unzip 選項(xiàng) 壓縮文件名.zip范例:l unzip tmp.zip解壓tmp.zip文件tar命令常用參數(shù)介紹l -f 使用歸檔文件,-z 通過gzip過濾歸檔,-v 詳細(xì)列出處理的文件,-x 解壓,-c 打包Linux文件訪問訪問權(quán)限l 系統(tǒng)中的每個(gè)文件和目錄都有訪問許可權(quán)限,用它來確定誰可以通過何種方式對(duì)文件和目錄進(jìn)行訪問文件。或目錄的訪問權(quán)限分為只讀,只寫和可執(zhí)行三種。有三種不同
25、類型的用戶可對(duì)文件或目錄進(jìn)行訪問:文件所有者,與所有者同組的用戶、其他用戶。所有者一般是文件的創(chuàng)建者。每一文件或目錄的訪問權(quán)限都有三組,每組用三位表示,分別為文件所有者的讀、寫和執(zhí)行權(quán)限;與所有者同組的用戶的讀、寫和執(zhí)行權(quán)限;系統(tǒng)中其他用戶的讀、寫和執(zhí)行權(quán)限。當(dāng)用ls -l命令顯示文件或目錄的詳細(xì)信息時(shí),最左邊的一列為文件的訪問權(quán)限。例如:l $ ls -l sobsrc. tgzl -rw-r-r- 1 root root 483997 Ju1 l5 17:3l sobsrc. Tgz注意這里共有10個(gè)位置。第一個(gè)字符指定了文件類型,d表示目錄;c表示字符設(shè)備文件;s表示套接字文件;b表示塊
26、設(shè)備文件;p表示命名管道文件;-表示普通文件。r代表只讀,w代表寫,x代表可執(zhí)行,-代表無該項(xiàng)權(quán)限。修改文件權(quán)限 chmod格式:chmod who + | - | = mode 文件名參數(shù):l who:l u 表示文件的所有者。l g 表示與文件所有者同組的用戶。l o 表示“其他用戶”。l a 表示“所有用戶”。它是系統(tǒng)默認(rèn)值。l mode:l + 添加某個(gè)權(quán)限l - 取消某個(gè)權(quán)限l = 賦予給定權(quán)限l例:chmod g+w hello.cl例:chmod 761 hello.cshell編程什么是Shell?l 簡(jiǎn)單地講,就是命令解析器,將用戶輸入的指令轉(zhuǎn)換為相應(yīng)的機(jī)器能夠運(yùn)行的程序。種
27、類l Bourne shell (sh),Korn shell (ksh),Bourne Again shell (bash), C shell (包括csh and tcsh) TENEX/TOPS C shell (tcsh)Shell的作用是解釋執(zhí)行用戶的命令,用戶輸入一條命令,Shell就解釋執(zhí)行一條,這種方式稱為交互式(Interactive),Shell還有一種執(zhí)行命令的方式稱為批處理(Batch),用戶事先寫一個(gè)Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執(zhí)行完,而不必一條一條地敲命令。Shell腳本和編程語言很相似,也有變量和流程控制語句,但Sh
28、ell腳本是解釋執(zhí)行的,不需要編譯,Shell程序從腳本中一行一行讀取并執(zhí)行這些命令,相當(dāng)于一個(gè)用戶把腳本中的命令一行一行敲到Shell提示符下執(zhí)行。bash(Bourne Again Shell):由GNU開發(fā)的Shell,主要目標(biāo)是與POSIX標(biāo)準(zhǔn)保持一致,同時(shí)兼顧對(duì)sh的兼容,bash從csh和ksh借鑒了很多功能,是各種Linux發(fā)行版標(biāo)準(zhǔn)配置的Shell,在Linux系統(tǒng)上/bin/sh往往是指向/bin/bash的符號(hào)鏈接??梢源蜷_文件/etc/shells查看系統(tǒng)中所有已知(不一定已安裝)的Shell。用戶的默認(rèn)Shell設(shè)置在/etc/passwd文件中。用戶在命令行輸入命令后
29、,一般情況下Shell會(huì)fork并exec該命令,但是Shell的內(nèi)建命令例外,執(zhí)行內(nèi)建命令相當(dāng)于調(diào)用Shell進(jìn)程中的一個(gè)函數(shù),并不創(chuàng)建新的進(jìn)程。以前學(xué)過的cd、exit等命令即是內(nèi)建命令,凡是用which命令查不到程序文件所在位置的命令都是內(nèi)建命令,內(nèi)建命令沒有單獨(dú)的man手冊(cè),要在man手冊(cè)中查看內(nèi)建命令,可以使用以下命令。l $ man bash-builtinsl Linux有很多內(nèi)建命令,如export、shift、if、eval、for、while等等。內(nèi)建命令雖然不創(chuàng)建新的進(jìn)程,但也會(huì)有ExitStatus,通常也用0表示成功非零表示失敗,雖然內(nèi)建命令不創(chuàng)建新的進(jìn)程,但執(zhí)行結(jié)束
30、后也會(huì)有一個(gè)狀態(tài)碼,也可以用特殊變量$?讀出。Shell腳本是一個(gè)包含一系列命令序列的文本文件。當(dāng)運(yùn)行這個(gè)腳本文件時(shí),文件中包含的命令序列將得到執(zhí)行。在shell編程中,所有的變量都由字符串組成,并且不需要預(yù)先對(duì)變量進(jìn)行聲明,例eg1:hello.sh:l #!/bin/shl #set variable a /#開頭的句子表示注釋直到這一行的結(jié)束l a=hello worldl # print al echo a is:l echo $al若要執(zhí)行以上腳本文件,需要修改hello.sh的權(quán)限或者把文件名改為script.sh。有時(shí)候變量名很容易與其他文字混淆,比如eg1:l num=2l e
31、cho this is the $numnd“l(fā)思考:輸出?Why?l注意:1. 變量賦值時(shí),“=”左右兩邊都不能有空格否則會(huì)被Shell解釋成命令和命令行參數(shù)。l2. BASH 中的語句結(jié)尾不需要分號(hào)num=2l echo this is the $numndl 這并不會(huì)打印出this is the 2nd,而僅僅打印this is the ,因?yàn)閟hell會(huì)去搜索變量numnd的值,但是這個(gè)變量時(shí)沒有值的??梢允褂没ɡㄌ?hào)來告訴shell我們要打印的是num 變量:l num=2l echo this is the $numndl 這將打印: this is the 2ndShell中的變量
32、可分為局部變量、環(huán)境變量、位置變量三種。Shell語言是一種解釋型語言,它與C或Java語言不同,編程時(shí)無需事先聲明變量。當(dāng)對(duì)一個(gè)變量進(jìn)行賦值時(shí),也就定義了變量。局部變量指的是只在當(dāng)前的進(jìn)程和程序中有效的變量。shell程序的變量是無數(shù)據(jù)類型的,可以使用同一個(gè)變量存放不同數(shù)據(jù)類型的值。變量賦值之后,只需在變量前面加一個(gè)$符號(hào)即可訪問變量的值??梢杂觅x值符號(hào)=為變量賦值。變量的值如果是不帶空格的字符串,則可以不加引號(hào)。變量輸出使用的命令是echo。eg2:shell腳本中變量的定義與賦值。#!/bin/bash#eg2.sha=123 #直接為變量賦值b=1.23c=xyzd=efgh xyze
33、=efgh xyzecho $a #打印變量的值echo $becho $cecho $decho $e環(huán)境變量是在一個(gè)用戶的所有進(jìn)程中都可以訪問的變量。系統(tǒng)中常常使用環(huán)境變量來存儲(chǔ)常用的信息。使用export命令可以查看系統(tǒng)的環(huán)境變量列表。環(huán)境變量的訪問:需要在一個(gè)環(huán)境變量的前面加一個(gè)$符號(hào)環(huán)境變量的定義:使用export命令定義環(huán)境變量。環(huán)境變的名稱一般都是大寫的。l export XX=1234l echo $XX在系統(tǒng)配置文件中定義環(huán)境變量 :上面定義的環(huán)境變量,只在當(dāng)前shell中運(yùn)行的所有進(jìn)程中有效。系統(tǒng)重啟后失效。同學(xué)們可以試一下在系統(tǒng)配置中加入這些環(huán)境變量的定義。在環(huán)境變量配置
34、文件/etc/profile中定義兩個(gè)環(huán)境變量:l export A1=hellol export A2=12345位置變量:是shell程序在運(yùn)行時(shí)傳入的參數(shù)。程序中可以用變量的形式來調(diào)用這些參數(shù)。這些參數(shù)被存放在1到9的9個(gè)特殊變量名中,被形象的稱為位置變量。同普通變量一樣,位置變量用$前綴加數(shù)字來表示。l $# :傳入腳本的命令行參數(shù)個(gè)數(shù)l $* :所有命令行參數(shù)值,在各個(gè)參數(shù)值之間留有空格l $0 :命令本身(shell文件名)l $1 :第一個(gè)命令行參數(shù)l $2 :第二個(gè)命令行參數(shù)eg3:l #!/bin/shl echo number of vars:$#l echo values
35、 of vars:$*l echo value of var1:$1l echo value of var2:$2l echo value of var3:$3l echo value of var4:$4l 運(yùn)行./eg3.sh 1 2 3 4l 輸出結(jié)果:?算術(shù)運(yùn)算符:是可以在程序中實(shí)現(xiàn)加、減、乘、除等數(shù)學(xué)運(yùn)算的運(yùn)算符。Shell中常用的數(shù)學(xué)運(yùn)算符如下所示。l +:對(duì)兩個(gè)變量做加法。l -:對(duì)兩個(gè)變量做減法。l *:對(duì)兩個(gè)變量做乘法。l /:對(duì)兩個(gè)變量做除法。l *:對(duì)兩個(gè)變量做冪運(yùn)算。l %:取模運(yùn)算,第一個(gè)變量除以第二個(gè)變量求余數(shù)。l +=:加等于,在自身基礎(chǔ)上加第二個(gè)變量。l -=:
36、減等于,在第一個(gè)變量的基礎(chǔ)上減去第二個(gè)變量。l *=:乘等于,在第一個(gè)變量的基礎(chǔ)上乘以第二個(gè)變量。l /=:除等于,在第一個(gè)變量的基礎(chǔ)上除以第二個(gè)變量。l %=:取模賦值,第一個(gè)變量對(duì)第二個(gè)變量取模運(yùn)算,再賦值給第一個(gè)變量。#!/bin/bash#eg4.shs=0 #定義一個(gè)求和變量,初值為0。t=expr $1*$2 #用expr改變運(yùn)算順序,求參數(shù)1的參數(shù)2次方。t=$t*3 #t乘以3。s=$s+t #結(jié)果相加。t=$1*2 #求x的平方。t=$t*4 #結(jié)果乘以4。s=$s+t #結(jié)果相加。t=expr $2*5 #求5y的值。s=$s+t #結(jié)果相加。s=$s+6 #結(jié)果加上6。e
37、cho $s #輸出結(jié)果。輸入指的是shell程序讀入數(shù)據(jù)。有從文件讀取、從用戶輸入讀取等方式讀入數(shù)據(jù)。輸出指的是shell程序的運(yùn)行結(jié)果的處理,可以顯示到屏幕或保存到文件。echo命令輸出結(jié)果:echo命令可以輸出文本或變量的值,是shell中最常用的輸出方式。結(jié)果可以輸出到終端,也可以寫入到文件。 例如:l echo $str #將結(jié)果輸出到終端。l echo $str file #將結(jié)果保存到文件file中,如果沒有文件會(huì)新建一個(gè)文件。如果已經(jīng)有文件則會(huì)覆蓋以前的文件。l echo $str file #將結(jié)果追加到文件file中。l echo輸出的內(nèi)容可以有下面的格式控制字符。l c:
38、末尾加上c表示這一行輸出完畢以后不換行。l t:輸出一個(gè)跳格,相當(dāng)于按下“Tab”鍵。l n:輸出一個(gè)換行。if語句:最常用的條件判斷語句,是通過一個(gè)條件的真假來決定后面的語句是不是執(zhí)行。邏輯測(cè)試指的是將多個(gè)條件進(jìn)行邏輯運(yùn)算,常用作循環(huán)語句或判斷語句的條件。shell程序中有下面三種邏輯測(cè)試。l -a:邏輯與,操作符兩邊均為真時(shí)結(jié)果為真,否則為結(jié)果為假。l -o:邏輯或,操作符兩邊至少一個(gè)為真時(shí),結(jié)果為真,否則為假。l ! :邏輯否,只有條件為假時(shí),返回結(jié)果為真。比較操作 整數(shù)操作 字符串操作l 相同 -eq =,不同 -ne !=,大于 -gt ,小于 -lt ,大于或等于 ge,小于或等于
39、 le,為空 z,不為空 n例:l 比較整數(shù)a和b是否相等:if $a = $b (也可用eq)l 判斷整數(shù)a是否大于整數(shù)b:if $a -gt $b l 比較字符串a(chǎn)和b是否相等:if $a = $b l 判斷字符串a(chǎn)是否為空: if -z $a l 判斷整數(shù)變量a是否大于b:if $a -gt $b l 注意:l 1. 在“”和“”符號(hào)的左右都留有空格l 2. “=”左右都有空格#!/bin/bash#eg5.shi=$ $1 % 2 if test $i -eq 0 ; thenecho oushuelseecho jishufi-e 文件已經(jīng)存在l -f 文件是普通文件l -s 文件大
40、小不為零l -d 文件是一個(gè)目錄l -r 文件對(duì)當(dāng)前用戶可以讀取l -w 文件對(duì)當(dāng)前用戶可以寫入l -x 文件對(duì)當(dāng)前用戶可以執(zhí)行eg7:#!/bin/shl folder=/homel -r $folder & echo Can read $folderl -f $folder | echo this is not filefor循環(huán)結(jié)構(gòu)與C語言中有所不同,在BASH中for循環(huán)的基本結(jié)構(gòu)是:l for var in listl dol #code blockl donel其中$var是循環(huán)控制變量,list是var需要遍歷的一個(gè)集合,do/done 對(duì)包含了循環(huán)體,相當(dāng)于C 語言中的一對(duì)大括
41、號(hào)。另外如果do 和for 被寫在同一行,必須在do 前面加上“;”。l 如: for $var in list; doeg8.sh:l #!/bin/bashl for day in Sun Mon Tue Wed Thu Fri Satl dol echo $dayl done如果列表被包含在一對(duì)雙引號(hào)中,則被認(rèn)為是一個(gè)元素,如下:l #!/bin/bashl for day in Sun Mon Tue Wed Thu Fri Sat“l(fā) dol echo $dayl done查看修改后腳本的運(yùn)行結(jié)果有什么不一樣?練習(xí)1:編寫shell腳本eg9.sh,統(tǒng)計(jì)當(dāng)前目錄下的文件數(shù)。實(shí)驗(yàn)一:1
42、) 編寫shell腳本1.sh判斷輸入數(shù)據(jù)的奇偶性;PC:#!/bin/bash#eg5.shi=$ $1 % 2 if test $i -eq 0;thenecho oushuelseecho jishufiA8:#!/bin/sh#eg5.shi=$($1%2)if test $i -eq 0;thenecho oushuelseecho jishufi2) 編寫shell腳本2.sh判斷文件屬性;PC:#!/bin/bashfolder=/home -r $folder & echo Can read $folder -f $folder | echo this is not filei
43、f test -f $file /判斷文件是否可讀thenecho readableelse echo unreadablefiif test -f $file /判斷文件是否可寫thenecho writableelse echo unwritablefiif test -f $file /判斷文件是否可執(zhí)行thenecho execelse echo unexecfiA8:#!/bin/shfolder=/root -r $folder & echo Can read $folder -f $folder | echo this is not file3) 編寫shell腳本3.sh統(tǒng)計(jì)當(dāng)
44、前目錄下的文件數(shù)。PC:#!/bin/bashsum=0FILE=ls *for file in $FILEdoif test -f $filethenecho $filelet sum+fidoneecho the number of file is :$sumA8:#!/bin/shsum=0FILE=ls *for file in $FILEdoif test -f $filethenecho $filelet sum+fidoneecho the number of file is :$sum1 、gcc 程序編譯l 2 、gdb 調(diào)試l 3 、Makefilegcc 程序編譯Linu
45、x系統(tǒng)下的gcc(GNU CCompiler)是GNU推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是GNU的代表作之一。gcc可以在多種硬體平臺(tái)上編譯出可執(zhí)行程序,其執(zhí)行效率與一般的編譯器相比平均效率要高20%30%。GCC編譯器能將C、C+語言源程序、匯編程序編譯、鏈接成可執(zhí)行文件。在Linux系統(tǒng)中,可執(zhí)行文件沒有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來區(qū)分可執(zhí)行文件和不可執(zhí)行文件。使用GCC編譯程序時(shí),編譯過程可以被細(xì)分為四個(gè)階段:l 預(yù)處理(Pre-Processing),編譯(Compiling),匯編(Assembling),鏈接(Linking)gcc通過后綴來區(qū)別輸入文件的類別:l .c為后
46、綴的文件: C語言源代碼文件l .a為后綴的文件: 是由目標(biāo)文件構(gòu)成的庫文件l .C,.cc或.cxx 為后綴的文件: 是C+源代碼文件l .h為后綴的文件: 頭文件l .i 為后綴的文件: 是已經(jīng)預(yù)處理過的C源代碼文件l .ii為后綴的文件: 是已經(jīng)預(yù)處理過的C+源代碼文件l .o為后綴的文件: 是編譯后的目標(biāo)文件l .s為后綴的文件: 是匯編語言源代碼文件l .S為后綴的文件: 是經(jīng)過預(yù)編譯的匯編語言源代碼文件。hello.c:l #include l int main(void)l l printf (Hello world!n);l return 0;l l 編譯和運(yùn)行這段程序:l #
47、 gcc hello.c -o hellol # ./hellol 輸出:Hello world!gcc最基本的用法是l gcc options filenamesl options:編譯器所需要的編譯選項(xiàng)l filenames: 要編譯的文件名。l gcc編譯器的編譯選項(xiàng)大約有100多個(gè),其中多數(shù)我們根本就用不到,這里只介紹其中最基本、最常用的參數(shù)。l -o output_filename:確定可執(zhí)行文件的名稱為output_filename。如果不給出這個(gè)選項(xiàng),gcc就給出預(yù)設(shè)的可執(zhí)行文件a.out。-c:只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標(biāo)
48、文件。-g:產(chǎn)生調(diào)試工具(GNU的gdb)所必要的符號(hào)信息,要想對(duì)編譯出的程序進(jìn)行調(diào)試,就必須加入這個(gè)選項(xiàng)。-O,對(duì)程序進(jìn)行優(yōu)化編譯、鏈接,采用這個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。-O2,比-O更好的優(yōu)化編譯、連接,當(dāng)然整個(gè)編譯、連接過程會(huì)更慢。例題L1.cl #include l int main(void)l l double counter;l double result;l double temp;l for (counter = 0; counter 2000.0 * 2000.0 *
49、2000.0 / 20.0 + 2020;counter+= (5 - 1) / 4)l l temp = counter / 1979;l result = counter;l l printf(Result is %lfn, result);l return 0; 1. gcc L1.c -o L1-1l time ./L1-12. gcc O L1.c -o L1-2l time ./L1-2對(duì)比兩次執(zhí)行的輸出結(jié)果不難看出,程序的性能的確得到了很大幅度的改善【命令】time 執(zhí)行命令并計(jì)時(shí)【格式】time -p command arguments.【說明】l 執(zhí)行命令行command a
50、rguments.,命令行執(zhí)行結(jié)束時(shí)在標(biāo)準(zhǔn)輸出中打印執(zhí)行該命令行的時(shí)間統(tǒng)計(jì)結(jié)果,其統(tǒng)計(jì)結(jié)果包含以下數(shù)據(jù):l 1)實(shí)際時(shí)間(real time): 從command命令行開始執(zhí)行到運(yùn)行終止的消逝時(shí)間;l 2)用戶CPU時(shí)間(user CPU time): 命令執(zhí)行完成花費(fèi)的用戶CPU時(shí)間,即命令在用戶態(tài)中執(zhí)行時(shí)間總和;l 3)系統(tǒng)CPU時(shí)間(system CPU time): 命令執(zhí)行完成花費(fèi)的系統(tǒng)CPU時(shí)間,即命令在核心態(tài)中執(zhí)行時(shí)間總和。其中,用戶CPU時(shí)間和系統(tǒng)CPU時(shí)間之和為CPU時(shí)間,即命令占用CPU執(zhí)行的時(shí)間總和。實(shí)際時(shí)間要大于CPU時(shí)間,因?yàn)長(zhǎng)inux是多任務(wù)操作系統(tǒng),往往在執(zhí)行一條
51、命令時(shí),系統(tǒng)還要處理其它任務(wù)。另一個(gè)需要注意的問題是即使每次執(zhí)行相同命令,但所花費(fèi)的時(shí)間也是不一樣,其花費(fèi)時(shí)間是與系統(tǒng)運(yùn)行相關(guān)的。編譯選項(xiàng)-Idirname: 將dirname所指出的目錄加入到程序頭文件目錄列表中。l C程序中的頭文件包含兩種情況l #include l #include “B.h”l對(duì)于,預(yù)處理程序cpp在系統(tǒng)預(yù)設(shè)的頭文件目錄(如/usr/include)中搜尋相應(yīng)的文件;而對(duì)于” ”,cpp在當(dāng)前目錄中搜尋頭文件。這個(gè)選項(xiàng)的作用是告訴cpp,如果在以上兩種情況下的目錄中都沒有找到需要的文件,就到指定的dirname目錄中去尋找。l 例:gcc fb.c -I/root/L
52、inux -o fb編譯選項(xiàng)-Ldirname:將dirname所指出的目錄加入到庫文件的目錄列表中。在默認(rèn)狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要的庫文件,這個(gè)選項(xiàng)告訴連接程序,首先到-L指定的目錄中去尋找,然后再到系統(tǒng)預(yù)設(shè)路徑中尋找。如果我們使用了函數(shù)庫,例如jpeg庫等。那么在編譯的使用以下命令編譯l gcc -c fb.c -o fb.o -I/root/jpeg-8bl gcc fb.o -o fb -L/root/jpeg-8b/.libs/ -ljpeg編譯選項(xiàng):-lname:在連接時(shí),裝載名字為“l(fā)ibname.a“或“l(fā)ibname.so“的函數(shù)
53、庫,該函數(shù)庫位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫。l gcc fb.c -L /root/jpeg-8b/.lib -ljpeg -o fbl -Wall:生成所有警告信息l -w:不生成任何警告信息-static:靜態(tài)鏈接庫文件l 例:gcc static hello.c -o hellol 庫有動(dòng)態(tài)與靜態(tài)兩種,動(dòng)態(tài)通常用.so為后綴,靜態(tài)用.a為后綴。例如:libjpeg.so libname.a。l 當(dāng)使用靜態(tài)庫時(shí),連接器找出程序所需的函數(shù),然后將它們拷貝到可執(zhí)行文件,一旦連接成功,靜態(tài)程序庫也就不再需要了。然而,對(duì)動(dòng)態(tài)庫而言
54、,就不是這樣,動(dòng)態(tài)庫會(huì)在執(zhí)行程序內(nèi)留下一個(gè)標(biāo)記指明當(dāng)程序執(zhí)行時(shí),首先必須載入這個(gè)庫。由于動(dòng)態(tài)庫節(jié)省空間,linux下進(jìn)行連接的缺省操作是首先連接動(dòng)態(tài)庫。練習(xí):靜態(tài)鏈接與動(dòng)態(tài)鏈接可執(zhí)行文件大小比較。GDB是GNU發(fā)布的一款功能強(qiáng)大的程序調(diào)試工具。GDB主要完成下面三個(gè)方面的功能:l 1、啟動(dòng)被調(diào)試程序。l 2、讓被調(diào)試的程序在指定的位置停住。l 3、當(dāng)程序被停住時(shí),可以檢查程序狀態(tài)(如變量值)。1.編譯生成可執(zhí)行文件:l gcc -g eg.c -o egl 2.啟動(dòng)GDBl gdb egl 3. 在main函數(shù)處設(shè)置斷點(diǎn)l break mainl 4. 運(yùn)行程序l runl 5. 單步運(yùn)行l(wèi)
55、nextl 6. 繼續(xù)運(yùn)行l(wèi) continue1. gdb 調(diào)試程序名l 例:gdb egl 2. gdbl file 調(diào)試程序名l file eglist(l) 查看程序l break(b) 函數(shù)名在某函數(shù)入口處添加斷點(diǎn)l break(b) 行號(hào)在指定行添加斷點(diǎn)l break(b) 文件名:行號(hào)在指定文件的指定行添加斷點(diǎn)l break(b) 行號(hào) if 條件當(dāng)條件為真時(shí),指定行號(hào)處斷點(diǎn)生效,例b 5 if i=10,當(dāng)i等于10時(shí)第5行斷點(diǎn)生效l info break 查看所有設(shè)置的斷點(diǎn)l delete 斷點(diǎn)編號(hào)刪除斷點(diǎn)run(r) 開始運(yùn)行程序l next(n) 單步運(yùn)行程序(不進(jìn)入子函數(shù))l step(s) 單步運(yùn)行程序(進(jìn)入子函數(shù))l continue(c) 繼續(xù)運(yùn)行程序l print(p) 變
溫馨提示
- 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)合同違約責(zé)任及典型案例分析
- 家庭用工合同模板參考范本
- 篇二:購(gòu)房合同范本規(guī)范
- 室內(nèi)防水改造合同范本
- 定制旅行服務(wù)協(xié)議合同
- 房地產(chǎn)開發(fā)施工合同樣本
- 金融市場(chǎng)中銀行承兌質(zhì)押合同的法律效力
- 兼職市場(chǎng)拓展合同樣本
- 發(fā)射設(shè)備在極端環(huán)境下的穩(wěn)定性檢測(cè)考核試卷
- 塑膠跑道材料的生產(chǎn)工藝與質(zhì)量控制考核試卷
- 2024年12月廣東廣州市港務(wù)局直屬事業(yè)單位引進(jìn)緊缺專業(yè)人才8人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 七下綜合世界真奇妙-共享“地球村”
- DBJ50-T-100-2022 建筑邊坡工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 2025年寧夏工商職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- DB11-T 1004-2023 房屋建筑使用安全檢查評(píng)定技術(shù)規(guī)程
- 《藝術(shù)與傳播》課件
- 烹飪安全知識(shí)培訓(xùn)課件
- 2025年湖北宜昌枝江金潤(rùn)源集團(tuán)招聘17人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2023CSCO兒童及青少年白血病診療指南
- 初中物理競(jìng)賽及自主招生專題講義:第8講 電路 (共5節(jié))含解析
- 《傳媒法的原則》課件
評(píng)論
0/150
提交評(píng)論