嵌入式操作系統(tǒng)精彩試題集61374_第1頁(yè)
嵌入式操作系統(tǒng)精彩試題集61374_第2頁(yè)
嵌入式操作系統(tǒng)精彩試題集61374_第3頁(yè)
嵌入式操作系統(tǒng)精彩試題集61374_第4頁(yè)
嵌入式操作系統(tǒng)精彩試題集61374_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章嵌入式系統(tǒng)概論填空嵌入式系統(tǒng)是以嵌入式應(yīng)用為目的、以計(jì)算機(jī)技術(shù)為基礎(chǔ)的計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)按應(yīng)用可以分為通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)按軟件結(jié)構(gòu)可分為嵌入式單線程系統(tǒng)和嵌入式事件驅(qū)動(dòng)系統(tǒng)。嵌入式系統(tǒng)按是否具有實(shí)時(shí)性能可分為嵌入式非實(shí)時(shí)系統(tǒng)和嵌入式實(shí)時(shí)系統(tǒng)。嵌入式實(shí)時(shí)系統(tǒng)除具有嵌入式系統(tǒng)的基本特征外,還具實(shí)時(shí)性和可靠性的重要特點(diǎn)。嵌入式系統(tǒng)的硬件架構(gòu)是以嵌入式處理器為中心,由存儲(chǔ)器 I/O設(shè)備,通信模塊以及電源等必要的輔助接口組成。嵌入式系統(tǒng)的軟件通常固態(tài)化存儲(chǔ)在 ROMFLASH或NVRAI中。嵌入式系統(tǒng)的開(kāi)發(fā)由于受到系統(tǒng)資源開(kāi)銷(xiāo)的限制,通常采用交叉開(kāi)發(fā)環(huán)境。嵌入式系統(tǒng)開(kāi)發(fā)采用的交叉開(kāi)發(fā)環(huán)境是由宿主機(jī)和目標(biāo)機(jī)組成的。嵌入式系統(tǒng)的設(shè)計(jì)是使用一組物理硬件和軟件來(lái)完成所需功能的過(guò)程。選擇以下哪一項(xiàng)不屬于嵌入式操作系統(tǒng)(C)VxWorksB.WinCEC.BSDD.uClinux以下關(guān)于嵌入式系統(tǒng)說(shuō)確的是 (A)A.以開(kāi)發(fā)為中心 B對(duì)實(shí)時(shí),成本,功耗要求嚴(yán)格C.軟硬件協(xié)同 D軟件可剪裁以下關(guān)于嵌入式系統(tǒng)說(shuō)確的是 (A)嵌入的系統(tǒng)中可以共存多個(gè)嵌入式系統(tǒng)對(duì)高性能要求嚴(yán)格軟硬件缺乏協(xié)同不要時(shí)性TOC\o"1-5"\h\z對(duì)響應(yīng)時(shí)間有嚴(yán)格要求的嵌入式系統(tǒng)是( A)A.嵌入式實(shí)時(shí)系統(tǒng) B.嵌入式多線程系統(tǒng)C.嵌入式多核系統(tǒng)D.嵌入式輪轉(zhuǎn)詢(xún)問(wèn)系統(tǒng)以下哪一項(xiàng)屬于嵌入式系統(tǒng)不具備的特點(diǎn)( B)A.采用專(zhuān)用處理器B.跨平臺(tái)可移植C.軟硬件協(xié)同一體化D.小型化與有限資源嵌入式系統(tǒng)硬件的核心是 (B)A.存儲(chǔ)器B.嵌入式微處理器C.嵌入式微控制器 D.BSP嵌入式系統(tǒng)的軟件部分不包括 (A)A.DSPB.嵌入式操作系統(tǒng)C.設(shè)備驅(qū)動(dòng)程序D.應(yīng)用程序?qū)π阅芤蟾叩那度胧较到y(tǒng)是(C)A.嵌入式實(shí)時(shí)系統(tǒng) B.嵌入式多線程系統(tǒng)C.嵌入式多核系統(tǒng) D.嵌入式輪轉(zhuǎn)詢(xún)問(wèn)系統(tǒng)嵌入式應(yīng)用軟件的開(kāi)發(fā)階段不包括(D)A.交叉編譯和 B.開(kāi)發(fā)環(huán)境的建立C.聯(lián)機(jī)調(diào)試 D. 應(yīng)用程序模塊加載為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都保存在( A)存儲(chǔ)器芯片B.磁盤(pán)C.cacheD.CDROM五.簡(jiǎn)答題給出嵌入式系統(tǒng)的一般定義和基本特征。定義:嵌入式系統(tǒng)(EmbeddedSystem)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。基本特征:(1)專(zhuān)用性:采用專(zhuān)用的嵌入式處理器,功能算法的專(zhuān)用性;小型化與有限資源:資源約束和空間約束與專(zhuān)用性;系統(tǒng)軟硬件設(shè)計(jì)的協(xié)同一體化:硬件與軟件的協(xié)同設(shè)計(jì)和應(yīng)用軟件與操作系統(tǒng)的一體化設(shè)計(jì)開(kāi)發(fā)。嵌入式實(shí)時(shí)系統(tǒng)相對(duì)其它嵌入式系統(tǒng)具有哪些不同的特點(diǎn)?任意列舉兩種為實(shí)現(xiàn)嵌入式實(shí)時(shí)系統(tǒng)所采用的措施。嵌入式實(shí)時(shí)系統(tǒng)除具有嵌入式系統(tǒng)的基本特征外,還具有實(shí)時(shí)性和可靠性的重要特點(diǎn)。為實(shí)現(xiàn)以上實(shí)時(shí)性能的要求,嵌入式系統(tǒng)一般采用如下方式:采用高速硬件。如高速處理器、高速 A/D、D/A等;利用嵌入式處理器提供的中斷功能;需要嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS的支持;應(yīng)用程序代碼量小、執(zhí)行速度快。請(qǐng)列舉兩種嵌入式系統(tǒng)開(kāi)發(fā)的方法。目前,嵌入式系統(tǒng)的開(kāi)發(fā)有模擬開(kāi)發(fā)調(diào)試、嵌入式在線仿真和遠(yuǎn)程調(diào)試等幾種方法。請(qǐng)簡(jiǎn)述嵌入式系統(tǒng)的特點(diǎn)。、面向特定應(yīng)用的特點(diǎn)。、嵌入式系統(tǒng)的硬件和軟件都必須進(jìn)行高效地設(shè)計(jì)。3、嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、 半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合的產(chǎn)物。4、為了提高執(zhí)行素的和系統(tǒng)可靠性, 嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片中或單片機(jī)本身,而不是存儲(chǔ)于磁盤(pán)中。5、 嵌入式開(kāi)發(fā)的軟件代碼尤其要求高質(zhì)量,高可靠性。6、嵌入式系統(tǒng)本身不具備二次開(kāi)發(fā)能力, 必須有一套開(kāi)發(fā)工具和環(huán)境才能進(jìn)行再次開(kāi)發(fā)。請(qǐng)列舉ARM處理器支持的運(yùn)行模式。1、用戶模式2、 快速中斷模式3、 外部中斷模式4、 管理模式5、 數(shù)據(jù)訪問(wèn)終止模式6、 系統(tǒng)模式第二章.嵌入式處理器基礎(chǔ)一.填空ARM嵌入式系統(tǒng)主要由嵌入式處理器,相關(guān)支撐硬件和嵌入式軟件系統(tǒng)組成。ARM微處理器的特點(diǎn)包括:低功耗,低成本和高性能。ARM處理器共有37個(gè)寄存器,包括31個(gè)通用寄存器和6個(gè)狀態(tài)寄存器。ARM微處理器支持兩種指令集: ARM指令集和Thumb指令集。ARM體系結(jié)構(gòu)采用的特征有: Load/Store體系結(jié)構(gòu),固定的32位指令,3地址指令格式。ARM體系結(jié)構(gòu)可用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),具體為大端模式和小端模式。ARM微處理器中,Thumb狀態(tài)下的寄存器集是ARM犬態(tài)下寄存器集的一個(gè)子集。

ARM微處理器的工作模式中,系統(tǒng)模式并不是通過(guò) 異常進(jìn)入的,它和用戶模式具有完全一樣的寄存器。ARM處理器工作狀態(tài)主要有運(yùn)行,睡眠,空閑 。常用的嵌入式外圍設(shè)備有存儲(chǔ)設(shè)備,通信設(shè)備,顯示設(shè)備。二選擇以下哪一項(xiàng)不屬于嵌入式處理器的特點(diǎn)( C)A.對(duì)實(shí)時(shí)多任務(wù)支持能力強(qiáng) B.功耗低C.處理器結(jié)構(gòu)不易擴(kuò)展 D. 存儲(chǔ)保護(hù)能力強(qiáng)以下哪一項(xiàng)不屬于嵌入式處理器(B)PowerPCB.pentiumC.ARMD.MIPS在指令系統(tǒng)的各種尋址方式中,獲取操作數(shù)最快的方式是( B)A.直接尋址B.立即尋址C.寄存器尋址D.間接尋址ARM微處理器的寄存器在Thumb狀態(tài)與ARM犬態(tài)下相同的是(DR8-R12B.R15和CPSRC.R13-R14D.R0-R7ARM指令系統(tǒng)采用(C)指令A(yù).單地址B.雙地址C.三地址D.四地址ARM3級(jí)流水線下取第一條指令前程序計(jì)數(shù)器為 PC,則取第三條指令為(D)APC+3BPC+6CPC+8DPC+12以下哪一項(xiàng)不屬于ARM核的功能模塊(C)支持16位壓縮指令集ThumbB.支持片上DebugC.媒體功能擴(kuò)展SIMDD.嵌入式ICE,支持片上斷點(diǎn)和調(diào)試ARM寄存器組中除了以下哪組寄存器以外所有處理器模式下都可以訪問(wèn)( A)SPSRB.R0-R7C.CPSRD.R8-R9ARMARM異常處理中,軟件中斷處理程序執(zhí)行( A)指令可以從SWI模式返回,無(wú)論是在ARM狀態(tài)還是Thumb狀態(tài)。MOVSPC,R14_svcB.MOVEQPC,R14_svcC.MOVSPC,R14_undD.MOVEQPC,R14_und以下哪一項(xiàng)不屬于ARM異常中斷(C)復(fù)位B.IRQC.條件轉(zhuǎn)移D.數(shù)據(jù)終止判斷TOC\o"1-5"\h\zFIQ異常是為了支持?jǐn)?shù)據(jù)傳輸或者中斷處理而設(shè)計(jì)的。 (錯(cuò))ARM指令為32位的長(zhǎng)度,Thumb指令為16位長(zhǎng)度。(對(duì))ARM微處理器采用RISC指令集,使用大量的寄存器。 (對(duì))所有的ARM指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行, 從而提高指令的執(zhí)行效率ARM微處理器的存儲(chǔ)器格式必須按對(duì)齊規(guī)則對(duì)存儲(chǔ)單元進(jìn)行訪問(wèn)。 (錯(cuò))ARM微處理器通用寄存器 R14?R0程序計(jì)數(shù)器PC—個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問(wèn)的。(對(duì))ARM狀態(tài)下的寄存器組織分為三類(lèi):分組寄存器,程序寄存器,狀態(tài)寄存器。 (錯(cuò))R13在Thumb指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。(錯(cuò))ARM微處理器中狀態(tài)寄存器的低 8位稱(chēng)為控制位,發(fā)生異常時(shí)這些位可以被改變,但當(dāng)處理器運(yùn)行特權(quán)模式,這些位不可以改變。 (錯(cuò))ARM微處理器可用加載/存儲(chǔ)指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。名詞解釋單機(jī)處理器所謂單機(jī)處理器是指那些專(zhuān)門(mén)用于處理功能的處理器芯片,相對(duì)于集成化處理器,單機(jī)處理器需要一些外圍電路支持才能夠?qū)崿F(xiàn)其基本功能。ARM架構(gòu)進(jìn)階精簡(jiǎn)指令集機(jī)器,是一個(gè) 32位精簡(jiǎn)指令集(RISC)中央處理器架構(gòu),ARM處理器體系結(jié)構(gòu)由ARM公司開(kāi)發(fā)并擁有知識(shí)產(chǎn)權(quán)。超標(biāo)量體系結(jié)構(gòu)能夠在一個(gè)時(shí)鐘周期執(zhí)行多個(gè)指令,在超標(biāo)量體系結(jié)構(gòu)設(shè)計(jì)中,處理器或指令編譯器判斷指令能獨(dú)立于其它順序指令執(zhí)行,還是依賴(lài)于另一指令,必須跟其按順序執(zhí)行,然后處理器使用多個(gè)執(zhí)行單元同時(shí)執(zhí)行兩個(gè)或更多獨(dú)立指令。DSP微處理器是一種獨(dú)特的微處理器,是以數(shù)字信號(hào)來(lái)處理大量信息的器件。其工作原理是接收模擬信號(hào),轉(zhuǎn)換為0或1的數(shù)字信號(hào)。再對(duì)數(shù)字信號(hào)進(jìn)行修改、刪除、強(qiáng)化,并在其他系統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。嵌入式片上系統(tǒng)單個(gè)芯片上集成一個(gè)完整的系統(tǒng),對(duì)所有或部分必要的電子電路進(jìn)行包分組的技術(shù)。完整的系統(tǒng)一般包括中央處理器,存儲(chǔ)器以及外圍電路等。隨著電子數(shù)據(jù)交換的推廣和 VLSI設(shè)計(jì)的普及化,以及半導(dǎo)體工藝的迅速發(fā)展,在一個(gè)硅片上可以實(shí)現(xiàn)一個(gè)更為復(fù)雜的系統(tǒng)。簡(jiǎn)答題當(dāng)出現(xiàn)異常時(shí),ARM微處理器會(huì)執(zhí)行哪幾步操作?將下一條指令的地址存入相應(yīng)連接寄存器 LR,以便程序在處理異常返回時(shí)能從正確的位置重新開(kāi)始執(zhí)行。若異常是從 ARM狀態(tài)進(jìn)入,則LR寄存器中保存的是下一條指令的地址(當(dāng)前PC+4或PC+8,與異常的類(lèi)型有關(guān));若異常是從Thumb狀態(tài)進(jìn)入,則在LR寄存器中保存當(dāng)前PC的偏移量,這樣,異常處理程序就不需要確定異常是從何種狀態(tài)進(jìn)入的。例如:在軟件中斷異常SWI,指令MOVPC,R14_svc總是返回到下一條指令,不管 SWI是在ARM1犬態(tài)執(zhí)行,還是在Thumb狀態(tài)執(zhí)行;將CPSF復(fù)制到相應(yīng)的SPSR中;根據(jù)異常類(lèi)型,強(qiáng)制設(shè)置 CPSR的運(yùn)行模式位;強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程處。請(qǐng)簡(jiǎn)述ARM微處理器兩種工作狀態(tài)集的切換操作及方法。ARM旨令集和Thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換:在開(kāi)始執(zhí)行代碼時(shí),處于ARM犬態(tài);當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),可以采用執(zhí)行BX指令的方法,使微處理器從ARM犬態(tài)切換到Thumb狀態(tài);當(dāng)處理器處于Thumb狀態(tài)時(shí)發(fā)生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時(shí),自動(dòng)切換到 Thumb狀態(tài);當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令(狀態(tài)跳轉(zhuǎn))時(shí)可以使微處理器從Thumb狀態(tài)切換到ARM犬態(tài)。在處理器進(jìn)行異常處理時(shí),把 PC指針?lè)湃氘惓DJ郊拇嫫髦校漠惓O蛄康刂烽_(kāi)始執(zhí)行程序,也可以使處理器切換到 ARM犬態(tài)。請(qǐng)簡(jiǎn)述ARM微處理器的用戶模式和特權(quán)模式,以及用戶模式向特權(quán)模式的轉(zhuǎn)換。除了用戶模式之外的其他6種處理器模式稱(chēng)為特權(quán)模式.特權(quán)模式下,程序可以訪問(wèn)所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式的切換。(2) 特權(quán)模式中,除系統(tǒng)模式外,其他5種模式又稱(chēng)為異常模式。大多數(shù)的用戶程序運(yùn)行在用戶模式下,此時(shí),應(yīng)用程序不能夠訪問(wèn)一些受操作系統(tǒng)保護(hù)的系統(tǒng)資源, 應(yīng)用程序也不能直接進(jìn)行處理器模式的切換。(3) 用戶模式下,當(dāng)需要進(jìn)行處理器模式切換時(shí), 應(yīng)用程序可以產(chǎn)生異常處理,在異常處理中進(jìn)行處理器模式的切換。ARM微處理器的運(yùn)行模式有有哪幾種,請(qǐng)列舉并說(shuō)明。(1)用戶模式(User,usr):正常程序執(zhí)行時(shí),ARM處理器所處的狀態(tài)。(2) 快速中斷模式(FIQ,fiq):用于快速數(shù)據(jù)傳輸和通道處理。(3) 外部中斷模式(IRQ,irq):用于通常的中斷處理。(4) 特權(quán)模式(Supervisor,sve):供操作系統(tǒng)使用的一種保護(hù)模式。(5) 數(shù)據(jù)訪問(wèn)中止模式(Abort,abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。(6) 未定義指令終止模式(Undefined,und):用于支持硬件協(xié)處理器軟件仿真。(7) 系統(tǒng)模式(System,sys):用于運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù)。如何進(jìn)行嵌入式處理器的選型?ARM微處理器選型時(shí)應(yīng)注意:ARM微處理器核的選擇系統(tǒng)的工作頻率芯片存儲(chǔ)器的容量片外圍電路的選擇嵌入式處理器通常劃分為哪四大類(lèi)型?試列舉出來(lái)。嵌入式處理器通常分為四大類(lèi) :嵌入式微處理器(MPU)、嵌入式微控制器(MCU)、嵌入式DSP處理器(DSP)、嵌入式片上系統(tǒng)(SOC)。試簡(jiǎn)述Thumb技術(shù)。Thumb是ARM體系結(jié)構(gòu)的擴(kuò)展,它有從標(biāo)準(zhǔn) 32位ARM指令集抽出來(lái)的36條指令格式,可重新編制成16位的操作碼。Thumb指令的寬度只有ARM指令寬度的一半,在運(yùn)行時(shí),這些16位的Thumb指令又由處理器壓成32為的ARM指令。Thumb不僅僅是另一個(gè)混合指令集的概念,因?yàn)橹С諸humb的核有2套獨(dú)立的指令集,它使設(shè)計(jì)者得到ARM32位指令性能的同時(shí),又能享有Thumb指令集產(chǎn)生的代碼方面的優(yōu)勢(shì),可在性能和代碼大小之間取得平衡。第三章Linux體系結(jié)構(gòu)(核)和BusyBOX填空Linux最重要的特點(diǎn)是開(kāi)源, Linux核遵循GNUGPL條款,意味著Linux是自由軟件。Shell是操作系統(tǒng)中運(yùn)行的程序,位于操作系統(tǒng)核與用戶之間亠充當(dāng)了一個(gè)“命令解釋器”的角色。LINUX支持核線程以及動(dòng)態(tài)裝載核模塊。Shell是系統(tǒng)的用戶界面,文件系統(tǒng)是文件存放在磁盤(pán)等存儲(chǔ)設(shè)備上的組織方法。Linux讓所有任務(wù)都運(yùn)行在核態(tài), 直接調(diào)用函數(shù),無(wú)須消息傳遞,避免了進(jìn)程間通信(IPC)機(jī)制的開(kāi)銷(xiāo)。由于核支持異步終端、搶占和 SMP因此必須時(shí)刻注意同步和并發(fā)。命令提示符分為普通用戶和管理員用戶兩種,普通用戶的命令提示符使用 $,管理員用戶的命令提示符是#。Is命令使用"-I”選項(xiàng)時(shí),可以查看文件和目錄的詳細(xì)信息,文件(目錄)列表的第一列字段信息是權(quán)限屬性信息,此信息中的第一位(左數(shù))標(biāo)志位是" d”表示目錄,“-”表示普通文件。 —在核里不能訪問(wèn)非法的存地址,也不要引用空指針。掛載設(shè)備到文件系統(tǒng)的命令是 mount,從文件系統(tǒng)中卸載設(shè)備命令是 umounto二選擇下面選項(xiàng)中哪個(gè)不是 Linux系統(tǒng)的主要部分(D)核B.ShellC.文件系統(tǒng)D.Bash以下關(guān)于Linux系統(tǒng)描述錯(cuò)誤的是(B)A.支持動(dòng)態(tài)加載核模塊 B.核區(qū)分線程和其他進(jìn)程C.核可以搶占D. 支持對(duì)稱(chēng)多處理機(jī)制以下核開(kāi)發(fā)特點(diǎn)描述錯(cuò)誤的是(C)A.核編程時(shí)不能訪問(wèn)C庫(kù)B.必須使用GNUCC.核有一個(gè)較大的定長(zhǎng)堆棧 D.很難使用浮點(diǎn)數(shù)touch命令的作用是(A)A.新建文件B.新建目錄C.查看文件類(lèi)型D.文件移動(dòng)或文件重命名下面的命令中哪個(gè)不是顯示文件容的命令 (D)catB.lessC.moreD.file刪除文件命令rm與(C)選項(xiàng)配合使用可以完整的刪除整個(gè)目錄,無(wú)需事先刪除目錄中的容。-lB.-tC.-rD.-alinux 命令行中,“.”表示(A)A.當(dāng)前目錄B.上一級(jí)目錄 C.根目錄D.宿主目錄更改文件權(quán)限命令是 chmod,基本格式是chmod[ugoa][+-=][rwx]FILE..., 其中"ugoa”表示權(quán)限設(shè)置針對(duì)的用戶類(lèi)別, “o”表示的是(C)oA.文件屬主B. 文件屬組C.除屬主和屬組之外的其他用戶 D.所有用戶用戶口令保存在(B)文件中。passwdB.shadowC.groupD.skel列目錄命令ls與“-c”選項(xiàng)搭配使用表示(B)A.顯示所有文件及目錄 B.按列輸出,縱向排序C.按列輸出,橫向排序D.根據(jù)文件建立時(shí)間的先后次序列出判斷TOC\o"1-5"\h\zLinux系統(tǒng)的應(yīng)用主要涉及4個(gè)方面:應(yīng)用服務(wù)器、嵌入式領(lǐng)域、軟件開(kāi)發(fā)以及桌面應(yīng)用 (對(duì))Linux系統(tǒng)具有開(kāi)放性,多用戶和多任務(wù)的優(yōu)點(diǎn), 缺點(diǎn)是沒(méi)有提供良好的用戶界面。 (錯(cuò))Shell是Linux操作系統(tǒng)的核心。(錯(cuò))Unix核是一個(gè)不可分割的靜態(tài)可執(zhí)行塊 ,即是單一核,而Linux不是單一核。(錯(cuò))Linux的模塊化設(shè)計(jì),搶占式核帶有微核的影子。 (對(duì))Linux不提供具有設(shè)備類(lèi)的面向?qū)ο笤O(shè)備模型,熱插拔事件以及用戶空間的設(shè)備文件系統(tǒng) (錯(cuò))Linux是一個(gè)可移植性的操作系統(tǒng)。 (對(duì))Linux系統(tǒng)在核中的存都不分頁(yè),故需要關(guān)注物理存的大小。 (對(duì))在描述文件時(shí),有時(shí)在文件名部分用到一些通配符, “*”表示該位置可以是一個(gè)任意的單個(gè)字符。(錯(cuò))cat命令適合查看長(zhǎng)文件。(錯(cuò))名詞解釋單核整體上被作為一個(gè)單獨(dú)的大過(guò)程實(shí)現(xiàn), 并同時(shí)運(yùn)行在一個(gè)單獨(dú)的地址空間。 它具有簡(jiǎn)單高性能的特點(diǎn),被大多數(shù) Unix系統(tǒng)所采用。2?微核被劃分為獨(dú)立的過(guò)程,每個(gè)過(guò)程為一個(gè)服務(wù)器,各種服務(wù)器之間通過(guò)進(jìn)程間通信 (IPC)機(jī)制互通消息,避免了服務(wù)器之間的失效傳遞, WindowsNT和MacOSX采用微核。核核是一個(gè)用來(lái)和硬件打交道并為用戶程序提供一個(gè)有限服務(wù)集的低級(jí)支撐軟件。一個(gè)計(jì)算機(jī)系統(tǒng)是一個(gè)硬件和軟件的共生體,它們互相依賴(lài),不可分割。ShellShell是操作系統(tǒng)中運(yùn)行的程序,與系統(tǒng)中的其他程序不同, Shell程序位于操作系統(tǒng)與用戶之間,負(fù)責(zé)接受用戶輸入的命令, 在對(duì)已輸入的命令進(jìn)行解釋后, 將需要執(zhí)行的命令程序傳遞給操作系統(tǒng)核執(zhí)行,因此 Shell程序充當(dāng)了一個(gè)“命令解釋器”的角色。BusyBoxBusyBox是標(biāo)準(zhǔn)Linux工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox包含了一些簡(jiǎn)單的工具,還包含了一些更大、更復(fù)雜的工具,。有些人將BusyBox稱(chēng)為L(zhǎng)inux工具里的瑞士軍刀。簡(jiǎn)單的說(shuō)BusyBox就好像是個(gè)大工具箱,它集成壓縮了 Linux的許多工具和命令。第四章基于Linux平臺(tái)的應(yīng)用程序開(kāi)發(fā)填空在系統(tǒng)提示符號(hào)輸入vi及文件名稱(chēng)后,就進(jìn)入vi全屏幕編輯畫(huà)面,進(jìn)入vi之后,是處于命令行模式,要切換到插入模式才能夠輸入文字。在vi編輯中,可以使用鍵盤(pán)移動(dòng)光標(biāo),按數(shù)字0,移到文章的開(kāi)頭,按G則移動(dòng)到文章的最后。使用vi編輯器的末行命令setnu可以在編輯器中顯示行號(hào), 同樣在末行模式下使用 setnonu命令可以取消行號(hào)的顯示。GCC的編譯流程分為4個(gè)步驟,分別為:預(yù)處理,編譯,匯編,。一個(gè)簡(jiǎn)單的Makefile文件包含一系列的“規(guī)則”,其中目標(biāo)通常是要產(chǎn)生的文件的名稱(chēng) _依賴(lài)是用來(lái)輸入從而產(chǎn)生目標(biāo)的文件。命令是Make執(zhí)行的動(dòng)作,每個(gè)命令行前面必須是一個(gè) Tab字符。shell 變量類(lèi)型,只有字符串型,變量可以被賦值,被修改,被引用。變量引用中,在變量名前加$號(hào),代表變量容,引用一個(gè)未定義的變量,變量值為空字符串。邏輯運(yùn)算中,有幾個(gè)基本的語(yǔ)法,其中 -o表示或者(OR,二乞表示與(AND。shell 腳本文件的首行容是指定 shell環(huán)境,shell環(huán)境的設(shè)置以“#!”開(kāi)始,后面為需要使用的shell程序的全路徑名。選擇在vi編輯環(huán)境中有3種模式狀態(tài),下面不屬于這 3種模式狀態(tài)的是(D)。A.命令行模式B.插入模式C.底行模式D.編輯模式在下面退出vi環(huán)境的命令中,(A)是退出的同時(shí)不對(duì)當(dāng)前文件的修改進(jìn)行任何保存。:q!B.:wqC.:qD.:w下面(C)選項(xiàng)不是從命令行模式切換到插入模式。iB.oC.ESCD.avi可以直接用鍵盤(pán)上的光標(biāo)來(lái)上下左右移動(dòng),但正規(guī)的vi是用小寫(xiě)英文字母進(jìn)行移動(dòng),其中h表示(A)A.向左移動(dòng)光標(biāo)B.向右移動(dòng)光標(biāo)C.向上移動(dòng)光標(biāo)D.向下移動(dòng)光標(biāo)在GCC勺常用選項(xiàng)中,(B)表示編譯為匯編代碼。-cB.-SC.-ED.-ggdb基本命令中,(B)命令表示執(zhí)行一行源代碼但不進(jìn)入函數(shù)部。runB.nextC.fileD.stepMakefile中目標(biāo)勺例子不會(huì)是( D)??蓤?zhí)行文件B.OBJ文件C.偽目標(biāo)D.shell變量名命名中不包括(D) 。字母B.數(shù)字C.下劃線D.括號(hào)創(chuàng)建勺shell變量,默認(rèn)為(C)。A.環(huán)境變量B.全局變量C.局部變量D.靜態(tài)變量test命令主要提供了判斷功能,語(yǔ)法格式為: test-[dfrwxs]file,其中-ffile表示(B)。A.文件file存在且為目錄文件B.文件file存在且為普通文件C.文件file存在且文件長(zhǎng)度為非零 D.文件file存在且為可執(zhí)行文件判斷TOC\o"1-5"\h\zUnix區(qū)分大小寫(xiě),Linux不區(qū)分大小寫(xiě)。 (錯(cuò))按o進(jìn)入插入模式后,是插入新勺一行,從行首開(kāi)始輸入文字。 (對(duì))在vi編輯器中,x表示每按一次,刪除光標(biāo)所在位置的 ”前面"一個(gè)字符。(錯(cuò))在編譯階段,GCC首先要檢查代碼的規(guī)性、 是否有語(yǔ)法錯(cuò)誤等, 在檢查無(wú)誤后,GCC把代碼翻譯為匯編語(yǔ)言。 (對(duì))Gdb是一款GNI開(kāi)發(fā)組織并發(fā)布的UNIX/Linux下的程序調(diào)試工具,可以一行行的執(zhí)行代碼。(對(duì))Makefile的基本結(jié)構(gòu)是文本文件。(對(duì))一個(gè)makefile文件中可定義多個(gè)目標(biāo),利用maketarget命令可指定要編譯的目標(biāo),如果不指定目標(biāo),則使用最后一個(gè)目標(biāo)。(錯(cuò))shell變量定義規(guī)則,不需要事先定義,直接賦值定義新變量,直接賦值修改原變量的值。(對(duì))命令[和命令test功能等價(jià),區(qū)別是前者要求其最后一個(gè)命令行參數(shù)必須為右方括號(hào)。(對(duì))大括號(hào)與括號(hào)的區(qū)別:括號(hào)括起的一組命令是在shell進(jìn)程中進(jìn)行,大括號(hào)括起的一組命令是在子shell中進(jìn)行,括號(hào)命令執(zhí)行完畢后,子shell就會(huì)終止,返回父shell。(錯(cuò))簡(jiǎn)答題Linux文本編輯器有哪幾類(lèi),不同分類(lèi)之間的區(qū)別是什么?Linux文本編輯器有4類(lèi),分別為:行編輯器,全屏編輯器,字符界面編輯器和圖形界面編輯器。(1)行編輯器是以行為單位進(jìn)行編輯的文本編輯器,當(dāng)編輯完成某一行的文本容并回車(chē)后,開(kāi)始下一行的編輯,此時(shí)將不能任意返回文件前面的行進(jìn)行編輯。(2)全屏幕編輯器能夠在編輯器的屏幕上編輯文件中所有行的文本容。(3)字符界面的編輯器占用系統(tǒng)資源小,運(yùn)行效率高,可廣泛地適用于各種場(chǎng)合,但是字符界面編輯器存在著用戶界面不夠友好,操作不夠簡(jiǎn)單等方面的缺點(diǎn)。(4)圖形界面編輯器是在 Linux圖形界面下運(yùn)行的文本編輯程序,通常工作在X-Window圖形環(huán)境中。簡(jiǎn)述GCC勺編譯流程。1.預(yù)處理在該階段,編譯器分析處理源代碼文件中勺各種宏指令,如#include等。2.編譯在該階段,GCC首先要檢查代碼的規(guī)性、是否有語(yǔ)法錯(cuò)誤等,在檢查無(wú)誤后, GCC把代碼翻譯為匯編語(yǔ)言。匯編在該階段,編譯器把編譯生成的匯編代碼轉(zhuǎn)成二進(jìn)制目標(biāo)代碼。4.在該階段,編譯器把匯編階段生成的二進(jìn)制代碼、程序中用到的庫(kù)文件起來(lái),生成可執(zhí)行文件。3.Gdb有哪些功能,并列舉常用的 Gdb基本命令。(1)Gdb是一款GNU開(kāi)發(fā)組織并發(fā)布Linux下的程序調(diào)試工具。它使用戶能在程序運(yùn)行時(shí)觀察程序的部結(jié)構(gòu)和存的使用情況。以下是gdb所提供的一些功能:它使用戶能監(jiān)視你程序中變量的值.它使用戶能設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行 .它使用戶能一行行的執(zhí)行你的代碼.(2)Gdb基本命令:file 裝入想要調(diào)試的可執(zhí)行文件.kill 終止正在調(diào)試的程序list 列出產(chǎn)生執(zhí)行文件的源代碼的一部分next執(zhí)行一行源代碼但不進(jìn)入函數(shù)部.4.一個(gè)簡(jiǎn)單的Makefile文件包含一系列的“規(guī)則”,請(qǐng)描述“規(guī)則”的樣式。“規(guī)則”的樣式如下:目標(biāo):依賴(lài)…<tab>命令(command)目標(biāo)通常是要產(chǎn)生的文件的名稱(chēng), 目標(biāo)的例子是可執(zhí)行文件或 OBJ文件。目標(biāo)也可是一個(gè)執(zhí)行的動(dòng)作名稱(chēng),這樣的目標(biāo)通常稱(chēng)為偽目標(biāo)。依賴(lài)是用來(lái)輸入從而產(chǎn)生目標(biāo)的文件,一個(gè)目標(biāo)經(jīng)常有幾個(gè)依賴(lài)。命令是Make執(zhí)行的動(dòng)作,一個(gè)規(guī)則可以含有幾個(gè)命令,每個(gè)命令占一行。Shell變量用于在Shell程序中保存系統(tǒng)和用戶需要使用的值,Shell變量可分為4種類(lèi)型,請(qǐng)簡(jiǎn)述這4中類(lèi)型。(1)環(huán)境變量環(huán)境變量是用戶登錄時(shí)Linux系統(tǒng)為用戶預(yù)先設(shè)定好的一類(lèi)Shell變量。環(huán)境變量的功能是設(shè)置用戶在當(dāng)前Shell中的工作環(huán)境,包括用戶宿主目錄,命令查找路徑,用戶當(dāng)前目錄等。(2)預(yù)定義變量預(yù)定義變量是Linux系統(tǒng)中已經(jīng)定義好的變量,用戶只能使用預(yù)定義變量,而不能創(chuàng)建或賦值預(yù)定義變量。所有的預(yù)定義變量都由“ $”符和另一符號(hào)組成。(3)位置變量位置變量與Shell腳本程序執(zhí)行時(shí)所使用的命令參數(shù)相對(duì)應(yīng),命令行中的參數(shù)按照從左到右的順序賦值給位置變量。(4)用戶自定義變量(本地變量)

用戶自定義變量是Shell用戶自己定義的變量,只在用戶自己的Shell中有效,因此又稱(chēng)為本地變量六.應(yīng)用題使用shell腳本編程求解1+3+5+...+99的和。#!/bin/bashsum=0i=0while[$i-le99]dosum=$((sum+i))i=$((i+2))doneecho"theanswer:$sum"使用shell腳本編程求解10!。#!/bin/bashmult=1i=1while[$i-le10]domult=$((mult*i))i=$((i+1))done,用Shell,用Shell編程,實(shí)現(xiàn)自動(dòng)創(chuàng)

f4.txt四個(gè)文件分別拷貝到在根目錄下有四個(gè)文件f1.txt,f2.txt,f3.txt,f4.txt建m1,m2,m3,m4四個(gè)目錄,并將f1.txt,f2.txt,f3.txtm1,m2,m3,m4四個(gè)目錄下。#!/bin/bashcd/root/touchf1.txtf2.txtf3.txtf4.txti=1while[$i-le4]domkdirm$icpf$I.txtm$ii=$((i+1))done編寫(xiě)一個(gè)名為myshell.sh的腳本,它包括以下容:包含一段注釋?zhuān)谐瞿?、腳本的名稱(chēng)。問(wèn)候用戶。

顯示日期和時(shí)間。顯示這個(gè)月的日歷。顯示您的機(jī)器名。顯示當(dāng)前這個(gè)操作系統(tǒng)的名稱(chēng)和版本。顯示變量PATH和HOME勺值。顯示磁盤(pán)使用情況。用id命令打印出您勺組ID。跟用戶說(shuō)“Goodbye”#!/bin/bash#namemyshell.shuser='whoami'case$userinroot)echo"helloroot";;zz)echo"hellozz";;*)echo"hello$user,welcome"esacecho"日期和時(shí)間:'date'"echo"本月勺日歷:'cal'"echo"本機(jī)勺機(jī)器名:'uname-n'"echo"當(dāng)前這個(gè)操作系統(tǒng)勺名稱(chēng)和版本:'uname-s;uname-r'"echo"PATH的值:$PATH"echo"HOME的值:$HOME"echo"磁盤(pán)的使用情況:'df'"echo"用id命令打印出你的組ID:'id-g'"echo"Goodbye!"設(shè)計(jì)一個(gè)Shell程序,在/userdata目錄下建立50個(gè)目錄,即userl?每個(gè)目錄的權(quán)限為rwxr-xrw-#!/bin/bashcd/root/dirai=1while[$i-le10]domkdir-p/root/dira/user$ichmodu=rwx/root/dira/user$ichmodg=rx/root/dira/user$ichmodo=rw/root/dira/user$ii=$((i+1))doneuser50,并設(shè)置目錄里,且文設(shè)計(jì)一個(gè)shell程序,備份并壓縮/etc目錄的所有容,存放在/root/bak件名為如下形式y(tǒng)ymmdd_etc,yy為年,mm為月,dduser50,并設(shè)置目錄里,且文#!/bin/bashdirname='ls/root|grepbak'if[-z$dirname];thenmkdir/root/bakcd/root/bakfiyy='date+%Y'mm='date+%m'dd='date+%d'tarczvf${yy}${mm}${dd}_etc.gz/etcecho"etcbakisfinshied"編寫(xiě)shell程序,實(shí)現(xiàn)自動(dòng)增加10個(gè)用戶賬號(hào)的功能。賬號(hào)名為user1至user2,然后再將它們刪除。#!/bin/bashi=1while[$i-le10]doadduseruser$ii=$((i+1))donej=1while[$j-le10]douserdeluser$jj=$((j+1))done有如下含有3個(gè)目標(biāo)體的makefile文件:test:kang.oyul.ogcckang.oyul.o-otestkang.o:kang.ckang.hgcc-Wall-O-g-ckang.c-okang.oyul.o:yul.cyul.hgcc-Wall-O-g-cyul.c-oyul.o為了簡(jiǎn)化編寫(xiě),請(qǐng)將上述文件使用自動(dòng)變量替換實(shí)現(xiàn)。并且根據(jù)makefile的隱含規(guī)則,將其在簡(jiǎn)化。OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gtest:$(OBJS)$(CC)$A-o$kang.o:kang.ckang.h$(CC)$(CFLAGS)-c$<-o$yul.o:yul.cyul.h$(CC)$(CFLAGS)-c$<-o$根據(jù)隱含規(guī)則,上述makefile文件可以寫(xiě)成:OBJS=kang.oyul.oCC=gccCFLAGS=-Wall-O-gtest:$(OBJS)$(CC)$A-o$用vi在同一目錄下已經(jīng)編輯了兩個(gè)簡(jiǎn)單的 hello程序,分別為hello.c和hello.h,請(qǐng)先在同一目錄下用vi編輯makefile,用一個(gè)目標(biāo)體實(shí)現(xiàn);然后再將其使用變量替換實(shí)現(xiàn)。用vi編輯makefile:hello:hello.chello.hgcchello.c-ohello用vi打開(kāi)makefile,用變量進(jìn)行替換:OBJS:=hello.oCC:=gcchello:$(OBJS)$(CC)$a-o$用vi在同一目錄下已經(jīng)編輯了兩個(gè)簡(jiǎn)單的 test程序,分別為test.c和test.h,請(qǐng)先在同一目錄下用vi編輯makefile,用兩個(gè)目標(biāo)體實(shí)現(xiàn);然后再將其使用變量替換實(shí)現(xiàn)。用vi編輯makefile:hello:hello.ogcchello.o-ohellohello.o:hello.chello.hgcc-chello.c-ohello.o用vi打開(kāi)makefile,用變量進(jìn)行替換:OBJS1:=hello.oOBJS2:=hello.chello.hCC:=gcchello:$(OBJS1)$(CC)$a-o$$(OBJS1):$(OBJS2)$(CC) -c$<-o$第五章核初始化填空為桌面計(jì)算機(jī)加電后,BIOS軟件系統(tǒng)會(huì)立即接管對(duì)系統(tǒng)處理器的控制,該軟件系統(tǒng)都是保存在閃存里面的,以便對(duì)該軟件系統(tǒng)進(jìn)行必要的升級(jí)工作。在嵌入式系統(tǒng)中,當(dāng)系統(tǒng)加電后,目標(biāo)板所帶的引導(dǎo)裝入程序?qū)⒘⒓唇庸芟到y(tǒng)處理器的控制權(quán)。Linux 需要一個(gè)文件系統(tǒng),文件系統(tǒng)包含了預(yù)先定義的一組系統(tǒng)目錄樹(shù)以及文件,它們都保存到硬盤(pán)驅(qū)動(dòng)器或者其他媒介之中, Linux核將其掛載為根文件系統(tǒng)。當(dāng)Linux核完成所有部初始化工作并且掛載了根文件系統(tǒng)之后,默認(rèn)將啟動(dòng)名為 Init的應(yīng)用程序,這就意味著系統(tǒng)將運(yùn)行在用戶空間或者用戶空間上下文中。第二階段引導(dǎo)裝入程序的主要作用是充當(dāng)開(kāi)發(fā)板級(jí)的引導(dǎo)裝入程序和核之間的紐帶。核入口點(diǎn)head.o模塊需要針對(duì)核主體進(jìn)行體系結(jié)構(gòu)級(jí)或 CPU級(jí)的初始化。Linux核的所有啟動(dòng)任務(wù)都由核 C源程序main.c完成,通過(guò)初始化,核的第一個(gè)線程將掛載一個(gè)根文件系統(tǒng),同時(shí)會(huì)執(zhí)行用戶空間下的第一個(gè)應(yīng)用程序。引導(dǎo)裝入程序或第二階段引導(dǎo)裝入程序通過(guò)一系列被稱(chēng)為核命令行的參數(shù)實(shí)現(xiàn)對(duì) Linux的引導(dǎo),盡管在實(shí)際中并不是通過(guò) shell命令提示來(lái)調(diào)用核,但是引導(dǎo)裝入程序常常采用將參數(shù)傳遞給Linux核這種模式。許多Linux子系統(tǒng)的初始化代碼都可在 main.c中找到,一些子系統(tǒng)所采用的初始化機(jī)制與_setup宏非常類(lèi)似,簡(jiǎn)單地講,目標(biāo)代碼器會(huì)為不同的初始化程序創(chuàng)建函數(shù)指針列表,同時(shí)采用簡(jiǎn)單的循環(huán)機(jī)制依次執(zhí)行。在引導(dǎo)過(guò)程中運(yùn)行著兩個(gè)截然不同的線程:一個(gè)是 start_kernel();另一個(gè)就是init() 。選擇引導(dǎo)裝入程序在系統(tǒng)加電之后需要完成幾項(xiàng)比較重要的任務(wù),下面選項(xiàng)中錯(cuò)誤的是( D)A.初始化關(guān)鍵硬件組件B.初始系統(tǒng)化存C.分配系統(tǒng)資源 D. 將必要的啟動(dòng)信息傳遞到硬盤(pán)在Linux中,根據(jù)指定線程的運(yùn)行環(huán)境,我們可以把它分為兩個(gè)獨(dú)立的運(yùn)行上下文,當(dāng)線程完全運(yùn)行在核空間時(shí),我們稱(chēng)之為( A)。A.核上下文 B.用戶空間上下文C.進(jìn)程上下文D.特殊的上下文(B)對(duì)處理器和必要的存區(qū)域進(jìn)行初始化,解壓縮二進(jìn)制核映像并且在轉(zhuǎn)交對(duì)系統(tǒng)的控制權(quán)之前把它加載到系統(tǒng)存的合適位置。A.引導(dǎo)裝入程序B.第二階段引導(dǎo)裝入程序 C.操作系統(tǒng)D.Linux核第二階段引導(dǎo)裝入程序具有一些功能,下列選項(xiàng)中不屬于其功能的是( D)。A.處理器底層的初始化 B. 解壓縮和重定位代碼C.其他特定于處理器的初始化 D.加載操作系統(tǒng)在初始化任務(wù)中,head.o模塊所執(zhí)行的功能中不包括( D)。A.檢測(cè)處理器及整個(gè)體系結(jié)構(gòu)的合法性 B.創(chuàng)建初始化頁(yè)表目錄C.支持處理器的存管理單元 D. 錯(cuò)誤檢測(cè)但并不生成相應(yīng)報(bào)告在已經(jīng)創(chuàng)建了init() 線程并且對(duì)所有不同的初始化調(diào)用完成之后,核開(kāi)始執(zhí)行引導(dǎo)過(guò)程最后階段的容,這些容不包括(D)。A.釋放由初始化函數(shù)和數(shù)據(jù)所用的存資源 B.打開(kāi)系統(tǒng)的控制臺(tái)設(shè)備C.啟動(dòng)用戶空間下的第一個(gè)進(jìn)程 D. 解壓縮和重定位代碼Linux核的所有啟動(dòng)任務(wù)都由(A)完成,通過(guò)初始化,核的第一個(gè)線程將掛載一個(gè)根文件系統(tǒng),同時(shí)會(huì)執(zhí)行用戶空間下的第一個(gè)應(yīng)用程序。main.cB.start_kernel()C.init()D.initcall核命令行參數(shù)的形式不可以是( C)。單個(gè)單詞B.key=value1,value2,…復(fù)合形式C.字符串D.key=value(A) 是用戶空間中所有Linux進(jìn)程的父進(jìn)程init()B.start_kernel()C.idleD.initcall在本質(zhì)上,二進(jìn)制核映像 Image要依附于一個(gè)執(zhí)行底層硬件初始化任務(wù)的工具( B)。A.引導(dǎo)裝入程序 B.第二階段引導(dǎo)裝入程序C.Linux核D.BIOS判斷引導(dǎo)裝入程序在系統(tǒng)加電之后會(huì)加載操作系統(tǒng),并將系統(tǒng)控制權(quán)交給操作系統(tǒng)。 (T)在一套典型的嵌入式系統(tǒng)中,其核心是一個(gè) 32位的CISC(復(fù)雜指令集計(jì)算機(jī))。(F)在Linux啟動(dòng)運(yùn)行的最初階段,必須要做的一項(xiàng)工作,就是要配置好處理器的存管理單元并初始化與之配套的數(shù)據(jù)結(jié)構(gòu),以支持虛擬地址到物理地址的轉(zhuǎn)換。(T)當(dāng)用戶在Linux命令提示符下輸入ls,就產(chǎn)生一個(gè)進(jìn)程,核將為這個(gè)進(jìn)程分配存儲(chǔ)器資源,并且會(huì)分配一段虛擬地址空間。被分配的地址空間與核中的地址有固定的關(guān)系。(F)在系統(tǒng)加電后,嵌入式系統(tǒng)的引導(dǎo)裝入程序首先取得處理器的控制權(quán),在引導(dǎo)裝入程序執(zhí)行了一些基本的硬件初始化之后,控制權(quán)就交給Linux核。(T)體系結(jié)構(gòu)和引導(dǎo)裝入程序都必須配置合適的上下文并提供必要的工具才能加載和引導(dǎo)核。(F)引導(dǎo)裝入程序在有些特殊情況下會(huì)依賴(lài)核。(F)對(duì)于大多數(shù)體系結(jié)構(gòu)來(lái)說(shuō),對(duì)系統(tǒng)的控制權(quán)會(huì)由第二階段引導(dǎo)裝入程序直接傳遞給嚴(yán)格意義上的核,即傳遞給名為head.o的模塊。(T)核的head.o模塊最后會(huì)將系統(tǒng)控制權(quán)移交給核的主要啟動(dòng)文件。(T)init()在完成自身的任務(wù)之后最終成為idle進(jìn)程。(F)五.簡(jiǎn)答題簡(jiǎn)述引導(dǎo)裝入程序和第二階段引導(dǎo)裝入程序的區(qū)別。引導(dǎo)裝入程序和第二階段引導(dǎo)裝入程序的區(qū)別引導(dǎo)裝入程序在開(kāi)發(fā)板加電之后取得控制權(quán),而且它在任何情況下都不會(huì)依賴(lài)核;而第二階段引導(dǎo)裝入程序的主要作用是充當(dāng)開(kāi)發(fā)板級(jí)的引導(dǎo)裝入程序和核之間的紐帶。正是第二階段引導(dǎo)裝入程序?yàn)楹诉\(yùn)行提供了合適的上下文,同時(shí)也執(zhí)行了一些必要的操作,如解壓并且重新部署二進(jìn)制核映像。簡(jiǎn)述核初始化過(guò)程。核的初始化過(guò)程從start_kernel()函數(shù)開(kāi)始,直至第一個(gè)用戶進(jìn)程init結(jié)束:start_kernel()函數(shù):相當(dāng)于核整個(gè)初始化工作的 man函數(shù),完成核的大部分初始化工作;(2)reset_init()函數(shù):后續(xù)初始化,由start_kernel()函數(shù)調(diào)用;(3)kernel_init()函數(shù):完成設(shè)備驅(qū)動(dòng)程序的初始化,并調(diào)用init_post()函數(shù)啟動(dòng)用戶空間中的init進(jìn)程;(4)init_psot()函數(shù):?jiǎn)?dòng)用戶空間中的init進(jìn)程,init標(biāo)準(zhǔn)位置在/sbin/init,init進(jìn)程讀取/etc/inittab文件來(lái)觸發(fā)諸如接受用戶登錄,設(shè)置鍵盤(pán),網(wǎng)絡(luò)等這些進(jìn)程。引導(dǎo)裝入程序在系統(tǒng)加電之后需要完成哪些任務(wù)?初始化關(guān)鍵硬件組件,例如 SDRAM控制器,I/O控制器以及圖形控制器;出事系統(tǒng)化存,并且準(zhǔn)備將系統(tǒng)控制權(quán)移交給相應(yīng)的操作系統(tǒng);分配系統(tǒng)資源,例如存以及外設(shè)控制器的終端電路等;提供相應(yīng)的機(jī)制,用于定位和加載操作系統(tǒng)的映像;加載操作系統(tǒng),并將系統(tǒng)控制權(quán)交給操作系統(tǒng),將必要的啟動(dòng)信息,例如系統(tǒng)全部存塊的數(shù)量,尺寸,串行通信端口的速度以及其他底層硬件配置數(shù)據(jù)等,傳遞給操作系統(tǒng)。為什么調(diào)試者不能像調(diào)試普通代碼那樣來(lái)對(duì)核入口點(diǎn)(head.o)模塊的各個(gè)部分進(jìn)行調(diào)試?當(dāng)?shù)诙A段引導(dǎo)裝入程序?qū)⒖刂茩?quán)交給核的head.o模塊時(shí),處理器在過(guò)去稱(chēng)為實(shí)模式的情況下操作。事實(shí)上,邏輯地址包含在處理器的程序計(jì)數(shù)器(或與其相關(guān)的寄存器)中,該邏輯地址實(shí)際上是由處理器的存儲(chǔ)器地址總線引腳送出的實(shí)際物理地址。 處理器的寄存器和核的數(shù)據(jù)結(jié)構(gòu)很快就會(huì)初始化從而可以支持存的數(shù)據(jù)傳輸, 同時(shí),處理器的存管理單元會(huì)被打開(kāi),這將會(huì)突然導(dǎo)致處理器所識(shí)別的地址空間被用戶指定的虛擬地址列表所取代。 簡(jiǎn)單地講,一旦啟動(dòng)存管理單元的功能,那么實(shí)際的物理地址就會(huì)被邏輯地址所取代。簡(jiǎn)述核入口點(diǎn)(head.o)模塊訴執(zhí)行的功能。在低級(jí)別的初始化任務(wù)中,head.o模塊所執(zhí)行的功能如下所示:檢測(cè)處理器及整個(gè)體系結(jié)構(gòu)的合法性;創(chuàng)建初始化頁(yè)表目錄;支持處理器的存管理單元( MMU);進(jìn)行錯(cuò)誤檢測(cè)并且生成相應(yīng)報(bào)告;跳轉(zhuǎn)到嚴(yán)格意義上的核的起始處main.c。六.應(yīng)用題在嵌入式linux系統(tǒng)引導(dǎo)階段會(huì)在終端上打印如下信息:Kernelcommandline:console=ttyS0,1152000ip=bootproot/dev/nfs,試解釋以上打印出的信息。以上打印信息表示引導(dǎo)中的核在串行設(shè)備ttyS0(通常是第一個(gè)串口)上打開(kāi)一個(gè)控制臺(tái),通信波特率設(shè)定為115Kbit/s。此外,它還通過(guò)一個(gè)BOOTF服艮務(wù)器獲取自身的初始化 IP地址,并通過(guò)NFS協(xié)議掛在根文件系統(tǒng)。核初始化中對(duì)于核命令行處理,init.h下的_setup宏擴(kuò)展如下:staticchar__setup_str_console_setup[]__initdata="console=";staticstructobs_kernel_param__setup_console_setup\__attribute__((__section__(".init.setup")))={__setup_str_console_setup,console_setup,0};試分析該代碼。首先,編譯器會(huì)產(chǎn)生名為_(kāi)_setup_str_console_setup[]的初始化后字符數(shù)組,該數(shù)組包含console=字符串信息;其次,編譯器會(huì)產(chǎn)生一個(gè)包含三個(gè)成員的結(jié)構(gòu):指向核命令行字符串(在字符數(shù)組中聲明)的指針__setup_str_console_setup 、指向配置函數(shù)本身的指針console_setup和一個(gè)簡(jiǎn)單的標(biāo)識(shí)。這里的關(guān)鍵在于依附于結(jié)構(gòu)的段屬性, 該屬性會(huì)通知編譯器將該結(jié)構(gòu)送到 ELF目標(biāo)模塊名為.init.setup的特殊段中。在這個(gè)階段,所有由__setup宏定義的結(jié)構(gòu)一起被放置到這個(gè).init.setup段中,實(shí)際結(jié)果就是創(chuàng)建了一個(gè)包含這些結(jié)構(gòu)的數(shù)組。讀下列核程序externstructobs_kernel_param__setup_start[],__setup_end[];staticint__initobsolete_checksetup(char*line){structobs_kernel_param*p;p=__setup_start;do{intn=strlen(p->str);if(!strncmp(line,p->str,n)){if(p->early){/*Alreadydoneisparse_early_param?(Needsexactmatchonparampart)*/

if(line[n]=='\O'||line[n]=='=')return1; }elseif(!p->setup_func){printk(KERN_WARNING"Parameter %s isobsolete,%nored\n",p->str);return1;}elseif(p->setup_func(line+n))return1; }p++;}while(p<__setup_end);return0;}①解釋第一行extern語(yǔ)句的作用;②描述obsolete_checksetup 函數(shù)功能。③解釋函數(shù)形參line的作用;④說(shuō)明函數(shù)中兩個(gè)局部變量的含義。④ 解釋dowhile循環(huán)的作用。⑤畫(huà)出dowhile循環(huán)程序段的流程圖。若該函數(shù)的傳的字符串值為 line=”console=ttyS0,115200 ”,試分析該核命令行處理功能執(zhí)行的過(guò)程。該程序通過(guò)指針p對(duì)這個(gè)特殊的核命令行參數(shù)尋找匹配信息的過(guò)程,對(duì)整個(gè)結(jié)構(gòu)都進(jìn)行了掃描,若傳值如題設(shè)所說(shuō),該程序要為字符串信息console尋找匹配信息,在這個(gè)相關(guān)結(jié)構(gòu)中,函數(shù)返回一個(gè)指向console_setup() 函數(shù)的指針,它會(huì)以該參數(shù)(字符串ttyS0,115200)作為其唯一的參數(shù),這一處理過(guò)程會(huì)在核命令行處理完畢之前不停重復(fù)。1.試解釋以下合成核映像文件的結(jié)構(gòu)??蓡?dòng)內(nèi)核取像首先會(huì)先編譯二進(jìn)制ELF格式的(嚴(yán)格意義上的核),vmlinux核映像在這里被鏈head.o、head.o、piggy.o以及和特疋體系結(jié)構(gòu)有關(guān)的head-xscale.o。(2) 用編譯好的vmlinux文件生成Image目標(biāo)文件。Image文件基本上是去除了多余段(標(biāo)記和注釋?zhuān)┑膙mlinuxELF文件,同時(shí)也去掉了可能已經(jīng)存在的調(diào)試符號(hào)。(3) 采用命令壓縮Image文件(二進(jìn)制核映像文件),執(zhí)行該命令會(huì)生成一個(gè)名為 piggy.gz的壓縮文件,它只是二進(jìn)制核文件 Image的壓縮版本。(4) 將一個(gè)名為piggy.S的匯編文件匯編,該文件包括對(duì)壓縮文件 piggy.gz的說(shuō)明,最終生成可啟動(dòng)核映像,其中 piggy.o為二進(jìn)制核映像, msic.o、big_endian.o 、head_xscale.o、head.o為第二階段引導(dǎo)裝入程序,該第二階段引導(dǎo)裝入程序會(huì)對(duì)處理器和必要的存區(qū)域進(jìn)行初始化,解壓縮二進(jìn)制核映像并且在轉(zhuǎn)交對(duì)系統(tǒng)的控制權(quán)之前把它加載到系統(tǒng)存的合適位置。第六章嵌入式交叉編譯環(huán)境的搭建填空交叉編譯是指在某個(gè)主機(jī)平臺(tái)上 (比如PC上)用交叉編譯器編譯出可在其他平臺(tái)上 (比如ARM上)運(yùn)行的代碼的過(guò)程。宿主機(jī)(Host)是一臺(tái)通用計(jì)算機(jī),它通過(guò)串口或者以太網(wǎng)接口與目標(biāo)機(jī)通信。交叉編譯環(huán)境的搭建中 minicom是用于Linux下的串口通信工具,DNV是用于串口下載文件鏡像的工具。核映像分為壓縮的核映像和未壓縮的核映像。 其中,壓縮的核映像通常名為 zlmage,而未壓縮的核映像通常名為 vmlinux。N竺服務(wù)就是將宿主機(jī)的一個(gè)目錄通過(guò)網(wǎng)絡(luò)可以被掛載到其他計(jì)算機(jī)上,并且作為其他計(jì)算機(jī)的一個(gè)目錄。 —Cramfs文件系統(tǒng)是一種經(jīng)過(guò)壓縮的、極為簡(jiǎn)單的只讀文件系統(tǒng),因此非常適合嵌入式系 統(tǒng)。被稱(chēng)為嵌入式 Linux系統(tǒng)中的“瑞士軍刀”的構(gòu)造文件系統(tǒng)最常用的軟件工具包是Busybox,它將許多常用的Linux命令和工具結(jié)合到了一個(gè)單獨(dú)的可執(zhí)行程序中。TFTP協(xié)議是簡(jiǎn)單的文件傳輸協(xié)議,適合目標(biāo)板 Bootloader的使用。Bootloader就是在操作系統(tǒng)核運(yùn)行之前運(yùn)行的一段程序, 它類(lèi)似于PC機(jī)中的BIOS程序。Linux核代碼中init/main.c 文件是整個(gè)Linux核的中央聯(lián)結(jié)點(diǎn)。每種體系結(jié)構(gòu)都會(huì)執(zhí)行一些底層設(shè)置函數(shù),然后執(zhí)行名為startkernel 的函數(shù)來(lái)啟動(dòng)Linux核。選擇TOC\o"1-5"\h\z嵌入式Linux下常用的文件系統(tǒng)不包括以下哪一項(xiàng)( A)nfsB.romfsC.yaffsD.jffs被稱(chēng)為嵌入式Linux系統(tǒng)中的“瑞士軍刀”的構(gòu)造文件系統(tǒng)最常用軟件工具包是( D)A.GDBB.SHELLC.GNUD.BusyBox用GCC編譯一個(gè)名為“HelloWorld.c”的C程序文件,編譯后執(zhí)行執(zhí)行文件為 “Hello”,則相應(yīng)的編譯命令是以下哪一項(xiàng)( B)A.gcc-iHelloWorld.cHelloB.gcc -oHellohelloWorld.cC.gcc-oHelloWorld.cHelloD.gcc -iHelloHelloWorld.c對(duì)Linux核選用默認(rèn)的配置方式進(jìn)行編譯,需要執(zhí)行( D)A.makeconfigB.makemenuconfigC.makeoldconfigD.makedefcofing將本機(jī)/home/myworkspace下的NFS文件系統(tǒng)掛載到/mnt/remote下的命令為以下哪一項(xiàng)(B)mount —tnfs/mnt/remote/home/myworkspacemount —fnfs/home/myworkspace/mnt/remoteumount—tnfs/mnt/remote/home/myworkspaceumount—fnfs/home/myworkspace/mnt/remote通過(guò)tftp加載地址為0x200000上的鏡像文件uImage,需要執(zhí)行(A)tftpboot200000uImagetftpbootuImage200000tifpboot--adr200000uImagetftpboot--adruImage200000在使用bushbox工具時(shí)Linux啟動(dòng)之后第一個(gè)被訪問(wèn)的腳本文件是( B)A.init.dB.inittabC.fstabD.boottab下列那一項(xiàng)不屬于Linux核要掛接NFS根文件系統(tǒng)所必須具備的條件( D)A.以太網(wǎng)接口驅(qū)動(dòng)正常B.配置核啟動(dòng)命令行參數(shù)配置核掛接NFS根文件系統(tǒng)D.配置Bootloader下列哪一項(xiàng)不屬于U-Boot的功能(C)A.系統(tǒng)引導(dǎo)B.上電自檢功能C.鏡像自檢D.設(shè)備驅(qū)動(dòng)下列那一項(xiàng)不屬于U-Boot移植的步驟(A)A.動(dòng)態(tài)glibc庫(kù)B.建立自己開(kāi)發(fā)版類(lèi)型C.修改中斷靜止部分D.修改存配置判斷在嵌入式中,由于資源受限的原因, 它的文件系統(tǒng)和PC機(jī)Linux的文件系統(tǒng)有較大的區(qū)別,總體架構(gòu)是也一樣的。(F)NFS文件系統(tǒng)的使用分為服務(wù)端和客戶端,其中服務(wù)端提供要共享的文件同時(shí)通過(guò)掛載(“mount”)這一動(dòng)作來(lái)實(shí)現(xiàn)對(duì)共享文件的訪問(wèn)操作。 (F)glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務(wù)外,它本身也提供了許多其它一些必功能服務(wù)的實(shí)現(xiàn)。(T)交叉平臺(tái)使用的工具鏈必須經(jīng)過(guò)正確的配置,以便與主機(jī)系統(tǒng)的目標(biāo)Linux環(huán)境相匹配。(T)TFTP是用來(lái)下載遠(yuǎn)程文件的最簡(jiǎn)單網(wǎng)絡(luò)協(xié)議,它是基于 TCP協(xié)議而實(shí)現(xiàn)的。(F)在編譯linux2.6版本的核通常直接輸入“makedep”即可。(F)Linux核完成初始化之后,必須掛載一個(gè)根文件系統(tǒng),并執(zhí)行由開(kāi)發(fā)人員定義的一系列初始化例程。(T)Linux 核可以標(biāo)準(zhǔn)C函數(shù)庫(kù),例如核代碼可以方便調(diào)用 printf()來(lái)打印系統(tǒng)輸出。(F)GNU的C編譯器支持聯(lián)函數(shù),因此可以將聯(lián)函數(shù)直接編譯到核當(dāng)中。 (T)IP地址和其他網(wǎng)絡(luò)相BOOTP和TFTPIP地址和其他網(wǎng)絡(luò)相關(guān)配置信息的一種協(xié)議。(F)五.簡(jiǎn)答題構(gòu)建根文件系統(tǒng)基本步驟。構(gòu)建etc目錄;

(2) 構(gòu)建dev目錄;(3) 構(gòu)建其他目錄;如:homeprocvar(4) 制作/燒錄文件系統(tǒng)鏡像。簡(jiǎn)述U-Boot的特點(diǎn)。開(kāi)放源碼,支持多種嵌入式操作系統(tǒng)核,支持多個(gè)處理器系列,較高的可靠性和穩(wěn)定性,高度靈活的功能設(shè)置,豐富的設(shè)備驅(qū)動(dòng)源碼,較為豐富的開(kāi)發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持。對(duì)Linux下NFS服務(wù)器進(jìn)行的配置,包括服務(wù)器端和客戶端配置。 (假設(shè)服務(wù)器端)Server端:/etc/exports 格式例:共享/share目錄給192.168.0.x的用戶/share/24(rw)啟動(dòng)portmap服務(wù):serviceportmapstart[restart]啟動(dòng)NFS服務(wù):servicenfsstart[restart]Client端:socket_type=dgram/*使用數(shù)據(jù)報(bào)套接字socket_type=dgram/*使用數(shù)據(jù)報(bào)套接字*/protocol=udp/*wait=yes/*user=root/*protocol=udp/*wait=yes/*user=root/*使用UDP協(xié)議*/允許等待*/用戶*/server=server=/usr/sbin/in.tftpd/*server_args=-s/tftpboot/*disable=no/*服務(wù)程序*/服務(wù)器端的根目錄*/使能*/1) 啟動(dòng)portmap服務(wù):serviceportmapstart[restart]2)掛載服務(wù)器端的共享目錄 (假設(shè)服務(wù)器端) :mount-tnfs:/share/mnt/localshare4.Linux在啟動(dòng)過(guò)程中可以使用哪些方法初始化以太網(wǎng)/IP接口。方法一:在Linux核命令行或默認(rèn)配置里面直接指定固定的以太網(wǎng)接口參數(shù)。方法二:配置核,以便啟動(dòng)時(shí)自動(dòng)檢測(cè)網(wǎng)絡(luò)設(shè)置。5.請(qǐng)簡(jiǎn)述Linux下tftp服務(wù)的配置。1.首先修改tftp的配置文件,配置完后保存。[rootlocalhosttftpboot]#vim/etc/xinetd.d/tftpservicetftpper_source=11cps=1002flags=IPv4}啟用tftp服務(wù)。[rootlocalhosttftpboot]#servicexinetdrestart3.查看tftp服務(wù)是否已經(jīng)開(kāi)啟。rootlocalhosttftpboot]#netstat —au|greptftp試簡(jiǎn)述核啟動(dòng)init進(jìn)程的過(guò)程。init進(jìn)程位于init/main.c,核啟動(dòng)init進(jìn)程的過(guò)程如下:(1)打開(kāi)標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯(cuò)誤設(shè)備。(2)如果ramdisk_execute_command變量指定了要運(yùn)行的程序,則啟動(dòng)它。(3)如果execute_command變量指定了要運(yùn)行的程序,啟動(dòng)它。(4)依次嘗試執(zhí)行/sbin/init,/etc/init,/bin/init,/bin/sh。請(qǐng)簡(jiǎn)述Linux核編譯的步驟。核配置建立依賴(lài)關(guān)系建立核六.應(yīng)用題以下是一個(gè)簡(jiǎn)單的rcSBusyBox啟動(dòng)腳本,試分析腳本執(zhí)行過(guò)程,注釋每一行程序,在空行寫(xiě)上其后緊跟著程序段的總體功能。#!/bin/shecho"Mountingproc"mount-tproc/proc/proc在其自身保留的/proc掛載點(diǎn)處掛載/proc文件,/proc文件系統(tǒng)可以提供需要實(shí)用程序的相關(guān)信息。echo"Startingsystemloggers"syslogdklogd為發(fā)現(xiàn)系統(tǒng)的啟動(dòng)問(wèn)題,盡早啟動(dòng)系統(tǒng)日志。echo"Configuringloopbackinterface"ifconfiglo配置回環(huán)網(wǎng)絡(luò)接口echo"Staringinetd"xinetd啟動(dòng)系統(tǒng)因特網(wǎng)超級(jí)守護(hù)進(jìn)程,用于監(jiān)聽(tīng)任何經(jīng)過(guò)配置的網(wǎng)絡(luò)接口設(shè)備的網(wǎng)絡(luò)請(qǐng)求。試安裝配置busybox并創(chuàng)建一個(gè)簡(jiǎn)單的文件系統(tǒng)。(安裝包為busybox-1.00.tar.bz2)安裝配置busybox:tarjxvfbusybox-1.00.tar.bz2makedefconfig/*首先進(jìn)行默認(rèn)配置*/makemenuconfigmakemakeinstallPREFIX=/home/david/fs2410/cramfs創(chuàng)建文件系統(tǒng)mkdirmntrootvartmpprocbootetclib 創(chuàng)建系統(tǒng)目錄mkdir/var/{lock,log,mail,run,spool}創(chuàng)建/etc/inittab 和/etc/fstab文件并放在etc目錄下。試用minicom在開(kāi)發(fā)板和主機(jī)之間傳輸文件。①寫(xiě)出minicom的安裝過(guò)程;②寫(xiě)出minicom的配置過(guò)程,③以/home/test/vmlinuz為例,具體傳輸命令。1)下載并安裝lrzsz傳輸工具配置minincom打開(kāi)minicom,配置環(huán)境。配置文件所在目錄Ctrl+ao選擇”Filenamesandpaths”選項(xiàng)進(jìn)入子菜單A-Downloaddirectory:/tmp配置下載文件的存放位置B-Uploaddirectory:/home/liming/tmpTrans配置從此目錄讀取上傳文件a)首先minicom中,運(yùn)行開(kāi)發(fā)板子上的rz,準(zhǔn)備接受數(shù)據(jù):#lrz在minicom中,輸入[Ctrl]aS這里的Send表示從pc發(fā)送到開(kāi)發(fā)板子,然后進(jìn)入選擇文件的目錄,選擇 PC機(jī)器上面準(zhǔn)備傳輸?shù)奈募?,然后確認(rèn)即可。試配置S3C2410的開(kāi)發(fā)板的U-boot,并分析U-boot配置過(guò)程。配置S3C2410的開(kāi)發(fā)板的U-boot#makes3c2410_config#make即可生成U-Boot.binmakeS3C2410_config實(shí)際上是執(zhí)行如下命令:./configsmdk2410armarm920tamdk2410NULLs3c24x0a)確定開(kāi)發(fā)板名稱(chēng)BOARD_NAME=smdk2410b創(chuàng)建到平臺(tái)/開(kāi)發(fā)板相關(guān)的頭文件創(chuàng)建頂層Makefile包含的文件include/config.mk創(chuàng)建開(kāi)發(fā)板相關(guān)的頭文件 include/config.h第七章設(shè)備驅(qū)動(dòng)和模塊填空Linux系統(tǒng)中常見(jiàn)的驅(qū)動(dòng)程序是作為核模塊動(dòng)態(tài)加載的, 而Linux最基礎(chǔ)的驅(qū)動(dòng),如CPUPCI總線等驅(qū)動(dòng)程序則直接編譯在核文件中。Linux命令I(lǐng)nsmod和modprobe用于加載當(dāng)前模塊。Linux系統(tǒng)的設(shè)備分為三類(lèi):字符設(shè)備 、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。copy_to_user()或copy_from_user()等函數(shù)是用來(lái)實(shí)現(xiàn)用戶空間和核空間的數(shù)據(jù)交換的。/proc 文件系統(tǒng)是一個(gè)偽文件系統(tǒng),存在于存之中而不是在硬盤(pán)上,它是一種核和核模塊用來(lái)向進(jìn)程發(fā)送信息的機(jī)制。使用設(shè)備驅(qū)動(dòng)程序有兩個(gè)重要的原因:一是避免用戶在核空間編寫(xiě)代碼,二是為與硬件 _或核級(jí)設(shè)備通信提供統(tǒng)一的方法。系統(tǒng)調(diào)用通過(guò)設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。Linux抽象了對(duì)硬件的處理,所有的硬件設(shè)備都可以作為 普通文件一樣來(lái)看待,字符設(shè)備和塊設(shè)備是通過(guò)文件節(jié)點(diǎn)訪問(wèn)的。公共核符號(hào)表中包含了所有的全局核項(xiàng)(即函數(shù)和變量)的地址,這是實(shí)現(xiàn)模塊化驅(qū) 程序所必需的。Linux運(yùn)轉(zhuǎn)在兩種模式下,一種是用戶態(tài),另一種是核態(tài)。 選擇

下列關(guān)于字符設(shè)備說(shuō)法不正確的是(C)A.以字節(jié)為單位逐個(gè)進(jìn)行I/O操作字符設(shè)備中的緩存是可有可無(wú)的支持隨機(jī)訪問(wèn)字符設(shè)備可以通過(guò)設(shè)備文件節(jié)點(diǎn)訪問(wèn)如果要從系統(tǒng)中刪除一個(gè)設(shè)備,則要調(diào)用( A)函數(shù)。A.cdev_del()B.cdev_add()C.cdev_alloc()D.cdev_init()釋放設(shè)備跟關(guān)閉設(shè)備的區(qū)別是(B)釋放設(shè)備時(shí),其他進(jìn)程必須重新打開(kāi)此關(guān)閉設(shè)備時(shí),其他進(jìn)程必須重新打開(kāi)此釋放設(shè)備時(shí),其他進(jìn)程必須重新打開(kāi)此關(guān)閉設(shè)備時(shí),其他進(jìn)程必須重新打開(kāi)此釋放設(shè)備時(shí),其他進(jìn)程必須重新打開(kāi)此釋放設(shè)備時(shí),其他進(jìn)程還能繼續(xù)使用該設(shè)備;設(shè)備才能使用它。關(guān)閉設(shè)備時(shí),其他進(jìn)程還能暫停使用該設(shè)備;設(shè)備才能使用它。新打開(kāi)此設(shè)備才能使用它。獲取存函數(shù)malloc()和kmalloc(),下面說(shuō)確的是(B)kmalloc()函數(shù)返回的是線性虛擬地址,而malloc()等返回的是物理地址。kmalloc()函數(shù)返回的是物理地址,而malloc()等返回的是線性虛擬地址。kmalloc()和malloc()函數(shù)返回的都是物理地址。kmalloc()和malloc()函數(shù)返回的都是線性虛擬地址。如果設(shè)備驅(qū)動(dòng)程序有多個(gè)程序文件,分別編譯成.o文件后,需成一個(gè)驅(qū)動(dòng)模塊,則以下命令正確的是(A)ld-rfile1.ofile2.o-omodulenameld-ofile1.ofile2.o-rmodulenameld-rfile1.ofile2.omodulenameld-ofile1.ofile2.omodulename不需要編譯核的情況是( D)A.刪除系統(tǒng)不用的設(shè)備驅(qū)動(dòng)程序時(shí)B.升級(jí)核時(shí)C.添加新硬件時(shí)D.將網(wǎng)卡激活以下(D)設(shè)備是字符設(shè)備。A.hdcB.fd0C.hda1D.tty1以下是運(yùn)行$ls-l/dev后的查詢(xún)結(jié)果crw-rw 1rootuucp4,6408-3022:58ttyS0則此設(shè)備的設(shè)備號(hào)是多少(C)A.1B.4C.64D.0以下哪一項(xiàng)是是硬盤(pán)設(shè)備文件( B)A.fd0B.hdaC.eth1D.ht0下面關(guān)于inode節(jié)點(diǎn)描述錯(cuò)誤的是(A)inode節(jié)點(diǎn)和文件是一一對(duì)應(yīng)的inode節(jié)點(diǎn)能描述文件占用的塊數(shù)inode節(jié)點(diǎn)描述了文件大小和指向數(shù)據(jù)塊的指針通過(guò)inode節(jié)點(diǎn)實(shí)現(xiàn)文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的轉(zhuǎn)換判斷核空間地址和用戶空間地址是有很大區(qū)別的,其中一個(gè)區(qū)別是用戶空間的存是可以被換出的,因此可能會(huì)出現(xiàn)頁(yè)面失效等情況。(T)與字符設(shè)備驅(qū)動(dòng)程序的編寫(xiě)流程不同的是塊設(shè)備驅(qū)動(dòng)程序的編寫(xiě)流程包括了注冊(cè)和使用兩部分。(F)對(duì)塊設(shè)備的讀寫(xiě)請(qǐng)求都是以同步方式發(fā)送到設(shè)備相關(guān)的request隊(duì)列之中。(F)在驅(qū)動(dòng)程序中不能使用malloc()函數(shù)。(T)block_device_operations結(jié)構(gòu)塊設(shè)備提供read()、write()等函數(shù)接口對(duì)塊設(shè)備進(jìn)行讀寫(xiě)操作。(F)中斷實(shí)現(xiàn)了硬件設(shè)備按需獲得處理器關(guān)注的機(jī)制,與查詢(xún)方式相比可以大大節(jié)省 CPU資源的開(kāi)銷(xiāo)。(T)中斷機(jī)制提供了硬件和軟件之間異步傳遞信息的方式。(T)大多數(shù)的Linux操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序都可以在需要時(shí)裝載進(jìn)核,在不需要時(shí)從核中卸載。(T)Linux用dev_t類(lèi)型來(lái)描述設(shè)備號(hào),dev_t是32位數(shù)值類(lèi)型,其中高12位表示次設(shè)備號(hào),低20位表示主設(shè)備號(hào)。(F)Linux中的中斷處理程序通常會(huì)標(biāo)記為static,它可以被別的文件中的代碼直接調(diào)用。(F五.簡(jiǎn)答題試簡(jiǎn)述通常情況下打開(kāi)設(shè)備過(guò)程中open函數(shù)接口中要完成的工作。遞增計(jì)數(shù)器,檢查錯(cuò)誤;如果未初始化,則進(jìn)行初始化;識(shí)別次設(shè)備號(hào),如果必要,更新f_op指針;分配并填寫(xiě)被置于filp->private_data的數(shù)據(jù)結(jié)構(gòu)。試簡(jiǎn)述釋放設(shè)備的步驟。釋放設(shè)備時(shí)要完成的工作如下:⑴遞減計(jì)數(shù)器MOD_DEC_USE_CO(最新版本已經(jīng)不再使用);釋放打開(kāi)設(shè)備時(shí)系統(tǒng)所分配的存空間(包括filp->private_data指向的存空間);在最后一次釋放設(shè)備操作時(shí)關(guān)閉設(shè)備。試簡(jiǎn)述設(shè)備驅(qū)動(dòng)程序工作原理。設(shè)備驅(qū)動(dòng)模塊在調(diào)用insmod命令時(shí)被加載,此時(shí)的入口點(diǎn)是init_module()函數(shù),通常在該函數(shù)中完成設(shè)備的注冊(cè)。同樣,模塊在調(diào)用rmmod命令時(shí)被卸載,此時(shí)的入口點(diǎn)是cleanup_module()函數(shù),在該函數(shù)中完成設(shè)備的卸載。在設(shè)備完成注冊(cè)加載之后,用戶的應(yīng)用程序就可以對(duì)該設(shè)備進(jìn)行一定的操作,如open()、read()、write()等,而驅(qū)動(dòng)程序就是用于實(shí)現(xiàn)這些操作,在用戶應(yīng)用程序調(diào)用相應(yīng)入口函數(shù)時(shí)執(zhí)行相關(guān)的操作。請(qǐng)簡(jiǎn)述Linux系統(tǒng)的設(shè)備分類(lèi)。1、字符設(shè)備通常像普通文件或字節(jié)流一樣,以字節(jié)為單位順序讀寫(xiě)的設(shè)備。字符設(shè)備可以通過(guò)設(shè)備文件節(jié)點(diǎn)訪問(wèn),大多數(shù)字符設(shè)備只能提供順序訪問(wèn)。2、 塊設(shè)備通常指一些需要以塊為單位隨機(jī)讀寫(xiě)的設(shè)備。塊設(shè)備也是通過(guò)文件節(jié)點(diǎn)來(lái)訪問(wèn),它不僅可以提供隨機(jī)訪問(wèn),而且可以容納文件系統(tǒng)。3、 網(wǎng)絡(luò)設(shè)備通常是指通過(guò)網(wǎng)絡(luò)能夠與其他主機(jī)進(jìn)行數(shù)據(jù)通信的設(shè)備。請(qǐng)列舉設(shè)備驅(qū)動(dòng)程序主要組成。1、早期版本的字符設(shè)備注冊(cè);2、 設(shè)備號(hào)相關(guān)函數(shù);3、 最新版本的字符設(shè)備注冊(cè);4、 打開(kāi)設(shè)備;5、釋放設(shè)備;6、讀寫(xiě)設(shè)備;7、 Ioctl;8、獲取存;9、打印信息。六.應(yīng)用題試編寫(xiě)一個(gè)helloworld可加載設(shè)備驅(qū)動(dòng)程序。解:程序如下hellowolrd.c#include<linux/module.h>staticint__inithello_init(void){printk("HelloworldExampleInit\n");return0;}staticint__exithello_exit(void){printk("HelloWorldExampleExit\n");}module_init(hello_init);module_exit(hello_exit);讀下面程序#include<linux/module.h>staticintdebug_enable=0;module_param(debug_enable,int,0);MODULE_PARM_DESC(debug_enable,"Enablemoduledebugmode.");staticint__inithello_init(void){printf("HelloExampleInit-debugmodeis%s\n",debug_enable?"enable":"disabled");return0;}staticint__exithello_exit(void){printf("HelloExampleExit\n");}module_i

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論