第3章 Linux 操作系統(tǒng)_第1頁
第3章 Linux 操作系統(tǒng)_第2頁
第3章 Linux 操作系統(tǒng)_第3頁
第3章 Linux 操作系統(tǒng)_第4頁
第3章 Linux 操作系統(tǒng)_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章Linux操作系統(tǒng)3.1Linux概述3.2嵌入式Linux3.3嵌入式實(shí)時Linux3.4Linux系統(tǒng)的安裝3.5Linux目錄結(jié)構(gòu)3.6Linux常見術(shù)語和常用命令3.7Linux下的C語言編程入門13.1Linux概述---Linux的起源

Linux也被稱作UNIX克隆(UNIXclone)或UNIX風(fēng)格的操作系統(tǒng),是UNIXOS的一個版本;在1990年,芬蘭赫爾辛基大學(xué)的學(xué)生LinusTorvalds用匯編語言編寫了一個在80386保護(hù)模式下處理多任務(wù)切換的程序,并從Minix得到啟發(fā),開發(fā)出0.0.1版本的Linux;Linux具有UNIX的全部特征,包括多任務(wù)、虛擬內(nèi)存、共享庫、需求裝載、共享的寫時復(fù)制程序執(zhí)行、優(yōu)秀的內(nèi)存管理以及TCP/IP網(wǎng)絡(luò)支持;Linux已成為Windows強(qiáng)勁對手。且不僅能夠運(yùn)行于PC平臺,在嵌入式方面更顯特色,逐漸可與WindowsCE抗衡。23.1.2Linux概述---Linux與GNU當(dāng)前流行的軟件按照提供方式可分成三種模式:商業(yè)軟件(commercialsoftware);共享軟件(sharesoftware);自由軟件(freesoftware);開發(fā)者提供軟件全部源代碼,任何用戶都有權(quán)利使用、拷貝、擴(kuò)散、修改該軟件,同時用戶有義務(wù)將自己修改過的源代碼公開。31984年,哈佛大學(xué)學(xué)生RichardStallman開發(fā)了一個完全基于自由軟件的軟件體系計(jì)劃,稱為GNU(Gnu’sNotUnix),是免費(fèi)軟件基金會(FSF,FreeSoftwareFoundation)提供了一套應(yīng)用程序,用來代替UNIX操作系統(tǒng),并擬定了一份稱為公共版權(quán)許可(GPL,GeneralPublicLicense)的文件。GNU計(jì)劃的宗旨是:消除對于計(jì)算機(jī)程序拷貝、分發(fā)、理解和修改的限制。也就是說,每一個人都可以在前人工作的基礎(chǔ)上加以利用、修改和添加新內(nèi)容,但必須公開源代碼,允許其他人在此基礎(chǔ)上繼續(xù)工作。Linus發(fā)布Linux1.0版是完全按照自由發(fā)布版權(quán)來做的,而后轉(zhuǎn)向了GPL版權(quán),該版權(quán)除了規(guī)定有自由軟件的各項(xiàng)許可以外,還允許用戶出售自己的程序拷貝,并從中獲利。這一轉(zhuǎn)變對于Linux的發(fā)展至關(guān)重要。43.1.3Linux概述---Linux內(nèi)核概況1、Linux內(nèi)核在操作系統(tǒng)中的位置

Linux操作系統(tǒng)由4個層次組成:用戶進(jìn)程、系統(tǒng)調(diào)用接口、Linux內(nèi)核和硬件。把應(yīng)用進(jìn)程也納入操作系統(tǒng)的范疇是由于其運(yùn)行和操作系統(tǒng)密切相關(guān),系統(tǒng)調(diào)用接口也可以說是操作系統(tǒng)內(nèi)核的補(bǔ)充,硬件則是物質(zhì)基礎(chǔ)。硬件Linux內(nèi)核系統(tǒng)調(diào)用接口用戶進(jìn)程Linux內(nèi)核在整個操作系統(tǒng)中的位置52、Linux內(nèi)核的抽象結(jié)構(gòu)1)進(jìn)程調(diào)度(Scheduling)子系統(tǒng)控制著進(jìn)程對CPU的訪問。當(dāng)需要選擇下一個進(jìn)程時,由調(diào)度程序根據(jù)一定的算法選擇最值得運(yùn)行的進(jìn)程。Linux使用了比較簡單得基于優(yōu)先級得進(jìn)程調(diào)度算法。2)內(nèi)存管理(MM,MemoryManagement)子系統(tǒng)允許多個進(jìn)程安全地共享主內(nèi)存區(qū)域。內(nèi)存管理從邏輯上可以分為硬件無關(guān)的部分和硬件相關(guān)的部分。前者提供進(jìn)程的映射和虛擬內(nèi)存的交換,后者為內(nèi)存管理提供了虛擬接口。Linux內(nèi)核子系統(tǒng)及它們之間關(guān)系63)虛擬文件系統(tǒng)(VFS,VisualFileSystem)子系統(tǒng)隱藏了各種不同硬件的具體細(xì)節(jié),為所有設(shè)備提供統(tǒng)一的接口。VFS可分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序兩部分。前者指Linux所支持的文件系統(tǒng),如ext2、FAT等;后者指為某一種硬件所編寫的驅(qū)動程序模塊。Linux還支持?jǐn)?shù)十種不同的文件系統(tǒng),是Linux較有特色的一部分。4)網(wǎng)絡(luò)子系統(tǒng)提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議的存取和各種網(wǎng)絡(luò)硬件的支持,可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)設(shè)備驅(qū)動程序兩部分。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議,網(wǎng)絡(luò)設(shè)備驅(qū)動程序負(fù)責(zé)與具體的硬件設(shè)備進(jìn)行通信,每種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動程序。5)進(jìn)程間通信(IPC,InterprocessCommunication)子系統(tǒng)提供了進(jìn)程間多種通信機(jī)制。多個進(jìn)程為了能在同一項(xiàng)任務(wù)上協(xié)調(diào)工作,他們之間必須能夠進(jìn)行信息的交互。Linux支持許多不同形式的進(jìn)程間通信機(jī)制,包括管道(pipe)、信號以及網(wǎng)絡(luò)進(jìn)程通信機(jī)制Sockets等。73.1.4Linux概述---Linux內(nèi)核的微型化嵌入式應(yīng)用對操作系統(tǒng)的要求是: 功能具有針對性,效率高,占用資源少,啟動速度快,有些系統(tǒng)有實(shí)時性的要求等。Linux是由許多體積小且性能高的微內(nèi)核和系統(tǒng)組成。在內(nèi)核代碼完全公開的前提下,用戶可根據(jù)自己應(yīng)用的需要有針對性地對內(nèi)核進(jìn)行改造,完全可以低成本地設(shè)計(jì)和開發(fā)出真正滿足自己需要的嵌入式系統(tǒng)。通用做法是對Linux內(nèi)核重新編譯。由于Linux內(nèi)核采用模塊化地設(shè)計(jì),內(nèi)核開發(fā)人員在設(shè)計(jì)時把這些內(nèi)核模塊作為可選項(xiàng),可以在編譯系統(tǒng)內(nèi)核時制定。83.2嵌入式Linux商業(yè)嵌入式系統(tǒng)的共同特點(diǎn): 具有專業(yè)性、各自地源代碼不公開,使得每個系統(tǒng)上的應(yīng)用軟件不容易與其他系統(tǒng)兼容,軟件的移植性較差,對各種設(shè)備的支持方面也存在問題,且價格昂貴。嵌入式Linux(EmbededLinux)是指對Linux經(jīng)過小型化剪裁后,能夠固化在容量為幾百KB到幾十MB的存儲器或單片機(jī)中,適用于特定嵌入式場合的專用Linux操作系統(tǒng)。9Linux應(yīng)用于嵌入式系統(tǒng)的優(yōu)勢1)開放源代碼,軟件資源豐富2)內(nèi)核功能強(qiáng)大3)支持多種體系結(jié)構(gòu)4)完善的網(wǎng)絡(luò)通信和成熟的文件圖形系統(tǒng)5)豐富的驅(qū)動程序6)完善的開發(fā)工具鏈10Linux應(yīng)用于嵌入式系統(tǒng)的不足1)軟件開發(fā)的效率和功能沒有足夠的資源在本機(jī)上運(yùn)行開發(fā)工具和調(diào)試設(shè)備,往往采用交叉編譯調(diào)試的方法。2)軟件的實(shí)時性問題Linux本身不是一種實(shí)時的操作系統(tǒng),其內(nèi)核不是完全可搶占的。Linux的調(diào)度時機(jī)主要有:進(jìn)程狀態(tài)轉(zhuǎn)換的時刻,即進(jìn)程終止、進(jìn)程睡眠;可運(yùn)行隊(duì)列中新增加一個進(jìn)程時;當(dāng)前進(jìn)程的時間片用完時;進(jìn)程從系統(tǒng)調(diào)用返回到用戶態(tài)時;內(nèi)核處理完中斷后,進(jìn)程返回到用戶態(tài)時等。113)內(nèi)存及其管理問題

一個典型的Linux內(nèi)核在未壓縮的情況下至少要占1.5MB左右的內(nèi)存,運(yùn)行時可能需要超過4MB,功能強(qiáng)大的甚至要占用上百M(fèi)B的存儲空間。 標(biāo)準(zhǔn)的Linux設(shè)計(jì)時所針對的處理器都是帶有內(nèi)存管理單元(MMU)的,并且Linux系統(tǒng)充分利用了處理器的內(nèi)存管理機(jī)制。但有些嵌入式處理器不帶MMU。123.3嵌入式實(shí)時Linux將Linux作為底層操作系統(tǒng),在其上進(jìn)行實(shí)時化改造,從而構(gòu)建出一個具有實(shí)時處理能力的嵌入式系統(tǒng),是目前發(fā)展的趨勢。為實(shí)時系統(tǒng)而開發(fā)的RTLinux可以讓Linux支持硬實(shí)時任務(wù)。它主要是把Linux的任務(wù)作為自己的一個任務(wù),因此,實(shí)時性要求很高的任務(wù)不受非實(shí)時的Linux干擾。另外,還提供了實(shí)時任務(wù)和Linux的基本內(nèi)核和其他任務(wù)間的接口。這些接口不需要很強(qiáng)的實(shí)時性。這種架構(gòu)的關(guān)鍵是將實(shí)時代碼與非實(shí)時代碼分開設(shè)計(jì)。RTLinux中含有時間緊要的函數(shù),可以用中斷管理器來精確控制中斷處理,從而很好地保證了關(guān)鍵中斷能夠在需要時得到執(zhí)行。這種方法可以滿足廣泛范圍內(nèi)的實(shí)時要求,即使沒有實(shí)時擴(kuò)展,Linux也能很好地處理多個事件流。133.4Linux系統(tǒng)的安裝143.5LINUX目錄結(jié)構(gòu)/root/X11R6/home/dev/lib/sbin/tmp/usr/var/mnt/proc/bin/src/lib/local/man…/sbin/opt/etc/include15目錄常用功能介紹:/boot:包含了操作系統(tǒng)的內(nèi)核和在啟動系統(tǒng)過程中所要用到的文件。/bin:存放常用的二進(jìn)制可執(zhí)行文件,如ls,mv,rm,mkdir,gzip,tar等。/dev區(qū):存放與設(shè)備有關(guān)的特殊文件。UNIX或LINUX系統(tǒng)都把設(shè)備當(dāng)作文件,如/dev/cdrom表示光驅(qū)。/etc:存放系統(tǒng)管理和配置文件,如LILO的參數(shù),用戶的帳號和密碼,以及系統(tǒng)的主要設(shè)置。/home:為用戶設(shè)置的目錄,user的主目錄就是/home/user,這個分區(qū)的大小取決于有多少用戶。/lib:標(biāo)準(zhǔn)程序設(shè)計(jì)庫,也稱動態(tài)鏈接庫,在LINUX執(zhí)行和編譯內(nèi)核時,均會用到。/sbin:系統(tǒng)管理命令,存放的是系統(tǒng)管理員使用的管理程序,如fdisk,mount,ifconfig等。/tmp:用來存放臨時文件。16/mnt:系統(tǒng)提供這個目錄讓用戶臨時裝載其他的文件系統(tǒng),如裝載軟盤的文件系統(tǒng)。/proc:虛擬的目錄,系統(tǒng)內(nèi)存的映射??芍苯釉L問這個目錄來獲取系統(tǒng)信息。/opt:存放可選的安裝的軟件。/var:系統(tǒng)工作時預(yù)先設(shè)置的工作目錄,如各種服務(wù)日志文件和郵件等。/usr:最龐大和最重要的目錄之一,要用到的應(yīng)用程序和文件幾乎都在這個目錄,其中包含:/usr/X11R6存放XWindow的目錄/usr/bin眾多的應(yīng)用程序/usr/sbin

超級用戶的一些管理程序/usr/lib存放常用的動態(tài)鏈接庫和軟件包的配置文件/usr/includeLINUX下開發(fā)和編譯應(yīng)用程序所需的頭文件/usr/man存放幫助文檔/usr/src

存放LINUX的內(nèi)核源碼173.6Linux常見術(shù)語和常用命令3.6.1Linux常見術(shù)語GNUGNU的字面意思是角馬,是南非的一種像牛的大羚羊,但它實(shí)質(zhì)性的含義是強(qiáng)調(diào)“IsNotUnix”,因此通常說“GNU是Gnu’sNotUnix的遞歸所寫”。它源于自由軟件基金會的一個項(xiàng)目,該項(xiàng)目的目標(biāo)是開發(fā)一個自由的UNIX版本,這一UNIX版本稱為HURD。盡管HURD尚未完成,但GNU項(xiàng)目開發(fā)了許多高指令的編程工具,包括Emacs編輯器,著名的GNUC和C++編譯器(gcc和g++)。所有的GNU軟件和派生工作均適用GNU通用公共許可證,即GPL。Linux的開發(fā)使用大量的GNU工具,人們常說的Linux通常包括:符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)Shell和外圍工具;C語言編譯器和其他開發(fā)工具及函數(shù)庫;XWindow窗口系統(tǒng);各種應(yīng)用軟件,包括字處理軟件、圖像處理軟件等;其他各種Internet軟件,包括FTP服務(wù)器、WWW服務(wù)器;關(guān)系數(shù)據(jù)庫管理系統(tǒng)。 18GPL GPL與軟件是否免費(fèi)無關(guān),它的主要目標(biāo)是保證軟件對所有用戶來說是自由的,GPL通過如下途徑實(shí)現(xiàn)這一目標(biāo):它要求軟件以源代碼的形式發(fā)布,并規(guī)定任何用戶能夠以源代碼的形式將軟件復(fù)制或發(fā)布給別的用戶;它提醒每個用戶,對于該軟件不提供任何形式的擔(dān)保;如果用戶的軟件使用了受GPL保護(hù)的任何軟件的一部分,那么該軟件就繼承了GPL;GPL并不排斥對自由軟件的進(jìn)行商業(yè)性質(zhì)的包裝和發(fā)行,也不限制在自由軟件的基礎(chǔ)上打包發(fā)行其他非自由軟件;遵照GPL的軟件并不是可以任意傳播的,這些軟件通常都有正式的版本,GPL在發(fā)布軟件或復(fù)制軟件時申明限制條件。193.6.2Linux基本概念

用戶和組Linux是一個真正的多用戶系統(tǒng),為了方便使用GNU/Linux系統(tǒng),必須在機(jī)器上擁有一個帳戶。一個組能擁有很多用戶通過組的方式可便于實(shí)現(xiàn)幾個人之間的文件共享Linux是一個多用戶系統(tǒng),每個文件是一個用戶和一個組的獨(dú)家財(cái)產(chǎn)。用戶和組,他們中的每一個成員都持有一個個人的目錄(稱為HOME目錄)20一個組能擁有很多用戶通過組的方式可便于實(shí)現(xiàn)幾個人之間的文件共享三個類別用戶:(1)文件的所有者(owner);(2)同組用戶(是所有者組的成員,所有者組是與文件有關(guān)聯(lián)的組,同組用戶不是文件所有者,group)(3)其他用戶(既不是所有者也不是所有者組的成員,other);有三種不同的許可操作:(1)讀許可:(r)它準(zhǔn)許用戶讀取文件的內(nèi)容(2)寫許可:(w)它準(zhǔn)許用戶修改文件的內(nèi)容(3)執(zhí)行許可:(x)它準(zhǔn)許用戶運(yùn)行可執(zhí)行文件213.6.3Linux常用命令1、ls,pwd,cd等文件處理命令ls:顯示當(dāng)前目錄下的所有文件和目錄語法:ls

選項(xiàng)[-alFR][文件或目錄]-a顯示所有文件包括隱藏文件-l使用longformat長格式進(jìn)行顯示-F附加文件類別符號在文件名最后-R顯示目錄及其下的子目錄內(nèi)容pwd:顯示當(dāng)前目錄路徑cd

目錄名:進(jìn)入目錄222、cp,rm,mv,mkdir等文件處理命令語法:cp-afpx[源文件或目錄][目地文件或目錄]-aarchive的意思相當(dāng)于-dpR,也就是復(fù)制所有目錄并包括子目錄-f強(qiáng)制復(fù)制文件-p保留原始文件的日期-x指定文件復(fù)制后屬于目的磁盤的文件系統(tǒng),如:ext2->fat32語法:rm-irf[文件或目錄]-r刪除目錄及其下的所有目錄內(nèi)容-f強(qiáng)制刪除-i交互模式,刪除前再做一次確認(rèn)語法:mv–if[源文件或目錄][目地文件或目錄]233chmod,chown,chgrp等文件權(quán)限管理命令chmod命令英文原義:changefileordirectory’smode(改變文件或目錄的權(quán)限)語法:chmod-R[mode=4,2,1or{a,u,g,o}{+,-,=,}{r,w,x,s,t}][文件或目錄]示例:$chmoda+rstuff$chmod755filechown命令英文原義:Changefileordirectory'sOwner(改變文件或目錄的所有者)語法:chown–R[用戶][.[群組]][文件或目錄]chgrp命令英文原義:Changefileordirectory'sGroup(改變文件或目錄的所屬群組)語法:chgrp–R[文件或目錄]244、文件目錄匹配搜索的使用如ARM應(yīng)用程序的安裝目錄為:/ARM-FS2410,假設(shè)目錄下沒有其他ARM打頭的目錄和文件,則要進(jìn)入這個目錄,則只需輸入:cd/ARM,然后按Tab鍵,在shell中會自動找到ARM-FS2410這個目錄,而不必將目錄名輸入完全。5、編程時獲取幫助man獲得Linux系統(tǒng)手冊的電子版,很實(shí)用!如:

manmount

256、取消root密碼在終端輸入命令:

vim/etc/shadow可以看到顯示的第一行內(nèi)容如下:root:$1$dVVd5YVP$OgZG58TL/NRExTfcr6URH.:11829:0:99999:7:-1:-1:134539236

要取消密碼,需要將第一行root后第一對“:”之間的字符全部刪除,刪除后如下:

root::11829:0:99999:7:-1:-1:134539236然后用:w!強(qiáng)行存盤(由于shadow時只讀的)后,用

:q退出vi就實(shí)現(xiàn)了取消root密碼的操作。7、配置PC的IP地址ifconfigeth02將PC的IP地址配置為2。268、壓縮和解壓縮gzip命令語法:gzip[選項(xiàng)][-19r][文件]-1表示快速壓縮-9表示最佳狀況壓縮-r壓縮時包含所有子目錄-d表示解壓命令gunzip命令語法:gunzip:[選項(xiàng)][-r][文件或目錄]tar命令語法:tar[選項(xiàng)][zcvf][文件或目錄]-z使用gzip壓縮.tar文件-c產(chǎn)生一個tar文件-v觀看壓縮過程-f指定壓縮成的文件(或壓縮到磁帶設(shè)備)-x解壓說明:一般都是最先的四個選項(xiàng)zcvf全加,這樣馬上可以將一個目錄下所有的文件壓縮成一個壓縮文件。壓縮后文件格式:.tar.gzor.tgz。9、查找文件命令如查找文件:main.c,使用命令find-namemain.c或者locatemain.c在一個目錄下(含子目錄)的所有文件中搜索含有某個字符串(如“root”)的所有文件:grep‘root'*-r2710、vi(m)用法vi是Linux/Unix世界里極為普遍的全屏幕文本編輯器。有三種狀態(tài),即編輯方式,插入方式和命令方式。在命令方式下,所有命令都要以“:”開始,對輸入的字符,系統(tǒng)均作為命令來處理,如:q代表退出,:w表示存盤。當(dāng)你進(jìn)入vi時,會首先進(jìn)入命令方式(同時也是編輯方式)。按下i就進(jìn)入插入方式,用戶輸入的可視字符都添加到文件中,顯示在屏幕上。按下ESC就可以回到命令狀態(tài)。編輯模式和命令方式類似,都要輸入命令,但它的命令不必以“:”,開始,它直接接收鍵盤輸入的單字符或組合字符命令。在編輯模式下按下“:”就進(jìn)入命令方式。

28vi常用操作無論是開啟新檔或修改舊文件,都可以使用vi,所需指令為:

vifilenamevi常用命令::q!放棄任何改動而退出vi,也就是強(qiáng)行退出:w存檔:w!對于只讀文件強(qiáng)行存檔:wq存檔并退出vi:x與wq的工作一樣

GNOMEgedit文本編輯器:GNOMEgedit文本編輯器與Windows的notepad文本編輯器功能相似,快捷鍵也大部分相同,又有Windows的wordpad寫字板的風(fēng)格,比之notepad和wordpad,gedit功能更全面,操作更便利。2911、軟、硬盤及光驅(qū)的使用

在Linux中對其他硬盤邏輯分區(qū),軟盤,光盤的使用與我們通常在DOS與Windows中的使用方法是不一樣的,不能直接訪問,因?yàn)樵贚inux中它們都被視為文件,因此在訪問使用前必須使用裝載命令mount將它們裝載到系統(tǒng)的/mnt目錄中來,使用結(jié)束,必須進(jìn)行卸載。命令格式如下:

mount-t文件系統(tǒng)類型設(shè)備名裝載目錄

文件類型常用的有:msdosdos分區(qū)文件ext2Linux的文件系統(tǒng)swapLinuxswap分區(qū)或swap文件iso9660安裝CD-ROM的文件系統(tǒng)vfat

支持長文件名的dos分區(qū)hpfsOS/2分區(qū)文件系統(tǒng)30設(shè)備名是指要裝載的設(shè)備的名稱,如軟盤,硬盤,光盤等,軟盤一般為/dev/fd0fd1,硬盤一般為/dev/hdahdb,硬盤邏輯分區(qū)一般為hda1hda2…等等,光盤一般為/dev/hdc。在裝載前一般要在/dev/mnt目錄下建立一個空的目錄,如軟盤為floppy,硬盤分區(qū)為其盤符如c,d等等,光盤為cd-rom,使用命令:mount-tmsdos/dev/fd0/mnt/floppy

;裝載一個mddos格式的軟盤mount-text2/dev/fd0/mnt/floppy

;裝載一個Linux格式的軟盤mount-tvfat/dev/hda1/mnt/c

;裝載Windows98格式的硬盤分區(qū)mount-tiso9660/dev/hdc/mnt/cd-rom;裝載一個光盤3112、Linux下的硬盤分區(qū)對Linux用戶來說,無論有幾個分區(qū),分給哪一目錄使用,它歸根結(jié)底就只有一個根目錄,一個獨(dú)立且唯一的文件結(jié)構(gòu);Linux中每個分區(qū)都是用來組成整個文件系統(tǒng)的一部分,因?yàn)樗捎昧艘环N叫“載入”的處理方法,它的整個文件系統(tǒng)中包含了一整套的文件和目錄,且將一個分區(qū)和一個目錄聯(lián)系起來。這時要載入的一個分區(qū)將使它的存儲空間在一個目錄下獲得。32對于IDE硬盤,驅(qū)動器標(biāo)識符為“hdx~”,其中“hd”表明分區(qū)所在設(shè)備的類型,這里是指IDE硬盤?!皒”為盤號(a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤),“~”代表分區(qū),前四個分區(qū)用數(shù)字1到4表示,它們是主分區(qū)或擴(kuò)展分區(qū),從5開始就是邏輯分區(qū)。例如,hda3表示為第一個IDE硬盤上的第三個主分區(qū)或擴(kuò)展分區(qū),hdb2表示為第二個IDE硬盤上的第二個主分區(qū)或擴(kuò)展分區(qū).對于SCSI硬盤則標(biāo)識為"sdx~",SCSI硬盤是用"sd"來表示分區(qū)所在設(shè)備的類型的,其余則和IDE硬盤的表示方法一樣.33Linux的分區(qū)格式只有Ext2(3)和Swap兩種,Ext2(3)用于存放系統(tǒng)文件,Swap則作為Linux的交換分區(qū)。RedHatLinux至少需要兩個專門的分區(qū)(LinuxNative和LinuxSwap),且不能將Linux安裝在Dos/Windows分區(qū)。SWAP分區(qū)是LINUX暫時存儲數(shù)據(jù)的交換分區(qū),它主要是把主內(nèi)存上暫時不用的數(shù)據(jù)存起來,在需要的時候再調(diào)進(jìn)內(nèi)存內(nèi)。且作為SWAP使用的分區(qū)不用指定“MountPoint”(載入點(diǎn)),它的大小至少要等于系統(tǒng)上實(shí)際內(nèi)存的量,一般來說是內(nèi)存的兩倍??梢詣?chuàng)建和使用一個以上的交換分區(qū),最多16個。LinuxNative是存放系統(tǒng)文件的地方,它只能用EXT2(3)的分區(qū)類型。將Linux安裝在一個或多個類型為“LinuxNative”的硬盤分區(qū),且每一個分區(qū)都必須要指定一個“MountPoint”(載入點(diǎn)),告訴Linux在啟動時這個目錄要給哪個目錄使用。34至少要使用兩個分區(qū),一個是Swap分區(qū),另一個是根分區(qū)。可以使用以下兩種分區(qū)工具:DiskDruid:這是RedHatLinux提供的管理工具??梢愿鶕?jù)用戶的要求創(chuàng)建和刪除硬盤分區(qū),還可以為每個分區(qū)管理載入點(diǎn);Fdisk:傳統(tǒng)的Linux分區(qū)工具,比DiskDruid功能更強(qiáng)大,使用更加靈活,要求用戶對硬盤分區(qū)有一定經(jīng)驗(yàn)。353.6.3I/O管道和重定向I/O重定向(Redirection):大于符號>小于符號<按位或符號(|)作為管道,將前級命令的輸出定向給下級的命令當(dāng)輸入。Linux將標(biāo)準(zhǔn)I/O分為三種stdin(Standardlnput)標(biāo)準(zhǔn)輸入:鍵盤Linux命令后面所加的參數(shù),例如:ls–lfile1其中的file1就是標(biāo)準(zhǔn)輸入stdout(StandardOutput)標(biāo)準(zhǔn)輸出:stderr(Standarderror)標(biāo)準(zhǔn)錯誤輸出36(1)輸出重定向符(>) $ls–l>list正常情況執(zhí)行l(wèi)s-l后,輸出結(jié)果到屏幕上但經(jīng)過輸出重定向符>后,輸出結(jié)果會存儲到list文件中附加輸出重定向符(>>)$catlist2>>list1將輸出重定向結(jié)果附加到輸出文件的后面,cat顯示list2,然后將結(jié)果附加到list1的文件尾,所以這樣的操作可將兩個文件合并成一個文件。若只有輸出重定向符(>),則1ist2會把1ist1內(nèi)容覆蓋。37(2)輸入重定向符(<)$catlistcatlist是list當(dāng)作cat的標(biāo)準(zhǔn)輸入文件,結(jié)果會將list的內(nèi)容顯示到屏幕上$cat<list但cat<list則是cat并無標(biāo)準(zhǔn)輸入文件,而是使用輸入重定向(<)將文件list定向給cat當(dāng)標(biāo)準(zhǔn)輸入,最后才顯示list的內(nèi)容。(3)錯誤輸出重定向符(&>)$ls-ldir1>file_list當(dāng)目錄dir1存在時,輸出會保存到file_list中當(dāng)目錄dir1不存在時,file_list文件為空$ls-ldir1&>file_list&>則不管是正常與否都記錄到file_list文件中通常應(yīng)用于程序編譯過程中,記錄錯誤信息38(4)管道符(|)管道的功用是將前面程序的輸出結(jié)果引導(dǎo)為后面一個程序的輸入。ls–l/usr|more/usr目錄文件眾多,使用ls-l查看并無法一頁顯示完畢,輸出結(jié)果由管道|定向給more命令,當(dāng)作more命令的輸入,而使得可以一頁一頁地觀看1s的輸出結(jié)果。393.7LINUX下的C語言編程入門3.7.1C語言和LINUX3.7.2gcc編譯器3.7.3GNU調(diào)試器GDB3.7.4使用make403.7.1C語言和LINUX

BrianW.Kernighan,DennisM.Rithie開發(fā)了C語言。

C語言的特點(diǎn):(1)語言簡潔、緊湊、使用方便靈活;(2)運(yùn)算和數(shù)據(jù)結(jié)構(gòu)豐富;(3)C語言允許直接訪問物理地址,可以進(jìn)行位操作,能實(shí)現(xiàn)匯編語言的大部分功能;(4)可移植性好;41C語言在嵌入式系統(tǒng)中編寫應(yīng)用程序至少有以下一些好處:(1)系統(tǒng)可以在其他的計(jì)算機(jī)上仿真(2)應(yīng)用程序有較好的可移植性(3)便于程序的調(diào)試(4)C語言庫函數(shù)豐富42gcc是GNU的C和C++編譯器,它是Linux中最重要的軟件開發(fā)工具。gcc能夠編譯三種語言:C,C++和ObjectC(C語言的一種面向?qū)ο髷U(kuò)展)。利用gcc命令可同時編譯并連接C和C++源程序。匯編語言的編譯器為as。編譯器被成功的移植到不同的處理器平臺上,標(biāo)準(zhǔn)PCLINUX上的gcc是FORINTELCPU的。

3.7.2gcc編譯器43

gcc的基本用法:gcc[option][filename](1)gcc-cdemo.c

“-c”表示對文件進(jìn)行編譯和匯編,但不連接。(2)gcc–odemodemo.o將得到名為demo的可執(zhí)行文件,當(dāng)使用-o選項(xiàng)時,-o后面必須跟一個文件名(3)也可以上兩步并為一步

gcc–odemodemo.c(4)運(yùn)行可執(zhí)行文件./demo(./表示當(dāng)前目錄下執(zhí)行)(5)gcc-v

顯示版本44gcc的使用使用gcc,程序員能夠?qū)幾g過程有更多的控制。編譯過程一般分為四個階段:預(yù)處理編譯匯編鏈接45hello.c程序清單#include<stdio.h>voidmain(){charmsg[80]="Hello,world!";printf("%s",msg);}46hello.c運(yùn)行結(jié)果在命令行上鍵入以下命令編譯和運(yùn)行這段程序

$gcchello.c–ohello$./helloHello,World!47gcc步驟gcc首先運(yùn)行預(yù)處理程序cpp來展開hello.c中的宏并在其中插入#include文件所包含的內(nèi)容;然后把預(yù)處理后的源代碼編譯成目標(biāo)代碼最后,調(diào)用鏈接程序ld創(chuàng)建一個名為hello的二進(jìn)制文件48函數(shù)庫和包含文件(1)如果需要鏈接函數(shù)庫或不在標(biāo)準(zhǔn)位置下的包含(include)文件,可以使用-L{DIRNAME}和-I{DIRNAME}選項(xiàng)指定文件所在的目錄,以確保該目錄的搜索順序在標(biāo)準(zhǔn)目錄之前。例如,如果讀者把自定義頭文件放置在/usr/local/include/someapp目錄下,則為了使gcc能夠找到這些文件,其命令行應(yīng)與下面類似:

$gcc–csomeapp.c-I/usr/local/include/someapp

49函數(shù)庫和包含文件(2)若需要測試在/home/someuser/lib目錄下的新函數(shù)庫libnew.so(.so是共享庫文件的標(biāo)準(zhǔn)擴(kuò)展名),同時所有需要的頭文件在/home/someuser/include目錄下。為了鏈接該函數(shù)庫與定位頭文件,相應(yīng)的命令行應(yīng)與下面類似:

$gcc-cmyapp.c–L/home/someuser/lib–I/home/someuser/include–lnew

-l選項(xiàng)使得鏈接程序使用指定的函數(shù)庫中的目標(biāo)代碼,也就是本例中的libnew.so。如果忘了使用-l選項(xiàng),則與庫的鏈接將失敗,并且gcc發(fā)出錯誤說明程序中引用了未定義的函數(shù)名。50gcc命令的常用選項(xiàng)有:

-c只編譯并生成目標(biāo)文件.

-oFILE生成指定的輸出文件.用在生成可執(zhí)行文件時.

-E只運(yùn)行C預(yù)編譯器.

-g生成調(diào)試信息.GNU調(diào)試器可利用該信息.

-IDIRECTORY指定額外的頭文件搜索路徑DIRECTORY.

-LDIRECTORY指定額外的函數(shù)庫搜索路徑DIRECTORY.

-lLIBRARY連接時搜索指定的函數(shù)庫LIBRARY.

-O或-O1優(yōu)化生成代碼.

-O2進(jìn)一步優(yōu)化.

-O3比-O2更進(jìn)一步優(yōu)化,包括inline函數(shù).

-shared生成共享目標(biāo)文件.通常用在建立共享庫時.

-static禁止使用共享連接.

-w不生成任何警告信息.

-Wall生成所有警告信息.51C預(yù)處理器cppcpp命令用來完成宏求值,條件編譯,以及其它一些需要把代碼傳遞到編譯器前完成的工作。通常帶#的語句都將有cpp進(jìn)行預(yù)處理。預(yù)處理的過程就是展開宏的過程。gcc編譯器通常自動調(diào)用cpp。也可以使用gcc–E調(diào)用cpp,或者在命令行中使用cpp。52GNU連接器ld實(shí)際上程序員編寫的任何程序,都包含有許多部分,必須把它們組合起來形成可執(zhí)行的文件。即使如同前面所見到的例子,程序只有一個模塊,也必須使用連接器(ld)。諸如C函數(shù)庫,程序初始化代碼等等將被包含進(jìn)去。如果沒有C函數(shù)庫,將不能使用strcpy()或者getpwnam()等函數(shù)。如果要寫一個大程序,很多時候要把它分成幾個獨(dú)立的模塊。這時候需要連接器把所有模塊組合起來,結(jié)合C函數(shù)庫和初始化代碼,產(chǎn)生最后的可執(zhí)行文件。通常,ld被編譯器所調(diào)用,產(chǎn)生可執(zhí)行代碼。53GNU匯編器asas的任務(wù)就是處理匯編代碼,并生成目標(biāo)(二進(jìn)制)代碼,而目標(biāo)代碼將用來形成.o文件、庫或者最終的可執(zhí)行文件。as程序很少被單獨(dú)使用,而基本上是被gcc調(diào)用。要注意的是由于匯編代碼是低級別的代碼,在不同平臺上,甚至在相同的操作系統(tǒng)中,它也是不同的。比如在32位的x86平臺上的用于計(jì)算的匯編代碼,與在64位的Alpha平臺上進(jìn)行相同計(jì)算的匯編代碼,就不一樣。54文件處理器ar當(dāng)要建立靜態(tài)庫的時候,就需要使用ar程序。這個程序用來把幾個小文件組合成一個大文件。在建立靜態(tài)庫時,必須要用到把多個.o文件組合成一個單獨(dú)的.a文件。553.7.3GNU調(diào)試器GDBLinux包含了一個叫g(shù)db的GNU調(diào)試程序。gdb是一個用來調(diào)試C和C++程序的強(qiáng)力調(diào)試器。可以說,gdb不是創(chuàng)建工作的一部分,而是開發(fā)工作的一部分。使用它可以在程序運(yùn)行時觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況,例如,監(jiān)視程序中變量的值,設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行,支持單步執(zhí)行等。56GDB介紹(1)用gcc-gos.c-oos,產(chǎn)生的可執(zhí)行文檔叫os.

然后打gdbos,就可進(jìn)入gdb,屏幕提示:

GDBisfreesoftwareandyouarewelcometodistributecopiesofitundercertainconditions;type"showcopying"tosee

theconditions.

ThereisabsolutelynowarrantyforGDB;type"showwarranty"

fordetails.

GDB4.16,Copyright1995FreeSoftwareFoundation,Inc...

(gdb)

(gdb)是提示符,在這提示符下可以輸入命令,直到退出。(退出命令是q/Q)

57GDB介紹(2)設(shè)置gdb的屏幕大小。鍵入:(gdb)setwidth70就是把標(biāo)準(zhǔn)屏幕設(shè)為70列。58GDB介紹(3)設(shè)置斷點(diǎn):

break或簡單打b后面加行號或函數(shù)名

可以在main函數(shù)上設(shè)斷點(diǎn)

(gdb)breakmain或(gdb)bmain

系統(tǒng)提示:Breakpoint1at0x8049552:fileos.c,line455.

然后運(yùn)行這個程序,當(dāng)程序運(yùn)行到main函數(shù)時程序就會停止返回到gdb的提示符下。59GDB介紹(4)運(yùn)行命令運(yùn)行的命令是run或r打入r或run后,程序就開始運(yùn)行直到進(jìn)入main的入口停止,顯示:

Startingprogram:<路徑>/os

Breakpoint1,main()atos.c:455

455

Initial();

這里455Initial();是將要執(zhí)行的命令或函數(shù)。60GDB介紹(5)gdb提供兩種跟蹤調(diào)試方式:1.單步進(jìn)入,stepinto就是跟蹤到函數(shù)內(nèi)。命令是step或s2.單步,next,就是簡單的單步,不會進(jìn)入函數(shù)。命令是next或n61GDB介紹(6)gdb基本命令:file裝入想要調(diào)試的可執(zhí)行文件kill終止正在調(diào)試的可執(zhí)行文件list列出產(chǎn)生可執(zhí)行文件的源代碼的部分next執(zhí)行下一行源代碼但不進(jìn)入函數(shù)內(nèi)部step執(zhí)行下一行源代碼而且進(jìn)入函數(shù)內(nèi)部run執(zhí)行當(dāng)前被調(diào)試的程序quit終止gdbwatch能監(jiān)視一個變量的值而不管它何時被改變(在break斷點(diǎn)設(shè)定以后采用)print顯示表達(dá)式的值break在代碼里設(shè)置斷點(diǎn),這將使程序執(zhí)行到這里被掛起make不退出gdb就可以重新產(chǎn)生可執(zhí)行文件shell不退出gdb就可執(zhí)行UNIXshell命令62依賴庫顯示lddldd(LibraryDependencyDisplay)工具用來顯示一個可執(zhí)行文件需要使用的共享函數(shù)庫。對于簡單的C程序來說,顯示清單中通常只有兩項(xiàng):C函數(shù)庫libc和動態(tài)庫的裝載器ld-linux。比如:$ldd./myprogramlibc.so.6:=>/lib/libc.so.6(0x40004000)/lib/ld-linux.so.2=>/lib/ld-linux.so.2(0x2aaaa000)633.7.4使用make大程序通常包含有十幾個甚至幾百個單獨(dú)的模塊。如果手工調(diào)用gcc編譯每一個模塊的話,這個過程不但冗長了,而且非常乏味,也容易引進(jìn)錯誤。64Makefile使用make,一個叫Makefile的文件將被創(chuàng)建。在這個文件里,描述了如何使用一套規(guī)則來創(chuàng)建系統(tǒng)的各個組件。這些規(guī)則定義了創(chuàng)建組件所需要的命令(比如對gcc和ar的調(diào)用)以及相互的依賴關(guān)系。比如,要修改一個為許多C源代碼所包含的頭文件,需要對這些文件重新編譯,以使用新的頭文件,然而為了節(jié)省時間,不需要再編譯和此頭文件無關(guān)的其他模塊。GNUmake可以根據(jù)Makefile中指定的規(guī)則進(jìn)行工作,這樣只要編譯那些需要重新編譯的文件就可以了,并且生成新的可執(zhí)行代碼。由Makefile自動維護(hù),使程序員從繁雜的維護(hù)工作中解脫出來。65格式target:dependencyfile1dependencyfile2[....] command1 command2 [....]Makefile66一個簡單使用Makefile的例子main.o(main.clib1.h)prog1.o (prog1.clib1.h)prog2.o(prog2.c)prog3.o(prog3.clib2.h)67#Thisisourfirstmakefilemyprog:main.oprog1.oprog2.oprog3.o gcc–omyprogmain.oprog1.oprog2.oprog3

溫馨提示

  • 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

提交評論