版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)七 ARM9嵌入式系統(tǒng)硬件驅(qū)動(dòng)基礎(chǔ)開(kāi)發(fā)實(shí)驗(yàn)【實(shí)驗(yàn)?zāi)康摹?. 掌握嵌入式linux內(nèi)核的配置編譯及移植。2. 掌握ARM linux驅(qū)動(dòng)程序的開(kāi)發(fā)流程?!緦?shí)驗(yàn)內(nèi)容】1. 常用linux命令的使用2. 嵌入式linux驅(qū)動(dòng)程序開(kāi)發(fā)步驟3.linux內(nèi)核配置、編譯以及移植【實(shí)驗(yàn)設(shè)備】1. ARM9開(kāi)發(fā)板2. 串口線、USB線3. PC 機(jī)(軟件:VMware Workstation6.5)【實(shí)驗(yàn)原理】嵌入式Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng),它被廣泛應(yīng)用在移動(dòng)電話、個(gè)人數(shù)字助理(PDA)、媒體播放器、消費(fèi)性電子產(chǎn)品以及航空航天等領(lǐng)域中。Linux是開(kāi)放源代碼的操作系統(tǒng),同時(shí)具有體積小
2、、執(zhí)行速度快、較好的可裁剪性與移植性等特點(diǎn)。針對(duì)ARM CPU開(kāi)發(fā)的具有 MMU ( Memory Ma nageme nt Un it)功能的嵌入式 Li nux操作系統(tǒng)是 ARM平臺(tái)上操作系統(tǒng)的最佳選擇。通用的基于ARM系統(tǒng)的Linux開(kāi)發(fā)步驟如下:1) 開(kāi)發(fā)目標(biāo)硬件系統(tǒng):如選擇微處理器,F(xiàn)lash及其他外設(shè)等;2) 建立交叉編譯工具:一般的 GCC工具都是針對(duì) X86體系的,為了能夠生成目標(biāo)板 可執(zhí)行的代碼必須建立交叉編譯工具;3)4)5)6)7)開(kāi)發(fā)Bootloader :建立啟動(dòng)系統(tǒng)的主引導(dǎo)程序;移植Linux內(nèi)核:如基于 ARM的Linux2.4內(nèi)核移植;開(kāi)發(fā)一個(gè)根文件系統(tǒng):如ya
3、ffs文件系統(tǒng)的制作;開(kāi)發(fā)相關(guān)硬件的驅(qū)動(dòng)程序:如LCD、Key pad等;開(kāi)發(fā)上層的應(yīng)用程序:如QT GUI開(kāi)發(fā)。驅(qū)動(dòng)程序的目的一般式驅(qū)動(dòng)硬件正常工作,所以通常所說(shuō)的驅(qū)動(dòng)程序都是針對(duì)特定的硬件來(lái)編寫(xiě)的。驅(qū)動(dòng)程序既可以工作在有操作系統(tǒng)的環(huán)境下,也可以工作在無(wú)操作系統(tǒng)的環(huán)境中。通常在做一些簡(jiǎn)單的硬件控制時(shí),由于功能比較單一,不需要操作系統(tǒng)來(lái)管理,所以針 對(duì)這種情況下的驅(qū)動(dòng)程序相對(duì)來(lái)說(shuō)也比較簡(jiǎn)單,但是作為一個(gè)嵌入式系統(tǒng), 他要實(shí)現(xiàn)的任務(wù)也相對(duì)比較多,比較復(fù)雜,所以需要有操作系統(tǒng)來(lái)對(duì)他進(jìn)行管理。設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和及其硬件之間的接口。 設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái)
4、,硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。 LinUX下的設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,運(yùn)行在內(nèi)核模式。也就是說(shuō),設(shè)備驅(qū)動(dòng)程序?yàn)閮?nèi) 核提供了一個(gè)I/O接口,用戶使用這個(gè)接口實(shí)現(xiàn)對(duì)設(shè)備的操作。我們?cè)谶@個(gè)實(shí)驗(yàn)中主要是將驅(qū)動(dòng)程序的 C文件交叉編譯后添加進(jìn)內(nèi)核,同時(shí),在文件系統(tǒng)中添加驅(qū)動(dòng)測(cè)試程序。最后 將生成的系統(tǒng)映像文件燒進(jìn)開(kāi)發(fā)板中。對(duì)于驅(qū)動(dòng)程序的使用, 有靜態(tài)編譯和動(dòng)態(tài)編譯兩種, 靜態(tài)編譯指的是將驅(qū)動(dòng)程序添加到 內(nèi)核中,動(dòng)態(tài)編譯是指將驅(qū)動(dòng)程序編譯成驅(qū)動(dòng)模塊。我們采用第一種,即靜態(tài)編譯的方式file_operations結(jié)構(gòu),并編寫(xiě)出設(shè)備需要NULL初始化,這些操作
5、函數(shù)將被注冊(cè)到 內(nèi)核會(huì)找到相應(yīng)的操作函數(shù),并進(jìn)行調(diào)用。添加驅(qū)動(dòng)程序。驅(qū)動(dòng)程序的開(kāi)發(fā)步驟如下:1) 首先,用戶在自己的驅(qū)動(dòng)程序源文件中定義 的各種操作函數(shù),對(duì)于設(shè)備不需要的操作函數(shù)用 內(nèi)核。當(dāng)應(yīng)用程序?qū)ο鄳?yīng)的設(shè)備文件進(jìn)行操作時(shí),如果操作函數(shù)使用NULL,操作系統(tǒng)就進(jìn)行默認(rèn)的處理。ARM板進(jìn)行相應(yīng)驅(qū)動(dòng)的測(cè)試。2) 設(shè)備驅(qū)動(dòng)程序編寫(xiě)完成后,就可將其添加到linUX內(nèi)核中,這需要修改linux的源碼, 然后重新配置編譯linux內(nèi)核。3) 編寫(xiě)相應(yīng)的驅(qū)動(dòng)測(cè)試程序,下載到Workstation,用戶名為root,密碼為123456,即以LinUX常用命令:【實(shí)驗(yàn)步驟】切換到根目錄切換到當(dāng)前目錄下的 di
6、r目錄下 切換到上一級(jí)目錄顯示當(dāng)前目錄下的文件列表編輯文件file將文件file解壓1. 打開(kāi)桌面上的虛擬機(jī)軟件VMware 超級(jí)用戶的身份登錄。打開(kāi)終端,學(xué)習(xí)一下/dir# cd# cd# cdfile# ls# vi# tar xzvf file.tgz# rm file 刪除文件# rm -r dir刪除當(dāng)前目錄下叫 dir的整個(gè)目錄# cp source target將文件source復(fù)制為target,可以指定文件路徑# cat file 查看file的內(nèi)容# mv file /dir 將當(dāng)前目錄下的file文件移動(dòng)到dir目錄下還有一些命令會(huì)在后面的使用中具體講解。2. 在終端里進(jìn)
7、入 /opt/FriendlyARM/Nano2410V2目錄下,其中有一個(gè) kernel文件夾,這就是我們要操作的 LINUX的內(nèi)核。進(jìn)入kernel/drivers/char ,即內(nèi)核驅(qū)動(dòng)的字符型設(shè)備驅(qū)動(dòng) 文件夾,然后ls查看里面的文件列表,其中有一個(gè)super2410-leds.c文件,這是一個(gè)led驅(qū)動(dòng)程序,但此程序需要修改才能適用于我們的ARM板。3. 輸入vi super2410-leds.c,對(duì)此文件進(jìn)行編輯。在vi編輯器里面默認(rèn)的是命令模式,鍵入i就進(jìn)入了編輯模式。程序里 led_table中定義了四個(gè)端口,我們將GPIO_E13改為vi Makefile 。切換到編輯+=su
8、per2410-leds.o 。按 Escsuper2410-leds.c 編譯成GPIO_F7,即我們只對(duì)板子上的 LED2進(jìn)行操作。修改之后按Esc回到命令模式,然后輸入: wq保存退出。4. 打開(kāi)kernel/drivers/char目錄下的 Makefile文件,即輸入 模式,在第 199 行里輸入 obj-$(CONFIG_SUPER2410_LEDS) 鍵,輸入:wq保存退出。這一步操作時(shí)為了在編譯內(nèi)核時(shí)將super2410-leds.o 文件。J昴蘇倆牖WBjH WB制朋關(guān)巫IM I jj業(yè)jJjjjggg墜壘乂和D 編帥&活理)終相)轉(zhuǎn)到eg幫肋旦)obj- S'
9、; O rsh IJ.UM' += sync 1 ink.obj-S>+- n_hdl.oobj QN l(;_SPECI ;LI XI += spccialiK.oobj -$1 U74- G VM G_WJI LT I N_SER: AL i += amiseri;il.oohju2 Iij 2羽2 h += se r_a22ii2 .o gtner icse r ia Lqobj -'h' u I(iii_sX) += ss+o gf nt r if_se r ia I »oobjIG_RIO) += r io/r io .o gener ic_5
10、e r ia I .obj -$' tlJM-1(i;_Sil_SCI ) += sh-sc i .o gent? r ic_ser iii I .oobj-$(aT(> SERLU.IG7) += ieriallfiZ.oohj-HT+H丄_人林147 JAjO += gf nc r ic_ser ia I .q vrfpscc ,qobj-S'+= gener ic_ser ia I .o vrtp_scc.oobjI<sJJVWj()Ul)_bCl; += gene r ic_se r ia I .o vnr_scc .oobj- S' tJJM-1G
11、_SEKI AL_TX 12 > += gener ic_5(?r ii)L . sor in I _tx39'12 .o 0歷-| 0刑;】9"沁4口山=0=扯町1"+= nano24hut tons.oobjfHI £4(1)+= s3c24H3-3dc.oobj-爲(wèi)川IMUZjaBM;s3c2410-ls.rmdule obj-$'出 fUdLL 卜【小 +=super2410- Leds.o即輸入vi Config.in。切換到編輯SupportSup er2410 Leds'保存退出。這樣在運(yùn)行 menuconfig Sup
12、port Super2410 Leds的字樣,如果選中并編譯通過(guò),驅(qū)動(dòng)程序iuhtlir-S' CLNdGRICh += r io subdi iir-$' UIG I M += joys I ick5. 打開(kāi) kernel/drivers/char 目錄下的 Config.in 文件, 模式,在第 89 行里輸入 dep_tristate CONFIG_SUPER2410_LEDS ,然后按 Esc 鍵,輸入:wq 配置字符設(shè)備時(shí)就會(huì)出現(xiàn) 就加到內(nèi)核中了。roDtilorjUhQ韭/opt/ Friendly 兀RM/Na 卿2:斗ll'N也gfpe Htfr我更扁圈
13、型 r,V編輯噲賁看理終輸1? 轉(zhuǎn)到© 幫助凹e I軸E buu ' Eiiab Ip fi bud I 'le Srtfi r Lbud I “l(fā)e Sns rIPS2 Keyboard Support CllJGPC_KETiGird Reader 0 Suppor I ' CLlSHC_l TS 1 72_SCR1)Uni Reader 1 Support ' QN K;_【Tg 1 72-窖 CRJif f "SanhiJlXPFRIirNrAL* = -a= S* 1: Itient i !i la le ' (jjnwdo
14、re A2232 se r la I zppnri f EXFEtd 隔NMdJ ' GlhHG_A22垃soilr ce dr iversZst r ia l/Chn t' ig + inSiipe r2411)lno241(IA|Shno2410Adfp_t r i S la If dfp_t r i s la IF |dfp_t r i s la If dep_t r i s la leCH S3C2410'biippor t 'Siippor t 'Suppor t 'Suppor LLed 5 'V2O N K:_SIPKR24
15、10_Lh:nSButtons a14' 11( I A_V2_HinT<hSInput ' aN-' 110A_2_.DC;丸GMIfl TouchScrfenI<LS3C24O_T<1JC1CEE£N SCCNIC;_AR6.返回到Character devices,回車進(jìn)入,找到/kernel目錄下面,輸入 make menuconfig,進(jìn)行內(nèi)核的配置。首先找到Support Super2410 Leds ( NEW),鍵入空格選中此項(xiàng)。< >f Ex i L<Select>subiTiiu > Hjnc
16、 hide s» <1 ec lude s . ex i t K <?> for fc Ip.<、m)du le ciipjib kbe rmina Iconrpa I ib le IKRTs ) sc i ia I suppor 1Supp>< Help >hhno2410A W.OMino2410A 2.0 S3C2'410 TouchScreeii (卩H) hu I lojis Mi pILinui Kerne I v2,4, IS-rdsT-pKil Cionf igura t ionAl l ow keys na v ig
17、q le I he irpnu » <Eii le r> sc led s Hi訕 h雖hwd le I le r s a re ho ikey !i Pressing <¥> nedular ize5 fcalures. Pre盯 <E?c><E3c> LoLcjTcnd: * billi IL- in exc luded <曙 iwdu leenjot創(chuàng) losi Ihosl/cipiy F nendb A RM, N ana2 410'2/ktimclf *1 i r 1 tia I le rnm na I
18、* Iuppor t ioT coiiso le on v i lua I< > tandard/gene r ic ( K25U/1(5550 and f hl inii landard itfiiil poF I flippor I trial dr i ve r s >曰 然后返回上一級(jí),進(jìn)入 General setup,在Timer and CPU usage LEDS 上鍵入空格,取消選 中。如果選中則兩個(gè) LED分別用于Timer和CPU,我們的測(cè)試程序?qū)⒖床坏叫Ч?,故在?處將其取消。H X艾忡E 絹種E? 程昏巴 終瀟B 轉(zhuǎn)到fQ 幫肋旦、,c<Se I
19、cfl>Linux Kernel v2 »<*lK-rralt7pi;a I Gvnf igiir« I ionsubitthuti> .inc IhJp ?i <2 exchJides. ex i I H <?> for tt Ip.< > riDduc able< 上 : I >< Ic 1P >HI ' |lA''t)w key navi百ale lhe ittiiu . <Ejl tc i > selecLi High I igh n rd k i r rs
20、a re hoi key. Pre s li ing <V> <M nmdu lar izs fea lures.卩£汕 <E!ic><tsc> to Lc輕nd: t* bu 1 L' in excLuded <M inxJu Ic< > e r lie J skjppQr i for M SC b ina r ie !if ower MnagerwnL supporl t expe r inrn ta Ht J upporl (USECLE.PMr 1i&ab« OCM_KJLLERr ledi
21、ice TTV Io L tnidu a r a i t hiiT t i c 'Jiige< > I SC fF pt r sona lilyI 0 no t run pa r 5e_lag_cn(d I inef ) iii ar ch/a rm/kcrne 1/se tup c fan 11 ke rne I conurand sir inp : " roo L -1 f04 rrem=32M mSKOEKSlsSf * e r ne l-iiude a I ignrtriii I trap handler7. 在終端里輸入make dep,這一步僅僅在第一
22、次編譯時(shí)需要,為的是編譯時(shí)內(nèi)核知道文件之間的依賴關(guān)系;輸入make clean,該命令用于清除以前編譯內(nèi)核時(shí)生成的所有目標(biāo)文件、模塊文件和臨時(shí)文件;輸入make zImage ,即將內(nèi)核編譯成 gzip壓縮形式的image。編譯通過(guò)后會(huì)在目錄kernel/arch/arm/boot 下生成 zimage 內(nèi)核文件。kernel/drivers/char 目錄會(huì)看到 super2410-leds.o 文件,如果 cat8. 編譯好之后,我們查看沒(méi)有則我們的LED驅(qū)動(dòng)程序沒(méi)有加入到內(nèi)核。另一種方法是在終端里kernel目錄下輸入System.map | grep leds,如果有 matrix4_
23、leds_init、matrix4_leds_ioctl、matrix4_leds_fops 幾個(gè)是super2410-leds.c文件里的函數(shù))等,則表明驅(qū)動(dòng)已經(jīng)正確地加入到了內(nèi)核。arjir I iiiux-ohj copy binary -ft .noic -R .comitnt -S coirp cinux zJnnge iTuke 111 Leav ing d i rec lory /opl/Fr Lend lyARNfNiio2410/ke rue I/ei i ch/a rin<boo L' roQIhps t kerne J ft Ml SyEiemnsp 丨譽(yù)切
24、 lutbcOOlOOcH cOOlelGS c00caci4 cOOcaecO cOOca f24 cOOcb474 cOlcfc44 cOldlOiic c020dSlc|rootl? mi t r ix4_leds_in i i? _in i t ca I l_nB i r it4_leds_in i iT Kc I leds13 tcTTse I tEi lereg ite r_ leds rm t r ix4_kds_iflf 11 led%ta tenu I r ix4 IcJifops k leds ddocaIHgst kernf I(這9. 將zImage文件拷貝到/mnt/
25、hgfs/share文件夾里,則在 windows下我們可以獲得此 文件。下面進(jìn)行驅(qū)動(dòng)測(cè)試程序的操作。10. 在虛擬機(jī)的 /opt/FrindIyARM/Nano2410V2/examples找到leds文件夾,里面有兩個(gè)文件,main.c是led的測(cè)試程序,Makefile是用來(lái)指明編譯 main.c文件時(shí)要用的編譯器。在 終端里進(jìn)入此文件夾,輸入make后在該文件下生成一個(gè)二進(jìn)制程序led。將其重命名為ledtest,拷貝到 /opt/FriendlyARM/Nano2410V2/root_qtopia_tp/sbin下。這個(gè) root_qtopia_tp 文件夾是我們板子所使用的文件系統(tǒng)
26、。"一""11. 將 root_qtopia_tp 文件夾拷貝到 /opt/ FriendlyARM/Nano2410V2/mkyaffs 文件夾下,在終端里進(jìn)入此文件夾,輸入命令./mkyaffsimage root_qtopia_tp test.img。執(zhí)行完后在mkyaffs文件夾下會(huì)生成test.img文件,這是我們要下載到 ARM板子上的文件系統(tǒng)映像文件。12. 將前面的zImage和test.img文件下載到 ARM板,然后重新啟動(dòng),通過(guò)windows主機(jī)的超級(jí)終端進(jìn)行驅(qū)動(dòng)程序的測(cè)試。13. 在windows主機(jī)下,打開(kāi) 開(kāi)始-程序-附件-通訊-超級(jí)終
27、端,輸入自定義的名稱,選 擇COM 口(默認(rèn)COM1即可),端口設(shè)置如下圖:coil s性停止位:數(shù)據(jù)流控制電):還隸認(rèn)值1將ARM板上面的COMO和主機(jī)的串口用串口線連接,上電后會(huì)在超級(jí)終端里看到啟動(dòng)信 息,當(dāng)出現(xiàn)“此時(shí)可以通過(guò)超級(jí)終端控制我們的14.這時(shí)候可以看到 LED2在閃爍,其控制程序是/etc/rC.d/init.d下面的leds。輸入./leds stop后,則此程序被結(jié)束,LED不再閃爍。 確走 I 取消應(yīng)用® e tP3+ -趙皺終端匚回區(qū)1文件貓轄血宜看00呼別傳i去幫助gg&脅ules木丨Slot initializedUsing /lib/mincsd
28、_disk. oWarning: loading inmcsd_disk will taint the kerne oprietary LicenseSee http: /wvivi, tux . org/lkml/Hexport-tain ted f c lesrlease press Enter to actiuat' irver version Boa/0.94.13 ll/Jan/2031:15:58:04 *0000) ll/Jan/2031:15:58:04 -0000 JQ this console. IJ303: server built F oa: starting
29、serverootSFriendlyARH /H=1<HI> 0:02: Of 自動(dòng)栓測(cè)115200 G-N-1'1 '1 '' 1沖Please p ress Enter to active this con sole”時(shí)鍵入回車進(jìn)入操作系統(tǒng),如下圖ARM 板了。15.進(jìn)入/sbin,查看文件列表會(huì)發(fā)現(xiàn)我們添加的驅(qū)動(dòng)測(cè)試程序ledtest:它七就-超級(jí)異瑞口回岡:件®躺輯(1)查看迪呼凹電)檯送 幫助Qp cs蘊(yùn)魯童 erootSFriendlyPRH/etcltt cd IdrootSFriendlyRRM/* Is sbin/adj
30、timexifdownmadplayarmcomtestifupmakedevsboaimagewritemkswapf diskinetdmodboxfreeramdiskinitmodprobefsck.minixinsmodnameifftpledpivotrootgettvlecl-playerpoweroffhaltledtestreboothdparmloadkmaprmmodhwclocklosetuprouteifconfigIsmodrunlevelrootFriendlyARH/#<II1>11已連接 0:102 ABEItfL152003-U-l進(jìn)入/dev會(huì)
31、看到我們加入內(nèi)核的驅(qū)動(dòng)leds(驅(qū)動(dòng)程序super2410-leds.c中定義的驅(qū)動(dòng)名稱為leds),如下圖:test -超級(jí)終瑞B(yǎng)回區(qū)1文件電鸚輯電)查看呼凹電)樓送幫助 cS海g童 B ftp gettv halt1 hdparmI hwclockled lecl-player ledtest loadkmap losetuppiuot_root poweroff reboot rmmod routeIdifconfigIsiiiodrunlevelrootFriendlyARH/# Is dey/memptmxbuttonsfb0consolefullmixerttycua0h360GL
32、tsrawrandomttycualrootttycua2knemnullt tvdspledsportsdalttyrootFriendlyARH/# _<II1>1p1已連接 0:l?:3c ABEItfL152003-U-lU''Hsi-i這時(shí)候我們進(jìn)行驅(qū)動(dòng)程序的測(cè)試,輸入ledtest 1 1則點(diǎn)亮LED2 ,輸入ledtest 1 0則熄滅LED2。hwclocklosetuprouteifconfigIsmodrunlevelrootSFriendlyARH/# Isdev/memptmxbuttonsfb0consolefullmixerttycua0
33、h360eLtsrawrandomttycualrootttyCLJ(32knemnullttydspledspor*tsdalttyrootSFriendlyARH/# ledtestUsage: ledsled_nc)0ilrootFriendlyARH/H ledtest 1 0rootSFriendlyARH/# ledtest 1 1rootFriendlyARH/#口回岡d_ VVL15200 3-U-1 _II已連接 0:15:0c ABEItf實(shí)現(xiàn)一個(gè)簡(jiǎn)單的linux字符設(shè)備驅(qū)動(dòng)步驟1:編寫(xiě)驅(qū)動(dòng)程序1. #in elude <li nu x/module.h>2.
34、#in elude <li nux/in it.h>3. #in elude <li nu x/ker nel.h>4. #in elude <li nu x/edev.h>5. #in elude <li nu x/fs.h>6. #i nclude <li nu x/kdev_t.h>7. #in elude <asm/uaccess.h>8. #in elude <li nu x/deviee.h>9. #defi ne DEVICE_NAME "cdev_zha ngwei" 10.
35、 int nu mber_of_devices = 1;11. struet edev mydev;12. dev_t dev = 0;13. ehar data128 = "/0" / the data of my deviee14. struet elass *myclass;15. statie int mydev_open(struet inode *inode, struet file *file)16. 17. pr_in fo("mydev driver open!/n");18. return 0;19. 20. statie int m
36、ydev_release(struet inode *inode, struet file *file)21. 22. pr_in fo("mydev driver released!/n");23. return 0;24. 25. ssize_t mydev_write(struct file *file, constehar _user *buf, size_t count, loff_26. t *f_pos)27.ssize_t ret = 0;28.p r_i nfo("mydev_write!/n");29.pr_in fo("w
37、riti ng %d bytes/n", coun t);30.if (eou nt > 127)31.return -ENOMEM;32.if (cou nt < 0)33.return -EINVAL;62. 34.if (copy_fro m_user(data, buf, coun t) 35.ret = -EFAULT;36.37.else 38.data127 = ”/0”;39.pr_in fo("ker nel received: %s/n", data);40.ret = count;41.42.return ret;43. char
38、 * buf, size_t len,loff_t* off)44. static ssize_t mydev_read(struct file* filp,45. 46.if( cop y_to_user(buf,data,le n) 47.48.return -EFAULT;49.50.51.return len;52. 53. struct file_ op erati ons mydev_fo ps = 54.ow ner = THIS_MODULE,55.open = mydev_ open,56.read = mydev_read,57.write = mydev_write,58
39、.release = mydev_release59.60.;61. static int _in it mydev_i nit(void)63.int result, error;64.result = register_chrdev(O, DEVICE_NAME, & mydev_fo ps);65.pr_in fo("udev_cdev: get major nu mber: %d/n", result);66.dev = MKDEV(result, 0);67.myclass = class_create(THIS_MODULE, "mydev_class");68.device_create(myclass, NULL, dev, NULL, DEVICE_NAME);69.return 0;70. 71. static void _exit mydev_exit(void)72. 73.cdev_del(&m ydev);74.un register_chrdev_regi on( dev, nu mber_of_devices);75.device_destroy(myclass, dev);76.class_destr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線教育課程購(gòu)買合同
- 智能科技發(fā)展合作協(xié)議
- 在線教育課程設(shè)計(jì)合作協(xié)議
- 廣告設(shè)計(jì)與推廣服務(wù)合同
- 深圳市物流運(yùn)輸服務(wù)協(xié)議
- 餐飲行業(yè)食品加工流程衛(wèi)生安全協(xié)議書(shū)
- 智能家居產(chǎn)品研發(fā)委托協(xié)議
- 電子支付結(jié)算資金監(jiān)管協(xié)議
- 共享經(jīng)濟(jì)項(xiàng)目運(yùn)營(yíng)服務(wù)合同
- 職業(yè)舞蹈教師私人教學(xué)服務(wù)合同
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 社會(huì)組織等級(jí)評(píng)估報(bào)告模板
- GB/T 12173-2008礦用一般型電氣設(shè)備
- 2023年1月浙江高考英語(yǔ)聽(tīng)力試題及答案(含MP3+錄音原文)
- 房產(chǎn)抵押注銷申請(qǐng)表
- 【課件】第三課 蒙娜麗莎 課件高中美術(shù)湘美版美術(shù)鑒賞
- 新媒體研究方法教學(xué)ppt課件(完整版)
- 東芝空調(diào)維修故障代碼匯總
- 建筑物成新率評(píng)定標(biāo)準(zhǔn)
- 工藝管道儀表流程圖(共68頁(yè)).ppt
- 五項(xiàng)管理行動(dòng)日志excel表格
評(píng)論
0/150
提交評(píng)論