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

下載本文檔

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

文檔簡介

嵌入式操作系統(tǒng)考試要求的內(nèi)容前3章(25%)1)嵌入式系統(tǒng)的特點:開發(fā)方式、內(nèi)核大小、專用性、編譯方式;2)從開發(fā)環(huán)境與運行環(huán)境來看,嵌入式系統(tǒng)與一般PC的特點。什么是交叉編譯在一個平臺上生成另一個平臺上的可執(zhí)行代碼。操作系統(tǒng)的兩大功能和四項基本任務(wù)使計算機硬件便于使用;高效組織和正確地使用計算機的資源。進程管理、進程間通信與同步、內(nèi)存管理和I/O資源管理。ARM是什么?是一種嵌入式芯片的型號嗎?是AdvanceRISCMachine(ARM)公司提出的一種嵌入式芯片的內(nèi)核,ARM公司不生產(chǎn)芯片而只是轉(zhuǎn)讓知識產(chǎn)權(quán)另外也提供基于ARM架構(gòu)的開發(fā)設(shè)計技術(shù):軟件工具,評估板,調(diào)試工具,應(yīng)用軟件,總線架構(gòu),外圍設(shè)備單元,等等嵌入式處理器的分類嵌入式處理器可分為低端的嵌入式微控制器(MicroControllerUnit,MCU)、常用于計算機通信領(lǐng)域的嵌入式DSP處理器(EmbeddedDigitalSignalProcessor,EDSP)、中高端的嵌入式微處理器(EmbeddedMicroProcessorUnit,EMPU)和高度集成的嵌入式片上系統(tǒng)(SystemOnChip,SOC)。談一談嵌入式實時系統(tǒng)從實時性的分類。硬實時和軟實時的區(qū)別就在于對外界的事件做出反應(yīng)的時間。硬實時系統(tǒng):必須對事件做出及時的反應(yīng),絕對不能錯過事件處理的時限。在硬實時系統(tǒng)中如果出現(xiàn)了這樣的情況就意味著巨大的損失和災(zāi)難。比如說航天飛機的控制系統(tǒng),如果出現(xiàn)故障,后果不堪想象。軟實時系統(tǒng):在系統(tǒng)負荷較重的時候,允許發(fā)生錯過時限的情況而且不會造成太大的危害。比如液晶屏刷新允許有短暫的延遲。目前比較流行的嵌入式操作系統(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ù)和邏輯操作僅針對寄存器?Load/Store結(jié)構(gòu)流水線技術(shù)通過指令的并行運行提高運行速度,ARM7三級流水(fetch,decode,execute),ARM9五級流水(memory,write)ARM處理器的各種基本工作模式用戶模式、快速中斷模式、外部中斷模式、管理模式、中止模式、未定義指令中止模式和系統(tǒng)模式。12?馮?諾依曼體系結(jié)構(gòu)和哈佛體系結(jié)構(gòu)前者操作數(shù)和指令分時共用同一組總線,后者操作數(shù)和指令所采用的總線不同因而取指和取操作數(shù)可以同時進行,從而提高了運行速度13,高速緩存高速緩存是一種小型、快速的存儲器,它保存部分主存內(nèi)容的拷貝。14.14.FLASH(閃存):是EEPROM的變種,EEPROM與閃存不同的是,它能在字節(jié)水平上進行刪除和重寫而不是整個芯片擦寫,這樣閃存就比EEPROM的更新諫度快。中于其斷電時仍能保存數(shù)據(jù),閃存通常被用來保存設(shè)置信息,如在電腦的BIOS(基本輸入輸出程序)、PDA(個人數(shù)字助理)、數(shù)碼相機中保存資料等。NandFlash與NorFlash相比較:編程、擦除、讀的速度以及可靠性15.Nandflash/NorFlash 寫快/慢、簡單/擦除前需要寫0、讀稍慢/稍快、不可靠/可15.靠16.從編程的角度看,ARM微處理器的工作狀態(tài)有哪些?16.2種且可在2種狀態(tài)之間切換:第一種為ARM狀態(tài),此時處理器執(zhí)行32位的字對齊的ARM指令;第二種為Thumb狀態(tài),此時處理器執(zhí)行16位的、半字對齊的Thumb指令。17.ARM體系結(jié)構(gòu)兩種存儲字數(shù)據(jù)方法一一大端格式和小段格式17.大端:字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中。小端:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)。18.ARM寄存器組織、分類,Thum狀態(tài)和ARM狀態(tài)下寄存器組織上的異同通用寄存器包括R0?R15,可以分為三類:不分組寄存器R0?R7;分組寄存器R8?R14;程序計數(shù)器PC(R15)。Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個子集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)下的程序計數(shù)器PC(R15)映射到ARM狀態(tài)下的PC(R15)。19,什么是異常向量異常是由內(nèi)部或外部源產(chǎn)生并引起處理器處理一個事件,它會導(dǎo)致正常的程序執(zhí)行流程發(fā)生暫時的停止,例如外部中斷或試圖執(zhí)行未定義指令都會引起異常。異常出現(xiàn)后強制從異常類型對應(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;}}增強程序可讀性的寄存器定義格式#define寄存器名(*(volatileunsigned*)寄存器在存儲空間中的位置)例如#define rUCON0(*(volatileunsigned*) 0x50000004)關(guān)=!==A=_1110000000000000=0x0eh<12B=0000001100000000=0x03h<8C=0000000010010000=0x09h<4D=0000000000000110=0x06h<05.采用位掩碼對寄存器的某個功能區(qū)位進行設(shè)置fun3的位掩碼:FUN3_MASK=0xf<4C’=0x0B<4R&=~FUN3_MASKRI=C’6,如何對I/O口的功能進行配置并進行相關(guān)操作,讓輸出端口電平變化(配置為輸出,然后向端口數(shù)據(jù)寄存器位寫入相應(yīng)電平),要求能進行編程通過對G口8、9腳的操作實現(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++);//延時rGPGCON=rGPGCON&0xfff0ffff|0x00050000〃配置8、9腳為輸出rGPGDAT=rGPGDAT&0xeff|0x200;//8腳低電平,9腳高電平for(i=0;i<1000000;i++);//延時Flag=1;}Else{for(i=0;i<1000000;i++);//延時rGPGCON=rGPGCON&0xfff0ffff|0x00050000//配置8、9腳為輸出rGPGDAT=rGPGDAT&0xdff|0x100;//8腳高電平,9腳低電平for(i=0;i<1000000;i++);//延時

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)先級和中斷標(biāo)志識別是哪一個中斷發(fā)生,并進行相應(yīng)處理中斷返回,恢復(fù)現(xiàn)場:PC—LR,CPSRfSPSR中斷屏蔽寄存器:為了能接受中斷請求必須將F或I位設(shè)置為0,同時將中斷屏蔽寄存器的相應(yīng)位設(shè)置為0。中斷掛起寄存器:共32位,每一位與一中斷源相對應(yīng),只有一位能為1,指示相應(yīng)中斷掛起。各掛起的中斷源由各中斷仲裁器確定那個中斷掛起。(中斷掛起的含義是:相應(yīng)的中斷是下一個待處理的中斷在中斷服務(wù)程序中需要將相應(yīng)中斷清除)中斷源掛起寄存器:共32位,當(dāng)某一個中斷源產(chǎn)生中斷請求,相應(yīng)位置1,在中斷服務(wù)程序中必須清除中斷模式寄存器:共32位,每一位與一中斷源相對應(yīng),設(shè)置相應(yīng)的中斷源為快速中斷還是普通中斷。中斷優(yōu)先權(quán)寄存器:ARM將中斷分為6組,每一組設(shè)一個優(yōu)先權(quán)仲裁器,在中斷優(yōu)先權(quán)寄存器中,每一組有一個ARB_MODE位設(shè)置是否使能改組各中斷源的優(yōu)先級滾動變化,另有兩位ARB_SEL以設(shè)置改組各中斷源的優(yōu)先級。中斷偏移寄存器:指示普通中斷中是哪一個中斷掛起,當(dāng)中斷掛起寄存器或中斷源掛起寄存器中的某位清除時,這個寄存器被清除。子中斷源掛起寄存器:指示子中斷源是否有請求。向這個寄存器中的某位寫數(shù)據(jù),則可清除這一位。CPSR:程序狀態(tài)寄存器(currentprogramstatusregister)cpsr在用戶級編程時用于存儲條件碼;CPSR包含條件碼標(biāo)志,中斷禁止位,當(dāng)前處理器模式以及其他狀態(tài)和控制信息。PWM編程:改變頻率和脈沖寬度以及定時器觀測值的讀取改變頻率:定時器減法緩沖寄存器(TCNTBn);改變脈沖寬度:比較緩沖寄存器(TCMPBn);10.串口定時器觀測值:定時器觀測寄存器(TCNTOn)10.串口幀錯誤、奇偶校驗錯誤,溢出錯誤,前兩種錯誤的校驗原理,數(shù)據(jù)的發(fā)送和接收、回環(huán)模式、自動流控制,串口數(shù)據(jù)傳輸?shù)木幊蹋瑥哪骋粋€內(nèi)存單元取數(shù),然后發(fā)往串口(包括DMA方式)使用DMA方式實現(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的方式//下面的語句對DMA0初始化rDISRC0=(U32)(SENDADDR);rDISCC0=(0?1)I(0<0);/^=AHB?傳送后地址增加rDIDST0=(U32)UTXH0;〃發(fā)送FIFO緩沖區(qū)地址rDIDSTC0=(1vv1)I(1v0)//目標(biāo)=APB.傳送后地址不變rDCON0=(0vv31)I(0v<30)I(1vv29)I(0vv28)(0?27)I(1vv23)I(1vv22)I(0?20)I 50);〃設(shè)置DMA控制器:握手模式,與APB同步,使能中斷,單位傳輸,單個模式,目標(biāo)=UART0硬件請求模式,不自動加載,半字,計數(shù)初值=50rMASKTRIG0=(1<<1); //打開DMA誦道0whiled)}11.(A)DMA:概念、原理、數(shù)據(jù)傳輸過程,S3C2410的DMA控制寄存器的單個服務(wù)模式和整體服務(wù)模式,這一部分單獨編程不作要求。概念:DirectMemoryAcess,是指存貯器和外設(shè)在DMA控制器的控制下直接傳輸數(shù)據(jù)而不誦過CPU,在DMA數(shù)據(jù)傳輸前需要從CPU獲得總線的控制權(quán)DMA數(shù)據(jù)傳輸過程外設(shè)向DMA控制器發(fā)出DMA請求DMA控制器向CPU發(fā)出總線請求CPU執(zhí)行完現(xiàn)行的總線周期后向DMA控制器發(fā)出應(yīng)答信號CPU將總線控制權(quán)讓給DMA控制器DMA控制器向外部設(shè)備發(fā)出DMA請求應(yīng)答信號進行DMA數(shù)據(jù)傳輸數(shù)據(jù)傳輸完畢DMA向CPU發(fā)出中斷請求,CPU在接收到中斷后進行相應(yīng)處理CPU從中斷返回并從DMA控制器收回總線控制權(quán)在單個服務(wù)模式下,主FSM的3種狀態(tài)執(zhí)行完后就停止,并等待下一個DMA請求,并等待下一個DMA請求。如果產(chǎn)生了新的DMA請求,則所有三個狀態(tài)將被重復(fù)。因此,對于每一個原子傳送操作,DMAACK先后置1和清零。相反,在整體服務(wù)模式下,主FSM一直在狀態(tài)3等待直到CURR_TC變?yōu)?,因此DMAACK在整個傳送過程中置1,僅當(dāng)CURR_TC變?yōu)?才清零。AD轉(zhuǎn)換器:作用、類型、編程作用:模擬信號與CPU之間的聯(lián)系和接口類型:雙積分A/D轉(zhuǎn)換器:對模擬信號V.積分一個固定時間T;然后用參考電源Vf反相積分Ti直到積分電容放電到0:Vi=Vf-Ti/T逐次逼近A/D轉(zhuǎn)換器:由逐次逼近寄存器SAR,D/A轉(zhuǎn)換器、比較器以及時序和邏輯控制等部分組成。比較時先從SAR的最高位開始,逐次確定各位的數(shù)碼為1還是0.觸摸屏的工作原理與編程兩個金屬涂層分別為X、Y方向的電極;當(dāng)給X方向的電極施加一確定的電壓,而在Y方向電極對不施加電壓時,觸點處的電壓值可在Y+或Y-上測量出來。從而確定出X坐標(biāo)。Y坐標(biāo)的確定同理LCD:LCD的顯示原理:顯示的最小單位-像素、顯示緩沖區(qū)中填寫的是什么信息-每點的顏色信息漢字的顯示原理:嵌入式控制系統(tǒng)中最常用的漢字是16x16點陣,它是由行列各16個點,共256個點組成的點陣圖案,每行的16個點在內(nèi)存中占兩個字節(jié),一個16x16點陣漢字共16行,在內(nèi)存中占32個字節(jié)。根據(jù)這些字節(jié)在內(nèi)存中存放的順序,第一行的第一個字節(jié)稱“0”號字節(jié),第一行第二個字節(jié)稱“1”號字節(jié);第二行的第一個字節(jié)稱“2”號字節(jié),第二個字節(jié)稱“3”號字節(jié)。以此類推,最后一行的第一個字節(jié)稱“30”號字節(jié),第二個字節(jié)稱“31”號字節(jié),每個字節(jié)高位在前,低位在后,即D7在一個字節(jié)的最左側(cè),D0在最右側(cè)。漢字的區(qū)位碼和內(nèi)碼、字模:區(qū)位碼:漢字庫結(jié)構(gòu)作了統(tǒng)一規(guī)定,即將字庫分成94個區(qū),每個區(qū)有94個漢字(以位做區(qū)別),每一個漢字在漢字庫中有確定的區(qū)和位編號(用兩個字節(jié)),就是所謂的區(qū)位碼(區(qū)位碼的第一個字節(jié)表示區(qū)號,第2個字節(jié)表示位號),因而只要知道了區(qū)位碼,就可知道該漢字在字庫中的地址。內(nèi)碼:組成兩字節(jié)代碼的最高位為0,即每個字節(jié)僅只使用7位,這樣在機器內(nèi)使用時,由于英文的ASCII碼也在使用,可能將國標(biāo)碼看成兩個ASCII碼,因而規(guī)定用國標(biāo)碼在機內(nèi)表示漢字時,將每個字節(jié)的最高位“置”1,以表示該碼表示的是漢字,這些國標(biāo)碼兩字節(jié)最高位加1后的代碼稱為機器內(nèi)的漢字代碼,簡稱內(nèi)碼。字模:每個漢字在字庫中是以點陣字模形式存儲的。字模提取軟件(可在網(wǎng)上搜索一下,至少要知道一種), 而cerLcdzimo.rarS3C2440(或2410)下的編程,STNLCD部分不作要求,僅要求TFTLCD部分,要搞懂原理。編程要求:邏輯顏色和物理顏色的轉(zhuǎn)換:漢字和ASCII碼的顯示。第6章(10%)需要知道嵌入式系統(tǒng)的兩種軟件編程模式:裸機編程和基于操作系統(tǒng)的編程裸機編程:開發(fā).工具ADS(作用、開發(fā)的方式、語言),如何利用超級終端和DNW進行程序下載ARMADS的全稱為ARMDeveloperSuite,它是ARM公司推出的新一代ARM集成開發(fā)環(huán)境。裸機程序編輯、編譯軟件。C、匯編。程序下載步驟:(1) 連接好開發(fā)板電源,串口線,USB線,并設(shè)置開發(fā)板為NORFlash啟動系統(tǒng),分別打開串口超級終端和DNW,上電啟動開發(fā)板。(2) 保證USB驅(qū)動已經(jīng)安裝好(前面已經(jīng)詳細介紹了USB驅(qū)動的安裝方法),這時可以看到DNW的標(biāo)題欄顯示[USB:OK],如果沒有安裝好驅(qū)動會顯示[USB:x]3)點DNW菜單Configuration,設(shè)置USB下載運行地址為0x30000000(4) 這時在超級終端的BIOS功能菜單中選.擇功能號[d],出現(xiàn)USB下載等待提示信息:(5) 點擊DNW程序的“USBPort”“Transmit”,如圖詵擇剛剛編譯出的映象文件(光盤“\images\2440test”目錄中有已經(jīng)編譯好的可執(zhí)行文件),這樣就開始下載了超級終端也用于在基于操作系統(tǒng)的情形開發(fā)的程序既可以下載到nandflash也可下載到內(nèi)存中運行。基于操作系統(tǒng)的編程:Bootloader是什么,它的作用。Bootloader:是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,BootLoader是嚴重地依賴于硬件而實現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的BootLoader幾乎是不可能的。在嵌入式系統(tǒng)中,通常沒有象Bios那樣的固件程序有的嵌入式CPU也會內(nèi)嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務(wù)完全由lootLoader完成操作系統(tǒng)的內(nèi)核(在操作系統(tǒng)中的作用:提供硬件抽象層、磁盤及文件控制、多任務(wù)等功能計算機系統(tǒng)的必要組成部分?內(nèi)核不是計算機系統(tǒng)必要組成部分。Linux內(nèi)核的組成、在目標(biāo)板上linux操作系統(tǒng)的安裝過^^(bootloader、內(nèi)核、根文件系統(tǒng)X虛擬機上linux的安裝、linux的基本操作命令,網(wǎng)絡(luò)文件系統(tǒng)NFS嵌入式系統(tǒng)編程中的作用,利用NFS進行程序下載的原理,如何在PC端編譯linux程序,并下載到目標(biāo)板運行、在PC端linux運行的程序怎樣編譯;基于嵌入式操作系統(tǒng)開發(fā)的程序下載方式(u盤、網(wǎng)絡(luò)文件傳輸、NFS、串口傳輸)。第7章(25%)虛擬文件系統(tǒng)的作用Linux之所以能支持多種文件系統(tǒng),其實是由于提供了一個虛擬文件系統(tǒng)VFS,VFS作為實際文件系統(tǒng)的上層軟件,掩蓋了實際文件系統(tǒng)底層的具體結(jié)構(gòu)差異,為系統(tǒng)訪問位于不同文件系統(tǒng)的文件提供了一個統(tǒng)一的接口設(shè)備:以文件的方式訪問(設(shè)備文件)設(shè)備驅(qū)動的作用(對設(shè)備初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序發(fā)送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù);檢測和處理設(shè)備出現(xiàn)的錯誤。)、linux操作系統(tǒng)下有哪幾類設(shè)備類型:(設(shè)備類型:字符設(shè)備或者塊設(shè)備網(wǎng)絡(luò)設(shè)備)設(shè)備文件及其在文件系統(tǒng)中所屬目錄、硬盤、USB盤的設(shè)備文件命名、設(shè)備類型,主設(shè)備號和次設(shè)備號(對設(shè)備文件的識別使用設(shè)備類型,主設(shè)備號和次設(shè)備號。主設(shè)備號:按照設(shè)備使用的驅(qū)動程序不同而賦予設(shè)備不同的主設(shè)備號。主設(shè)備號與驅(qū)動程序 對應(yīng)。次設(shè)備號:用于區(qū)分使用同一驅(qū)動程序的不同設(shè))。設(shè)備驅(qū)動程序的file_operations結(jié)構(gòu)(file_operations結(jié)構(gòu)體中主要成員的含義如下:open()用來完成驅(qū)動程序的設(shè)備初始化操作,并且還會增加設(shè)備計數(shù),以防止文件關(guān)閉前模塊被卸載出內(nèi)核。主要完成的操作有:檢查設(shè)備錯誤(諸如設(shè)備未就緒或相似的硬件問題);如果是首次打開,則初始化設(shè)備;標(biāo)識次設(shè)備號;分配和填寫要放在file-private_data內(nèi)的數(shù)據(jù)結(jié)構(gòu);增加使用計數(shù)。llseek(涵數(shù)用來修改一個文件的當(dāng)前讀寫位置,并將新位置返回,在出錯時,這個函數(shù)返回一個負值read()函數(shù)用來從設(shè)備中讀取數(shù)據(jù),成功時函數(shù)返回讀取的字節(jié)數(shù),出錯時返回一個負值write()函數(shù)向設(shè)備發(fā)送數(shù)據(jù),成功時該函數(shù)返回寫入的字節(jié)數(shù)。如果此函數(shù)未被實現(xiàn),當(dāng)用戶進行write調(diào)用時,將得到-EINVAL返回值。ioctl()提供設(shè)備相關(guān)的控制命令的實現(xiàn)(既不是讀操作也不是寫操作),當(dāng)調(diào)用成功時,返回給調(diào)用程序的一個非負值。內(nèi)核本身識別部分的控制命令,而不必調(diào)用設(shè)備驅(qū)動中的ioctl()。如果設(shè)備驅(qū)動不提供ioctl()函數(shù),對于內(nèi)核不能識別的命令,用戶進行ioctl()系統(tǒng)調(diào)用時將得到-EINVAL返回值)、Linux內(nèi)核模塊(為了把Linux內(nèi)核中需要的部分都包含在內(nèi)核中,而又不使其過于龐大。可采用模塊的方式,讓編譯出的內(nèi)核本身不需要包含所有功能,而在這些功能需要使用時,其對應(yīng)代碼被動態(tài)加載到內(nèi)核中。這種機制就稱為模塊,具有如下特點:1模塊本身不被編譯為內(nèi)核映像,從而控制了內(nèi)核的大小。2模塊一旦被加載,他就和內(nèi)核中其他部分一樣。—、字符設(shè)備驅(qū)動(7章ppt)、linux文件操作(Linux系統(tǒng)的一個重要思想是“一切都是文件”,例如對由于字符設(shè)備(比如鍵盤和鼠標(biāo))和塊設(shè)備(硬盤,USB存貯器)等設(shè)備的訪問都是通過文件操作的方式進行的。?設(shè)備驅(qū)動在操作系統(tǒng)的文件系統(tǒng)調(diào)用或C庫函數(shù)調(diào)用時(本質(zhì)也是基于系統(tǒng)調(diào)用)被訪問。?系統(tǒng)調(diào)用是指應(yīng)用程序空間對內(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對象structmodule*owner;//所屬模塊structfile_operations*ops;〃文件操作結(jié)構(gòu)體structlist_headlistdev_tdev;unsignedintcount;};操作系統(tǒng)程序分析:LED的控制(7章ppt30頁)■驅(qū)動程序代碼#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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論