嵌入式Linux內(nèi)核移植_第1頁(yè)
嵌入式Linux內(nèi)核移植_第2頁(yè)
嵌入式Linux內(nèi)核移植_第3頁(yè)
嵌入式Linux內(nèi)核移植_第4頁(yè)
嵌入式Linux內(nèi)核移植_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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)介

嵌入式Linux內(nèi)核移植一、基于ARM的硬件BOOT程序的根本設(shè)計(jì)1.實(shí)驗(yàn)步驟本實(shí)驗(yàn)僅使用實(shí)驗(yàn)教學(xué)系統(tǒng)的CPU板。在進(jìn)行本實(shí)驗(yàn)時(shí),LCD電源開關(guān)、音頻的左右聲道開關(guān)、AD通道選擇開關(guān)、觸摸屏中斷選擇開關(guān)等均應(yīng)處在關(guān)閉狀態(tài)。基于ARM芯片的應(yīng)用系統(tǒng),多數(shù)為復(fù)雜的片上系統(tǒng),該復(fù)雜系統(tǒng)里,多數(shù)硬件模塊都是可配置的,需要由軟件來(lái)預(yù)先設(shè)置其需要的工作狀態(tài),因此在用戶的應(yīng)用程序之前,需要由專門的一段代碼來(lái)完成對(duì)系統(tǒng)根本的初始化工作。由于此類代碼直接面對(duì)處理器內(nèi)核和硬件控制器進(jìn)行編程,故一般均用匯編語(yǔ)言實(shí)現(xiàn)。系統(tǒng)的根本初始化內(nèi)容一般包括:〔1〕分配中斷向量表〔2〕初始化存儲(chǔ)器系統(tǒng)〔3〕初始化各工作模式的堆?!?〕初始化有特殊要求的硬件模塊〔5〕初始化用戶程序的執(zhí)行環(huán)境〔6〕切換處理器的工作模式〔7〕呼叫主應(yīng)用程序二、開發(fā)環(huán)境搭建實(shí)驗(yàn)1.實(shí)驗(yàn)原理絕大多數(shù)的Linux軟件開發(fā)都是以native方式進(jìn)行的,即本機(jī)〔HOST〕開發(fā)、調(diào)試,本機(jī)運(yùn)行的方式。這種方式通常不適合于嵌入式系統(tǒng)的軟件開發(fā),因?yàn)閷?duì)于嵌入式系統(tǒng)的開發(fā),沒(méi)有足夠的資源在本機(jī)〔即板上系統(tǒng)〕運(yùn)行開發(fā)工具和調(diào)試工具。通常嵌入式系統(tǒng)軟件的開發(fā)采用交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機(jī)〔即一臺(tái)PC機(jī)〕上,對(duì)應(yīng)的開發(fā)板叫做目標(biāo)板。開發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進(jìn)制代碼,〔這種可執(zhí)行代碼并不能在宿主機(jī)上執(zhí)行,而只能在目標(biāo)板上執(zhí)行?!橙缓蟀芽蓤?zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。調(diào)試時(shí)的方法很多,可以使用串口,以太網(wǎng)口等,具體使用哪種調(diào)試方法可以根據(jù)目標(biāo)機(jī)處理器所提供的支持作出選擇。宿主機(jī)和目標(biāo)板的處理器一般都不相同,宿主機(jī)為PXA270。GNU編譯器提供這樣的功能,在編譯編譯器時(shí),可以選擇開發(fā)所需的宿主機(jī)和目標(biāo)機(jī)從而建立開發(fā)環(huán)境。所以在進(jìn)行嵌入式開發(fā)前第一步的工作就是要安裝一臺(tái)裝有指定操作系統(tǒng)的PC機(jī)作宿主開發(fā)機(jī),對(duì)于嵌入式Linux,宿主機(jī)上的操作系統(tǒng)一般要求為RedhatLinux,在此,推薦使用Redhat9.0作為宿主機(jī)〔開發(fā)主機(jī)〕的操作系統(tǒng)。需要宿主機(jī)器在硬件上具有標(biāo)準(zhǔn)串口,并口,網(wǎng)口;軟件上具有目標(biāo)板的linux內(nèi)核、ramdisk文件系統(tǒng)映像以及bootloader。軟件的更新通常使用串口或網(wǎng)口,最初的bootloader燒寫是通過(guò)并口進(jìn)行的。本次實(shí)驗(yàn)通過(guò)配置宿主機(jī)上的相應(yīng)軟件,為以后進(jìn)行PXA270嵌入式開發(fā)做根底。其中mincom很像Windows下面的超級(jí)終端,我們利用minicom作為被開發(fā)目標(biāo)板的終端,實(shí)現(xiàn)目標(biāo)板相關(guān)信息的顯示與交互。配置宿主機(jī)上的TFTP效勞,主要為以后下載相應(yīng)的內(nèi)核映像和文件系統(tǒng)做準(zhǔn)備;NFS〔NetworkFileSystem〕指網(wǎng)絡(luò)文件系統(tǒng),是Linux系統(tǒng)中經(jīng)常使用的一種效勞,NFS是一個(gè)RPCservice,很像windows中的文件共享效勞。它的設(shè)計(jì)是為了在不同的系統(tǒng)間使用,所以它的通訊協(xié)議設(shè)計(jì)與主機(jī)及作業(yè)系統(tǒng)無(wú)關(guān)。當(dāng)使用者想用遠(yuǎn)端檔案時(shí)只要用"mount"就可把remote檔案系統(tǒng)掛接在自己的檔案系統(tǒng)之下,使得遠(yuǎn)端的檔案在使用上和local的檔案沒(méi)兩樣。三、嵌入式Linux內(nèi)核移植盡管目前Linux2.6版本內(nèi)核已經(jīng)增加了很多對(duì)ARM體系甚至是S3C2410CPU的支持,但仍然需要對(duì)內(nèi)核作一些小的修改來(lái)適應(yīng)我們的開發(fā)板,并且需要重新配置、編譯和重新生成新的內(nèi)核映像。本實(shí)驗(yàn)著重從NANDFlash分區(qū)到下載到開發(fā)板等一系列連貫的操作來(lái)進(jìn)行嵌入式Linux內(nèi)核的移植。本實(shí)驗(yàn)的內(nèi)核版本為2.6.26。1.NANDFlash分區(qū)從NandFlash啟動(dòng)時(shí),S3C2410硬件會(huì)自動(dòng)把NandFlash前4K代碼拷貝芯片內(nèi)部RAM空間,CPU其實(shí)是從內(nèi)部RAM開始執(zhí)行代碼的,所以vivi必須放到NandFlash頂端。vivi開始執(zhí)行后將初始化硬件設(shè)備、建立內(nèi)存空間映射表,為調(diào)用內(nèi)核做好準(zhǔn)備;然后把壓縮的內(nèi)核映像加載到SDRAM中;最后跳轉(zhuǎn)到內(nèi)核映像入口,啟動(dòng)內(nèi)核。內(nèi)核MTD分區(qū)必須與vivi分區(qū)相一致。因?yàn)椋瑅ivi分區(qū)中的地址是引導(dǎo)程序、內(nèi)核映像及文件系統(tǒng)下載到NandFlash的真正地址;而內(nèi)核啟動(dòng)時(shí),內(nèi)核并不是去讀vivi分區(qū)中的地址,而是去讀內(nèi)核MTD分區(qū)設(shè)定的地址;所以,如果內(nèi)核MTD分區(qū)與vivi分區(qū)不相同,很可能導(dǎo)致不能正常啟動(dòng)內(nèi)核及讀取文件系統(tǒng)。2.內(nèi)核的配置的根本結(jié)構(gòu)〔1〕Linux內(nèi)核的配置系統(tǒng)由四個(gè)局部組成〔2〕編譯規(guī)那么Makefile〔3〕內(nèi)核編譯過(guò)程〔4〕下載內(nèi)核到開發(fā)板四、linux的移植、內(nèi)核、文件系統(tǒng)的生成與下載1.linux的移植說(shuō)明本實(shí)驗(yàn)系統(tǒng)運(yùn)行的linux版本是針對(duì)2.4.18進(jìn)行移植的linux-2.4.18.-rm7-pxa1版本,它存放在/實(shí)驗(yàn)軟件/source_sys/目錄內(nèi)。由于移植內(nèi)核所涉及的內(nèi)容較多,且也較復(fù)雜,同時(shí),在涉及到的中斷切換、內(nèi)存管理方面的復(fù)雜移植,一般也不必太過(guò)關(guān)心,網(wǎng)絡(luò)上有專門的非官方組織在完善該事情。我們所做的大多是把該移植好的內(nèi)核,讓它如何在自己的硬件系統(tǒng)上正常的運(yùn)轉(zhuǎn)起來(lái)。因此,我們所做的移植也偏重于應(yīng)用。2.內(nèi)核的目錄結(jié)構(gòu)Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:進(jìn)程調(diào)度子系統(tǒng)進(jìn)程間通訊子系統(tǒng)內(nèi)存管理子系統(tǒng)虛擬文件系統(tǒng)子系統(tǒng)網(wǎng)絡(luò)接口子系統(tǒng)Linux內(nèi)核非常龐大,包括驅(qū)動(dòng)程序在內(nèi)有上百兆。2.4.18內(nèi)核結(jié)構(gòu)圖如圖4-3-1。其主要結(jié)構(gòu)目錄:/arch子目錄包含了所有與硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核移植代碼。其中每一個(gè)目錄都代表一種硬件平臺(tái),對(duì)于每種平臺(tái)都應(yīng)該包括:boot:包括啟動(dòng)內(nèi)核所使用的局部或全部平臺(tái)的相關(guān)代碼。kernel:包括支持體系結(jié)構(gòu)特有的特征代碼lib:包括存放體系結(jié)構(gòu)特有的通用函數(shù)的實(shí)現(xiàn)代碼mm:包括存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)mach-xxx:包括存放該處理器的移植代碼/Documentation子目錄包含有關(guān)內(nèi)核的許多非常詳細(xì)的文檔。/drivers子目錄包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。/fs子目錄包含了所有的文件系統(tǒng)的代碼。/include子目錄包含了建立內(nèi)核代碼時(shí)所需的大局部庫(kù)文件的頭文件,該模塊利用其他模塊重建內(nèi)核。同時(shí),它也包括不同平臺(tái)需要的庫(kù)文件。/init子目錄包含了內(nèi)核的初始化代碼,內(nèi)核從此目錄下開始工作。/ipc子目錄包含了內(nèi)核的進(jìn)程間通訊的代碼。/kernel子目錄包含了主內(nèi)核的代碼,如進(jìn)程調(diào)度等。/lib子目錄包含了通用的庫(kù)函數(shù)代碼等。/mm子目錄包含了內(nèi)核的內(nèi)存管理代碼。/net子目錄包含了內(nèi)核的網(wǎng)絡(luò)相關(guān)的代碼。/scripts子目錄包含了配置內(nèi)核的一些腳本文件一般在每個(gè)目錄下,都有一個(gè).depend文件和一個(gè)Makefile文件,這兩個(gè)文件都是編譯時(shí)使用的輔助文件,仔細(xì)閱讀這兩個(gè)文件對(duì)弄清各個(gè)文件這間的聯(lián)系和依托關(guān)系很有幫助;而且,在有的目錄下還有Readme文件,它是對(duì)該目錄下的文件的一些說(shuō)明,同樣有利于我們對(duì)內(nèi)核源碼的理解。因此,移植工作的重點(diǎn)就是移植arch目錄下的文件。3.內(nèi)核的移植〔1〕設(shè)置目標(biāo)平臺(tái)和指定交叉編譯器在最上層的根目錄/Makefile文件中,首先要指定所移植的硬件平臺(tái),以及所使用的交叉編譯器。改為如下:ARCH:=armCROSS_COMPILE =/opt/host/armv4l/bin/armv4l-unknown-linux-也就是說(shuō),所移植的硬件平臺(tái)是ARM,所使用的交叉編譯器是存放在目錄/opt/host/armv4l/bin/下的armv4l-unknown-linux-xxx等等工具。〔2〕arch/arm目錄下Makefile修改系統(tǒng)的啟動(dòng)代碼是通過(guò)這個(gè)文件產(chǎn)生的。在linux-2.4.18內(nèi)核中要添加如下代碼,〔在移植好的內(nèi)核中請(qǐng)不要添加〕ifeq($(CONFIG_ARCH_S3C2410),y)TEXTADDR =0xC0008000MACHINE =s3c2410endif這里TEXTADDR確定內(nèi)核開始運(yùn)行的虛擬地址。〔3〕arch/arm目錄下config.in修改配置文件config.in能夠配置運(yùn)行“makemenuconfig〞命令時(shí)的菜單項(xiàng)選擇項(xiàng),由于2.4.18內(nèi)核中沒(méi)有S3C2410的相關(guān)信息,所以要在該文件中進(jìn)行有效的配置。由于配置選項(xiàng)較多,在此不做贅述,請(qǐng)參見(jiàn)我們提供的內(nèi)核源代碼內(nèi)的/arch/arm/config.in文件。做完該步,這樣在linux內(nèi)核配置時(shí)就可以選擇剛剛參加的內(nèi)核平臺(tái)了。〔4〕arch/arm/boot目錄下Makefile修改編譯出來(lái)的內(nèi)核存放在該目錄下,這里指定內(nèi)核解壓到實(shí)際硬件系統(tǒng)上的物理地址。ifeq($(CONFIG_ARCH_S3C2410),y)ZTEXTADDR =0x30008000ZRELADDR =0x30008000endif要根據(jù)實(shí)際的硬件系統(tǒng)修改解壓后,內(nèi)核開始運(yùn)行的實(shí)際的物理地址〔5〕arch/arm/boot/compressed目錄下Makefile修改該文件從vmlinux中創(chuàng)立一個(gè)壓縮的vmlinuz鏡像文件。該文件中用到的SYSTEM、ZTEXTADDR、ZBSSADDR、和ZRELADDR是從arch/arm/boot/Makefile文件中得到的。添加如下代碼:ifeq($(CONFIG_ARCH_S3C2410),y)OBJS +=head-s3c2410.oEndif〔6)arch/arm/boot/compressed目錄下添加head-s3c2410.s該文件主要用來(lái)初始化處理器。(7)arch/arm/def-configs目錄下添加配置好的S3C2410的配置文件。(8)arch/arm/kernel目錄下Makefile修改該文件主要用來(lái)確定文件類型的依賴關(guān)系。no-irq-arch$(CONFIG_ARCH_INTEGRATOR)$(CONFIG_ARCH_CLPS711X)\$(CONFIG_FOOTBRIDGE)$(CONFIG_ARCH_EBSA110)\$(CONFIG_ARCH_SA1100)$(CONFIG_ARCH_CAMELOT)\$(CONFIG_ARCH_S3C2400)$(CONFIG_ARCH_S3C2410)\$(CONFIG_ARCH_MX1ADS)$(CONFIG_ARCH_PXA)(9)arch/arm/kernel目錄下的文件debug-armv.s修改在該文件中添加如下代碼,目的是關(guān)閉外圍設(shè)備的時(shí)鐘,以保證系統(tǒng)正常運(yùn)行。#elifdefined(CONFIG_ARCH_S3C2410).macroaddruart,rxmrcp15,0,\rx,c1,c0tst\rx,#1@MMUenabled?moveq\rx,#0x50000000@physicalbaseaddressmovne\rx,#0xf0000000@virtualaddress.endm.macrosenduart,rd,rxstr\rd,[\rx,#0x20]@UTXH.endm.macrowaituart,rd,rx.endm.macrobusyuart,rd,rx1001:ldr\rd,[\rx,#0x10]@readUTRSTATtst\rd,#1<<2@TX_EMPTY?beq1001b.endm(10)arch/arm/kernel目錄下的文件entry-armv.s修改CPU初始化時(shí)的處理中斷的匯編代碼#elifdefined(CONFIG_ARCH_S3C2410)#include<asm/hardware.h> .macrodisable_fiq .endm .macroget_irqnr_and_base,irqnr,irqstat,base,tmp mov r4,#INTBASE @virtualaddressofIRQregisters ldr \irqnr,[r4,#0x8] @readINTMSK ldr \irqstat,[r4,#0x10]@readINTPND bics\irqstat,\irqstat,\irqnr bics\irqstat,\irqstat,\irqnr beq 1002f mov \irqnr,#0 tst \irqstat,#1 bne 1002f @foundIRQ add \irqnr,\irqnr,#1 mov \irqstat,\irqstat,lsr#1 cmp \irqnr,#32 bcc 1001b .endm .macroirq_prio_table .endm (11)arch/arm/mm目錄下的相關(guān)文件那里面那么是移植好的有關(guān)arm的內(nèi)存管理的代碼。在mm-armv.c中,把init_maps->bufferable=1;即可。init_maps是一個(gè)map_desc型的數(shù)據(jù)結(jié)構(gòu)。Map_desc的定義在/include/asm-arm/mach/map.h文件中。(12)arch/arm/mach-s3c2410目錄下的相關(guān)文件那里面那么是針對(duì)s3c2410這款處理器編寫的所需代碼。到此,移植的概要根本結(jié)束。五、linux的內(nèi)核、文件系統(tǒng)編譯與下載1.編譯linux內(nèi)核編譯一份可以運(yùn)行的linux,首先要對(duì)linux進(jìn)行配置。一般是通過(guò)makemenuconfig或者makexconfig來(lái)實(shí)現(xiàn)的。我們選擇makemenuconfig,為了編譯最后得到的內(nèi)核文件zImage,我們需要如下幾步:makedep這個(gè)僅僅是在第一次編譯的時(shí)候需要,以后就不用了,為的是在編譯的時(shí)候知道文件之間的依賴關(guān)系,在進(jìn)行了屢次得編譯后,make會(huì)根據(jù)這個(gè)依賴關(guān)系來(lái)確定哪些文件需要重新編譯、哪些文件可以跳過(guò)makeclean〔該命令用于去除以前構(gòu)造內(nèi)核時(shí)生成的所有目標(biāo)文件、模塊文件和臨時(shí)文件〕makezImage編譯內(nèi)核。編譯通過(guò)后,在目錄arch/arm/boot下生成zImage內(nèi)核文件。2.制作cramfs文件系統(tǒng)利用工具軟件MKCRAMFS制作cramfs文件系統(tǒng),MKCRAMFS工具在/實(shí)驗(yàn)軟件/tools/目錄下,該文件系統(tǒng)是一個(gè)只讀壓縮的文件系統(tǒng),文件系統(tǒng)類型可以是ext2,ext3等等。我們提供的一個(gè)系統(tǒng)目錄是root_tech。它里面包含將來(lái)要用到的所有的文件,它在/實(shí)驗(yàn)軟件/source_code/的目錄內(nèi),root.tar.bz2。把制作工具和root_tech放在同一個(gè)文件夾下,在終端下切換到那個(gè)文件夾目錄下使用命令MKCRAMFSroot_techrootfs.cramfs,就可把root_tech制作成文件名為rootfs.cramfs圖4-3-2的只讀的壓縮的cramfs文件系統(tǒng)了。系統(tǒng)啟動(dòng)后,內(nèi)核將把它加載到內(nèi)存中,解壓。圖4-3-2為文件系統(tǒng)的目錄。當(dāng)應(yīng)用程序和驅(qū)動(dòng)模塊調(diào)試成功后,就可以把驅(qū)動(dòng)模塊添加到內(nèi)核中去,應(yīng)用程序的執(zhí)行文件就可以放到/usr/sbin或/usr/bin的目錄下,然后,再在/usr/etc/rc.local文件中添加驅(qū)動(dòng)程序的設(shè)備文件。之后,利用MKCRAMFS工具把新的root_tech制作成cramfs文件系統(tǒng)。3.內(nèi)核和文件系統(tǒng)的下載(1〕利用vivi通過(guò)超級(jí)終端重新下載vivi在WINDOWS下啟動(dòng)超級(jí)終端,設(shè)置其〔115200,8位數(shù)據(jù),1位停止位,無(wú)奇偶校驗(yàn)〕,用串口線連接實(shí)驗(yàn)系統(tǒng)和PC機(jī)的串口。系統(tǒng)上電,在超級(jí)終端的vivi命令行下輸入:vivi>loadflashvivix,之后,通過(guò)xmodem協(xié)議發(fā)送vivi文件:vivi,等待文件傳送完成?!?〕利用vivi燒寫內(nèi)核和root文件系統(tǒng)在超級(jí)終端的vivi命令行下輸入:vivi>loadflashkernelx,通過(guò)xmodem協(xié)議發(fā)送kernel文件:zImage,等待文件傳送完成。在超級(jí)終端的vivi命令行下輸入:vivi>loadflashrootx,通過(guò)xmodem協(xié)議發(fā)送root文件:miniroot.cramfs,等待文件傳送完成。(注:提供兩個(gè)root:miniroot.cramfs和big.cramfs。miniroot.cramfs是一個(gè)小型的linux,主要用于建立一個(gè)Linux環(huán)境,并可以在此根底上使用后續(xù)的網(wǎng)絡(luò)燒寫方法燒寫大的root系統(tǒng),它在實(shí)驗(yàn)軟件/small_sys/目錄中,big.cramfs在/實(shí)驗(yàn)軟件/big_sys/目錄下。串口燒寫速度太慢。)〔3〕利用網(wǎng)絡(luò)燒寫軟件imagewrite燒寫內(nèi)核和root文件系統(tǒng)根據(jù)第1章實(shí)驗(yàn)步驟的第4步,在LINUX系統(tǒng)下啟動(dòng)nfs,并且將存放供下載的可執(zhí)行文件的目錄共享。Imagewrite文件在/實(shí)驗(yàn)軟件/tools內(nèi)。在實(shí)驗(yàn)系統(tǒng)上mountLINUX主機(jī)的目錄到本地指定的目錄例如:mountxxx.xxx.xxx.xxx:/home/nfs/mnt/nfs在該目錄下通過(guò)imagewrite命令來(lái)下載文件下載vivi./imagewrite/dev/mtd/0vivi:0下載kernel./imagewrite/dev/mtd/0zImage:192k下載root./imagewrite/dev/mtd/0root.cramfs:2m上述vivi、zImage、root.cramfs對(duì)應(yīng)著bootloader、內(nèi)核文件、根文件系統(tǒng)文件的文件名,使用時(shí)根據(jù)實(shí)際情況使用實(shí)際的文件名代替。四、鍵盤驅(qū)動(dòng)程序的編寫遵循實(shí)驗(yàn)四設(shè)備驅(qū)動(dòng)程序的編寫步驟編寫鍵盤的驅(qū)動(dòng)程序。鍵盤的設(shè)備驅(qū)動(dòng)程序?qū)儆谧址O(shè)備的驅(qū)動(dòng),因此,按照字符設(shè)備的規(guī)那么編寫。驅(qū)動(dòng)程序名為Arm7279_driver.c,首先是鍵盤設(shè)備文件的file_operations結(jié)構(gòu)/***********************************************************************-函數(shù)名稱:structfile_operationsUart2_fops-函數(shù)說(shuō)明:文件結(jié)構(gòu)-輸入?yún)?shù):無(wú)-輸出參數(shù):無(wú)*************************************************************************/structfile_operationsKbd7279_fops={ open: Kbd7279_Open,//翻開設(shè)備文件 ioctl: Kbd7279_Ioctl,//設(shè)備文件其他操作 release:kbd7279_Close,//關(guān)閉設(shè)備文件};//其他選項(xiàng)省略/*************************************************************************-函數(shù)名稱:Kbd7279_Ioctl-函數(shù)說(shuō)明:鍵盤控制-輸入?yún)?shù):無(wú)-輸出參數(shù):0*************************************************************************/staticintKbd7279_Ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){ inti; switch(cmd){ caseKbd7279_GETKEY:returnkbd7279_getkey();default:printk(“UnkownKeyboardCommandID.\n〞);}return0;}/*************************************************************************-函數(shù)名稱:Kbd7279_Close-函數(shù)說(shuō)明:關(guān)閉鍵盤設(shè)備-輸入?yún)?shù):無(wú)-輸出參數(shù):0*************************************************************************/staticintKbd7279_Close(structinode*inode,structfile*file){ return0;}/*************************************************************************-函數(shù)名稱:Kbd7279_Open-函數(shù)說(shuō)明:翻開鍵盤設(shè)備-輸入?yún)?shù):無(wú)-輸出參數(shù):0*************************************************************************/staticintKbd7279_Open(structinode*inode,structfile*file){ return0;}/*************************************************************************-函數(shù)名稱:kbd7279_getkey-函數(shù)說(shuō)明:獲取一個(gè)鍵值-輸入?yún)?shù):無(wú)-輸出參數(shù):-1*************************************************************************/

staticintkbd7279_getkey(void){inti,j;enable_irq(33);key_number=0xff;for(i=0;i<3000;i++)for(j=0;j<

溫馨提示

  • 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)論