嵌入式-帶答案_第1頁
嵌入式-帶答案_第2頁
嵌入式-帶答案_第3頁
嵌入式-帶答案_第4頁
嵌入式-帶答案_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

嵌入式操作系統(tǒng)考試要求的內(nèi)容前3章(25%)1)嵌入式系統(tǒng)的特點(diǎn):開發(fā)方式、內(nèi)核大小、專用性、編譯方式;2)從開發(fā)環(huán)境與運(yùn)行環(huán)境來看,嵌入式系統(tǒng)與一般PC的特點(diǎn)。什么是交叉編譯在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。操作系統(tǒng)的兩大功能和四項(xiàng)基本任務(wù)使計(jì)算機(jī)硬件便于使用;高效組織和正確地使用計(jì)算機(jī)的資源。進(jìn)程管理、進(jìn)程間通信與同步、內(nèi)存管理和I/O資源管理。ARM是什么?是一種嵌入式芯片的型號(hào)嗎?是AdvanceRISCMachine(ARM)公司提出的一種嵌入式芯片的內(nèi)核,ARM公司不生產(chǎn)芯片而只是轉(zhuǎn)讓知識(shí)產(chǎn)權(quán)另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計(jì)技術(shù):軟件工具,評(píng)估板,調(diào)試工具,應(yīng)用軟件,總線架構(gòu),外圍設(shè)備單元,等等嵌入式處理器的分類嵌入式處理器可分為低端的嵌入式微控制器(MicroControllerUnit,MCU)、常用于計(jì)算機(jī)通信領(lǐng)域的嵌入式DSP處理器(EmbeddedDigitalSignalProcessor,EDSP)、中高端的嵌入式微處理器(EmbeddedMicroProcessorUnit,EMPU)和高度集成的嵌入式片上系統(tǒng)(SystemOnChip,SOC)。談一談嵌入式實(shí)時(shí)系統(tǒng)從實(shí)時(shí)性的分類。硬實(shí)時(shí)和軟實(shí)時(shí)的區(qū)別就在于對(duì)外界的事件做出反應(yīng)的時(shí)間。硬實(shí)時(shí)系統(tǒng):必須對(duì)事件做出及時(shí)的反應(yīng),絕對(duì)不能錯(cuò)過事件處理的時(shí)限。在硬實(shí)時(shí)系統(tǒng)中如果出現(xiàn)了這樣的情況就意味著巨大的損失和災(zāi)難。比如說航天飛機(jī)的控制系統(tǒng),如果出現(xiàn)故障,后果不堪想象。軟實(shí)時(shí)系統(tǒng):在系統(tǒng)負(fù)荷較重的時(shí)候,允許發(fā)生錯(cuò)過時(shí)限的情況而且不會(huì)造成太大的危害。比如液晶屏刷新允許有短暫的延遲。目前比較流行的嵌入式操作系統(tǒng)有些(需例舉3種)VxWorks,QNX,PalmOS,WindowsCE,LynxOS,嵌入式Linux,uC/OS'CISC和RISCCISC:ComplexInstructionSetComputer);RISC:reducedinstructionsetcomputer從代碼密度、尋址方式的多少、指令長度、指令數(shù)量、專用性、平均執(zhí)行周期(CPI)、是否采用Load/Store結(jié)構(gòu),算術(shù)和邏輯操作僅針對(duì)寄存器?Load/Store結(jié)構(gòu)流水線技術(shù)通過指令的并行運(yùn)行提高運(yùn)行速度,ARM7三級(jí)流水(fetch,decode,execute),ARM9五級(jí)流水(memory,write)ARM處理器的各種基本工作模式用戶模式、快速中斷模式、外部中斷模式、管理模式、中止模式、未定義指令中止模式和系統(tǒng)模式。12?馮?諾依曼體系結(jié)構(gòu)和哈佛體系結(jié)構(gòu)前者操作數(shù)和指令分時(shí)共用同一組總線,后者操作數(shù)和指令所采用的總線不同因而取指和取操作數(shù)可以同時(shí)進(jìn)行,從而提高了運(yùn)行速度13,高速緩存高速緩存是一種小型、快速的存儲(chǔ)器,它保存部分主存內(nèi)容的拷貝。14.14.FLASH(閃存):是EEPROM的變種,EEPROM與閃存不同的是,它能在字節(jié)水平上進(jìn)行刪除和重寫而不是整個(gè)芯片擦寫,這樣閃存就比EEPROM的更新諫度快。中于其斷電時(shí)仍能保存數(shù)據(jù),閃存通常被用來保存設(shè)置信息,如在電腦的BIOS(基本輸入輸出程序)、PDA(個(gè)人數(shù)字助理)、數(shù)碼相機(jī)中保存資料等。NandFlash與NorFlash相比較:編程、擦除、讀的速度以及可靠性15.Nandflash/NorFlash 寫快/慢、簡單/擦除前需要寫0、讀稍慢/稍快、不可靠/可15.靠16.從編程的角度看,ARM微處理器的工作狀態(tài)有哪些?16.2種且可在2種狀態(tài)之間切換:第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。17.ARM體系結(jié)構(gòu)兩種存儲(chǔ)字?jǐn)?shù)據(jù)方法一一大端格式和小段格式17.大端:字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。小端:與大端存儲(chǔ)格式相反,在小端存儲(chǔ)格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。18.ARM寄存器組織、分類,Thum狀態(tài)和ARM狀態(tài)下寄存器組織上的異同通用寄存器包括R0?R15,可以分為三類:不分組寄存器R0?R7;分組寄存器R8?R14;程序計(jì)數(shù)器PC(R15)。Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個(gè)子集Thumb狀態(tài)下和ARM狀態(tài)下的R0?R7是相同的。Thumb狀態(tài)下和ARM狀態(tài)下的CPSR和所有的SPSR是相同的。Thumb狀態(tài)下的SP映射到ARM狀態(tài)下的R13。Thumb狀態(tài)下的LR映射到ARM狀態(tài)下的R14。Thumb狀態(tài)下的程序計(jì)數(shù)器PC(R15)映射到ARM狀態(tài)下的PC(R15)。19,什么是異常向量異常是由內(nèi)部或外部源產(chǎn)生并引起處理器處理一個(gè)事件,它會(huì)導(dǎo)致正常的程序執(zhí)行流程發(fā)生暫時(shí)的停止,例如外部中斷或試圖執(zhí)行未定義指令都會(huì)引起異常。異常出現(xiàn)后強(qiáng)制從異常類型對(duì)應(yīng)的固定存貯地址開始執(zhí)行程序,這些固定的地址稱為異常向量。第4章

這一部分不作要求第5章(40%)如何從鍵盤向main函數(shù)傳入?yún)?shù)用scanf函數(shù)main(){inta[10];inti;for(i=0;i<10;i++)scanf("%d",&a[i]);printfCWfor(i=0;i<10;i++)printf("%d”,a[i]);}帶參數(shù)main函數(shù)#include<stdio.h>main(argc,argv)intargc;char*argv[];{while(argc>1){++argv;printf("%s\nn,*argv);--argc;}}增強(qiáng)程序可讀性的寄存器定義格式#define寄存器名(*(volatileunsigned*)寄存器在存儲(chǔ)空間中的位置)例如#define rUCON0(*(volatileunsigned*) 0x50000004)關(guān)=!==A=_1110000000000000=0x0eh<12B=0000001100000000=0x03h<8C=0000000010010000=0x09h<4D=0000000000000110=0x06h<05.采用位掩碼對(duì)寄存器的某個(gè)功能區(qū)位進(jìn)行設(shè)置fun3的位掩碼:FUN3_MASK=0xf<4C’=0x0B<4R&=~FUN3_MASKRI=C’6,如何對(duì)I/O口的功能進(jìn)行配置并進(jìn)行相關(guān)操作,讓輸出端口電平變化(配置為輸出,然后向端口數(shù)據(jù)寄存器位寫入相應(yīng)電平),要求能進(jìn)行編程通過對(duì)G口8、9腳的操作實(shí)現(xiàn)LED輪流閃爍#definerGPGCON(*(volatileunsigned*)0x56000060)//PORTG控制寄存器#definerGPGDAT(*(volatileunsigned*)0x56000064)//PORTG數(shù)據(jù)寄存器voidmain(void)(Intflag,I;Target_Init()for(;;){If(flag==0){for(i=0;i<1000000;i++);//延時(shí)rGPGCON=rGPGCON&0xfff0ffff|0x00050000〃配置8、9腳為輸出rGPGDAT=rGPGDAT&0xeff|0x200;//8腳低電平,9腳高電平for(i=0;i<1000000;i++);//延時(shí)Flag=1;}Else{for(i=0;i<1000000;i++);//延時(shí)rGPGCON=rGPGCON&0xfff0ffff|0x00050000//配置8、9腳為輸出rGPGDAT=rGPGDAT&0xdff|0x100;//8腳高電平,9腳低電平for(i=0;i<1000000;i++);//延時(shí)

Flag=0;}_CPU與外設(shè)傳輸數(shù)據(jù)的方式有哪幾類查詢方式、中斷方式、DMA。DMA不占用cpu,但占用系統(tǒng)總線。中斷部分應(yīng)掌握如下內(nèi)容:1)中斷過程、與中斷相關(guān)的寄存器的作用、中斷掛起寄存器和中斷源掛起寄存器的區(qū)別、與中斷屏蔽有關(guān)的寄存器(中斷屏蔽寄存器、子中斷屏蔽寄存器以及CPSR)中斷過程保存現(xiàn)場:PC—LR,CPSR—SPSR根據(jù)設(shè)置的中斷模式選擇IRQ或FIQ從中斷向量處獲取中斷服務(wù)程序的地址根據(jù)優(yōu)先級(jí)和中斷標(biāo)志識(shí)別是哪一個(gè)中斷發(fā)生,并進(jìn)行相應(yīng)處理中斷返回,恢復(fù)現(xiàn)場:PC—LR,CPSRfSPSR中斷屏蔽寄存器:為了能接受中斷請(qǐng)求必須將F或I位設(shè)置為0,同時(shí)將中斷屏蔽寄存器的相應(yīng)位設(shè)置為0。中斷掛起寄存器:共32位,每一位與一中斷源相對(duì)應(yīng),只有一位能為1,指示相應(yīng)中斷掛起。各掛起的中斷源由各中斷仲裁器確定那個(gè)中斷掛起。(中斷掛起的含義是:相應(yīng)的中斷是下一個(gè)待處理的中斷在中斷服務(wù)程序中需要將相應(yīng)中斷清除)中斷源掛起寄存器:共32位,當(dāng)某一個(gè)中斷源產(chǎn)生中斷請(qǐng)求,相應(yīng)位置1,在中斷服務(wù)程序中必須清除中斷模式寄存器:共32位,每一位與一中斷源相對(duì)應(yīng),設(shè)置相應(yīng)的中斷源為快速中斷還是普通中斷。中斷優(yōu)先權(quán)寄存器:ARM將中斷分為6組,每一組設(shè)一個(gè)優(yōu)先權(quán)仲裁器,在中斷優(yōu)先權(quán)寄存器中,每一組有一個(gè)ARB_MODE位設(shè)置是否使能改組各中斷源的優(yōu)先級(jí)滾動(dòng)變化,另有兩位ARB_SEL以設(shè)置改組各中斷源的優(yōu)先級(jí)。中斷偏移寄存器:指示普通中斷中是哪一個(gè)中斷掛起,當(dāng)中斷掛起寄存器或中斷源掛起寄存器中的某位清除時(shí),這個(gè)寄存器被清除。子中斷源掛起寄存器:指示子中斷源是否有請(qǐng)求。向這個(gè)寄存器中的某位寫數(shù)據(jù),則可清除這一位。CPSR:程序狀態(tài)寄存器(currentprogramstatusregister)cpsr在用戶級(jí)編程時(shí)用于存儲(chǔ)條件碼;CPSR包含條件碼標(biāo)志,中斷禁止位,當(dāng)前處理器模式以及其他狀態(tài)和控制信息。PWM編程:改變頻率和脈沖寬度以及定時(shí)器觀測值的讀取改變頻率:定時(shí)器減法緩沖寄存器(TCNTBn);改變脈沖寬度:比較緩沖寄存器(TCMPBn);10.串口定時(shí)器觀測值:定時(shí)器觀測寄存器(TCNTOn)10.串口幀錯(cuò)誤、奇偶校驗(yàn)錯(cuò)誤,溢出錯(cuò)誤,前兩種錯(cuò)誤的校驗(yàn)原理,數(shù)據(jù)的發(fā)送和接收、回環(huán)模式、自動(dòng)流控制,串口數(shù)據(jù)傳輸?shù)木幊?,從某一個(gè)內(nèi)存單元取數(shù),然后發(fā)往串口(包括DMA方式)使用DMA方式實(shí)現(xiàn)從存貯器發(fā)送數(shù)據(jù)到串口0

#include<string.h>#include“?.\INC\config?h”#defineSENDDATA(*(volatileunsignedchar*)0x30200000)//待發(fā)送的地址#defineSENDADDR((volatileunsignedchar*)0x30200000)voidmain(void){volatileunsignedchar*p=SE]NDADDR;volatileunsignedchar*p=SE]NDADDR;intI; Targetinit(); Delay(1000)SENDDATA=0x41;for(i=0;i<128;i++)*pp++=0x41+i; 〃上三條語句提供源數(shù)據(jù)rUCON0=rCON0&0xff3I0x8;//Uart0設(shè)置為DMA的方式//下面的語句對(duì)DMA0初始化rDISRC0=(U32)(SENDADDR);rDISCC0=(0?1)I(0<0);/^=AHB?傳送后地址增加rDIDST0=(U32)UTXH0;〃發(fā)送FIFO緩沖區(qū)地址rDIDSTC0=(1vv1)I(1v0)//目標(biāo)=APB.傳送后地址不變r(jià)DCON0=(0vv31)I(0v<30)I(1vv29)I(0vv28)(0?27)I(1vv23)I(1vv22)I(0?20)I 50);〃設(shè)置DMA控制器:握手模式,與APB同步,使能中斷,單位傳輸,單個(gè)模式,目標(biāo)=UART0硬件請(qǐng)求模式,不自動(dòng)加載,半字,計(jì)數(shù)初值=50rMASKTRIG0=(1<<1); //打開DMA誦道0whiled)}11.(A)DMA:概念、原理、數(shù)據(jù)傳輸過程,S3C2410的DMA控制寄存器的單個(gè)服務(wù)模式和整體服務(wù)模式,這一部分單獨(dú)編程不作要求。概念:DirectMemoryAcess,是指存貯器和外設(shè)在DMA控制器的控制下直接傳輸數(shù)據(jù)而不誦過CPU,在DMA數(shù)據(jù)傳輸前需要從CPU獲得總線的控制權(quán)DMA數(shù)據(jù)傳輸過程外設(shè)向DMA控制器發(fā)出DMA請(qǐng)求DMA控制器向CPU發(fā)出總線請(qǐng)求CPU執(zhí)行完現(xiàn)行的總線周期后向DMA控制器發(fā)出應(yīng)答信號(hào)CPU將總線控制權(quán)讓給DMA控制器DMA控制器向外部設(shè)備發(fā)出DMA請(qǐng)求應(yīng)答信號(hào)進(jìn)行DMA數(shù)據(jù)傳輸數(shù)據(jù)傳輸完畢DMA向CPU發(fā)出中斷請(qǐng)求,CPU在接收到中斷后進(jìn)行相應(yīng)處理CPU從中斷返回并從DMA控制器收回總線控制權(quán)在單個(gè)服務(wù)模式下,主FSM的3種狀態(tài)執(zhí)行完后就停止,并等待下一個(gè)DMA請(qǐng)求,并等待下一個(gè)DMA請(qǐng)求。如果產(chǎn)生了新的DMA請(qǐng)求,則所有三個(gè)狀態(tài)將被重復(fù)。因此,對(duì)于每一個(gè)原子傳送操作,DMAACK先后置1和清零。相反,在整體服務(wù)模式下,主FSM一直在狀態(tài)3等待直到CURR_TC變?yōu)?,因此DMAACK在整個(gè)傳送過程中置1,僅當(dāng)CURR_TC變?yōu)?才清零。AD轉(zhuǎn)換器:作用、類型、編程作用:模擬信號(hào)與CPU之間的聯(lián)系和接口類型:雙積分A/D轉(zhuǎn)換器:對(duì)模擬信號(hào)V.積分一個(gè)固定時(shí)間T;然后用參考電源Vf反相積分Ti直到積分電容放電到0:Vi=Vf-Ti/T逐次逼近A/D轉(zhuǎn)換器:由逐次逼近寄存器SAR,D/A轉(zhuǎn)換器、比較器以及時(shí)序和邏輯控制等部分組成。比較時(shí)先從SAR的最高位開始,逐次確定各位的數(shù)碼為1還是0.觸摸屏的工作原理與編程兩個(gè)金屬涂層分別為X、Y方向的電極;當(dāng)給X方向的電極施加一確定的電壓,而在Y方向電極對(duì)不施加電壓時(shí),觸點(diǎn)處的電壓值可在Y+或Y-上測量出來。從而確定出X坐標(biāo)。Y坐標(biāo)的確定同理LCD:LCD的顯示原理:顯示的最小單位-像素、顯示緩沖區(qū)中填寫的是什么信息-每點(diǎn)的顏色信息漢字的顯示原理:嵌入式控制系統(tǒng)中最常用的漢字是16x16點(diǎn)陣,它是由行列各16個(gè)點(diǎn),共256個(gè)點(diǎn)組成的點(diǎn)陣圖案,每行的16個(gè)點(diǎn)在內(nèi)存中占兩個(gè)字節(jié),一個(gè)16x16點(diǎn)陣漢字共16行,在內(nèi)存中占32個(gè)字節(jié)。根據(jù)這些字節(jié)在內(nèi)存中存放的順序,第一行的第一個(gè)字節(jié)稱“0”號(hào)字節(jié),第一行第二個(gè)字節(jié)稱“1”號(hào)字節(jié);第二行的第一個(gè)字節(jié)稱“2”號(hào)字節(jié),第二個(gè)字節(jié)稱“3”號(hào)字節(jié)。以此類推,最后一行的第一個(gè)字節(jié)稱“30”號(hào)字節(jié),第二個(gè)字節(jié)稱“31”號(hào)字節(jié),每個(gè)字節(jié)高位在前,低位在后,即D7在一個(gè)字節(jié)的最左側(cè),D0在最右側(cè)。漢字的區(qū)位碼和內(nèi)碼、字模:區(qū)位碼:漢字庫結(jié)構(gòu)作了統(tǒng)一規(guī)定,即將字庫分成94個(gè)區(qū),每個(gè)區(qū)有94個(gè)漢字(以位做區(qū)別),每一個(gè)漢字在漢字庫中有確定的區(qū)和位編號(hào)(用兩個(gè)字節(jié)),就是所謂的區(qū)位碼(區(qū)位碼的第一個(gè)字節(jié)表示區(qū)號(hào),第2個(gè)字節(jié)表示位號(hào)),因而只要知道了區(qū)位碼,就可知道該漢字在字庫中的地址。內(nèi)碼:組成兩字節(jié)代碼的最高位為0,即每個(gè)字節(jié)僅只使用7位,這樣在機(jī)器內(nèi)使用時(shí),由于英文的ASCII碼也在使用,可能將國標(biāo)碼看成兩個(gè)ASCII碼,因而規(guī)定用國標(biāo)碼在機(jī)內(nèi)表示漢字時(shí),將每個(gè)字節(jié)的最高位“置”1,以表示該碼表示的是漢字,這些國標(biāo)碼兩字節(jié)最高位加1后的代碼稱為機(jī)器內(nèi)的漢字代碼,簡稱內(nèi)碼。字模:每個(gè)漢字在字庫中是以點(diǎn)陣字模形式存儲(chǔ)的。字模提取軟件(可在網(wǎng)上搜索一下,至少要知道一種), 而cerLcdzimo.rarS3C2440(或2410)下的編程,STNLCD部分不作要求,僅要求TFTLCD部分,要搞懂原理。編程要求:邏輯顏色和物理顏色的轉(zhuǎn)換:漢字和ASCII碼的顯示。第6章(10%)需要知道嵌入式系統(tǒng)的兩種軟件編程模式:裸機(jī)編程和基于操作系統(tǒng)的編程裸機(jī)編程:開發(fā).工具ADS(作用、開發(fā)的方式、語言),如何利用超級(jí)終端和DNW進(jìn)行程序下載ARMADS的全稱為ARMDeveloperSuite,它是ARM公司推出的新一代ARM集成開發(fā)環(huán)境。裸機(jī)程序編輯、編譯軟件。C、匯編。程序下載步驟:(1) 連接好開發(fā)板電源,串口線,USB線,并設(shè)置開發(fā)板為NORFlash啟動(dòng)系統(tǒng),分別打開串口超級(jí)終端和DNW,上電啟動(dòng)開發(fā)板。(2) 保證USB驅(qū)動(dòng)已經(jīng)安裝好(前面已經(jīng)詳細(xì)介紹了USB驅(qū)動(dòng)的安裝方法),這時(shí)可以看到DNW的標(biāo)題欄顯示[USB:OK],如果沒有安裝好驅(qū)動(dòng)會(huì)顯示[USB:x]3)點(diǎn)DNW菜單Configuration,設(shè)置USB下載運(yùn)行地址為0x30000000(4) 這時(shí)在超級(jí)終端的BIOS功能菜單中選.擇功能號(hào)[d],出現(xiàn)USB下載等待提示信息:(5) 點(diǎn)擊DNW程序的“USBPort”“Transmit”,如圖詵擇剛剛編譯出的映象文件(光盤“\images\2440test”目錄中有已經(jīng)編譯好的可執(zhí)行文件),這樣就開始下載了超級(jí)終端也用于在基于操作系統(tǒng)的情形開發(fā)的程序既可以下載到nandflash也可下載到內(nèi)存中運(yùn)行?;诓僮飨到y(tǒng)的編程:Bootloader是什么,它的作用。Bootloader:是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的BootLoader幾乎是不可能的。在嵌入式系統(tǒng)中,通常沒有象Bios那樣的固件程序有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)完全由lootLoader完成操作系統(tǒng)的內(nèi)核(在操作系統(tǒng)中的作用:提供硬件抽象層、磁盤及文件控制、多任務(wù)等功能計(jì)算機(jī)系統(tǒng)的必要組成部分?內(nèi)核不是計(jì)算機(jī)系統(tǒng)必要組成部分。Linux內(nèi)核的組成、在目標(biāo)板上linux操作系統(tǒng)的安裝過^^(bootloader、內(nèi)核、根文件系統(tǒng)X虛擬機(jī)上linux的安裝、linux的基本操作命令,網(wǎng)絡(luò)文件系統(tǒng)NFS嵌入式系統(tǒng)編程中的作用,利用NFS進(jìn)行程序下載的原理,如何在PC端編譯linux程序,并下載到目標(biāo)板運(yùn)行、在PC端linux運(yùn)行的程序怎樣編譯;基于嵌入式操作系統(tǒng)開發(fā)的程序下載方式(u盤、網(wǎng)絡(luò)文件傳輸、NFS、串口傳輸)。第7章(25%)虛擬文件系統(tǒng)的作用Linux之所以能支持多種文件系統(tǒng),其實(shí)是由于提供了一個(gè)虛擬文件系統(tǒng)VFS,VFS作為實(shí)際文件系統(tǒng)的上層軟件,掩蓋了實(shí)際文件系統(tǒng)底層的具體結(jié)構(gòu)差異,為系統(tǒng)訪問位于不同文件系統(tǒng)的文件提供了一個(gè)統(tǒng)一的接口設(shè)備:以文件的方式訪問(設(shè)備文件)設(shè)備驅(qū)動(dòng)的作用(對(duì)設(shè)備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序發(fā)送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);檢測和處理設(shè)備出現(xiàn)的錯(cuò)誤。)、linux操作系統(tǒng)下有哪幾類設(shè)備類型:(設(shè)備類型:字符設(shè)備或者塊設(shè)備網(wǎng)絡(luò)設(shè)備)設(shè)備文件及其在文件系統(tǒng)中所屬目錄、硬盤、USB盤的設(shè)備文件命名、設(shè)備類型,主設(shè)備號(hào)和次設(shè)備號(hào)(對(duì)設(shè)備文件的識(shí)別使用設(shè)備類型,主設(shè)備號(hào)和次設(shè)備號(hào)。主設(shè)備號(hào):按照設(shè)備使用的驅(qū)動(dòng)程序不同而賦予設(shè)備不同的主設(shè)備號(hào)。主設(shè)備號(hào)與驅(qū)動(dòng)程序 對(duì)應(yīng)。次設(shè)備號(hào):用于區(qū)分使用同一驅(qū)動(dòng)程序的不同設(shè))。設(shè)備驅(qū)動(dòng)程序的file_operations結(jié)構(gòu)(file_operations結(jié)構(gòu)體中主要成員的含義如下:open()用來完成驅(qū)動(dòng)程序的設(shè)備初始化操作,并且還會(huì)增加設(shè)備計(jì)數(shù),以防止文件關(guān)閉前模塊被卸載出內(nèi)核。主要完成的操作有:檢查設(shè)備錯(cuò)誤(諸如設(shè)備未就緒或相似的硬件問題);如果是首次打開,則初始化設(shè)備;標(biāo)識(shí)次設(shè)備號(hào);分配和填寫要放在file-private_data內(nèi)的數(shù)據(jù)結(jié)構(gòu);增加使用計(jì)數(shù)。llseek(涵數(shù)用來修改一個(gè)文件的當(dāng)前讀寫位置,并將新位置返回,在出錯(cuò)時(shí),這個(gè)函數(shù)返回一個(gè)負(fù)值read()函數(shù)用來從設(shè)備中讀取數(shù)據(jù),成功時(shí)函數(shù)返回讀取的字節(jié)數(shù),出錯(cuò)時(shí)返回一個(gè)負(fù)值write()函數(shù)向設(shè)備發(fā)送數(shù)據(jù),成功時(shí)該函數(shù)返回寫入的字節(jié)數(shù)。如果此函數(shù)未被實(shí)現(xiàn),當(dāng)用戶進(jìn)行write調(diào)用時(shí),將得到-EINVAL返回值。ioctl()提供設(shè)備相關(guān)的控制命令的實(shí)現(xiàn)(既不是讀操作也不是寫操作),當(dāng)調(diào)用成功時(shí),返回給調(diào)用程序的一個(gè)非負(fù)值。內(nèi)核本身識(shí)別部分的控制命令,而不必調(diào)用設(shè)備驅(qū)動(dòng)中的ioctl()。如果設(shè)備驅(qū)動(dòng)不提供ioctl()函數(shù),對(duì)于內(nèi)核不能識(shí)別的命令,用戶進(jìn)行ioctl()系統(tǒng)調(diào)用時(shí)將得到-EINVAL返回值)、Linux內(nèi)核模塊(為了把Linux內(nèi)核中需要的部分都包含在內(nèi)核中,而又不使其過于龐大。可采用模塊的方式,讓編譯出的內(nèi)核本身不需要包含所有功能,而在這些功能需要使用時(shí),其對(duì)應(yīng)代碼被動(dòng)態(tài)加載到內(nèi)核中。這種機(jī)制就稱為模塊,具有如下特點(diǎn):1模塊本身不被編譯為內(nèi)核映像,從而控制了內(nèi)核的大小。2模塊一旦被加載,他就和內(nèi)核中其他部分一樣?!?、字符設(shè)備驅(qū)動(dòng)(7章ppt)、linux文件操作(Linux系統(tǒng)的一個(gè)重要思想是“一切都是文件”,例如對(duì)由于字符設(shè)備(比如鍵盤和鼠標(biāo))和塊設(shè)備(硬盤,USB存貯器)等設(shè)備的訪問都是通過文件操作的方式進(jìn)行的。?設(shè)備驅(qū)動(dòng)在操作系統(tǒng)的文件系統(tǒng)調(diào)用或C庫函數(shù)調(diào)用時(shí)(本質(zhì)也是基于系統(tǒng)調(diào)用)被訪問。?系統(tǒng)調(diào)用是指應(yīng)用程序空間對(duì)內(nèi)核空間訪問)、字符設(shè)備編程的主要內(nèi)容和步驟,cdev結(jié)構(gòu)體在linux2.6內(nèi)核中使用cdev結(jié)構(gòu)體描述字符設(shè)備,cdev結(jié)構(gòu)體的定義為structcdev{structkobjectkobj;//內(nèi)嵌的kobject對(duì)象structmodule*owner;//所屬模塊structfile_operations*ops;〃文件操作結(jié)構(gòu)體structlist_headlistdev_tdev;unsignedintcount;};操作系統(tǒng)程序分析:LED的控制(7章ppt30頁)■驅(qū)動(dòng)程序代碼#include<linux/miscdevice.h>#include<linux/delay.h>…#defineDEVICE_NAME"leds“staticunsignedlongled_table[]={S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,■}staticunsignedintled_cfg_table[]={S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,};staticintsbc2440_leds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){switch(cmd){case0:case1:if(arg>4){return-EINVAL;■}s3c2410_gpio_setpin(led_table[arg],!cmd);return0;default:return-EINVAL;■}■}staticstructfile_operationsdev_fops={.owner=THIS_MODULE,.ioctl=s3c2440_leds_ioctl,};staticstructmiscdevicemisc={.minor

溫馨提示

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

評(píng)論

0/150

提交評(píng)論