




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE PAGE 17瓣ARM9般外接晶片讀摆寫的驗証疤-以825柏5為範例暗外接825般5主要目的叭是透過位址捌線及資料線奥做外接晶片蔼讀寫的驗証蔼。鞍ARM9可班透過如圖1敖所示的轉接啊訊號線擴充扒其他的晶片懊功能。瓣圖1. A胺RM-9的敖轉接訊號線解碼位址邦圖2代表A哀RM-9的挨外接記憶體靶解碼位址分袄佈,共分8爱個區段(b皑ank)。哎這些區段分把別由nGC矮S0-nG般CS7來解扳碼,每個區靶段(ban背k)共有坝128 M板B的記憶體澳空間。 敖B傲ank0及版Bank1笆分別由快閃邦記憶體(F氨lash 跋memor白y)及隨機胺讀取記憶體办(SDRA皑M)所佔用搬。Ban
2、k暗2的解碼致癌能線nCG按S2位於透版過ARM-扮9發展板轉袄接槽的第3瓣4個接腳,懊如圖1所示颁。nCGS笆2解碼位址罢分佈於0 x耙-0 x,如叭圖2所示。皑y。阿圖2. n扮GCS2的盎解碼位址分瓣佈圖3中AR矮M9的記憶八體區段(B哀ank)的扮解碼線nG斑CS2接8255的/败CS;(A霸1, A0邦)分別接8傲255的(挨A1, A案0);DA傲TA7-D案ATA0分跋別接825袄5的D7-碍D0,如圖暗3所示。所拜以8255邦的(POR矮TA, P百ORTB,百 PORT白C, CT背L)的寫入扮位址定義如袄下爸:爱i。八PORTA把=0 x;岸PORTB凹=笆0 x;皑POR
3、TB俺=鞍0 x;艾CTL=把0 x;皑圖3. 8扒255與A奥RM-9的矮連接方法哎ARM-9按的背資料線懊共有32位盎元(DAT哎A31-D版ATA0)霸。然而外接版記憶體(或罢I/O)可罢規劃為8位碍元、16位疤元及32位胺元共三種模拌式。究竟選白擇那種模式昂,可透過規哎劃BWSC翱ON暫存器蔼的內容來決扳定。BWS佰CON暫存安器的位址為熬0 x矮。規劃Ba跋nk2的外爱接記憶體(靶或I/O)皑 癌資料線傲讀寫半位元數八為8位元,挨可規劃BW捌SCON暫案存器的(b耙it9, 巴bit8)班為00,如捌圖4所示。氨程式規劃的俺參考方法如瓣下凹I。疤圖4. 笆BWSCON暫存器的般bit
4、10岸-bit0败所規劃的功案能八ARM-9白外接記憶體邦(或I/O翱)的讀寫時柏序如圖6所按示。圖6中蔼讀寫的各項摆時間參數(澳Tacs,按 Tcos拜, Tac胺c, Ta熬cp, T叭coh, 鞍Tcah)袄可由BAN办KCONx按暫存器(x佰=0,1.哀.5)來調哀整。BAN奥KCON2隘暫存器的位矮址為0 x摆c敖,如圖5所般示。绊x。昂圖5. B安ANKCO蔼N2暫存器翱的位址半圖6. 搬ARM-9摆外接記憶體盎(或I/O敖)的讀寫時爱序俺8255白驅動程式之笆建立艾在Linu矮x核心中,扒驅動程式扮八演特殊的皑黑盒子角拔色,它們能艾駕馭硬體裝矮置,並且隱啊藏硬體的實佰際作業細節扳
5、,使硬體的蔼回應方式符凹合一組嚴謹叭規定的程式霸介面,讓應艾用程式能透半過一套標準氨化的系統呼巴叫來間接操俺作硬體。以凹實際的硬體拔動作來實現斑系統呼叫所版定義的功能挨,正是驅動斑程式所扮演瓣的角色。由吧於系統呼叫邦這層軟體介百面的存在,扮使得驅動程叭式與核心的碍其餘部分可盎以分開製作罢,並且在需跋要時,才在颁執行期將驅扳動程式安唉插到核心败裡。這種模哀組化的設計,不僅降低翱了Linu班x驅動程式板的設計難度板,也使得核埃心不必為了鞍支援新硬體把而頻頻改版邦。班u。靶裝置驅動程板式大致分為澳區塊驅動程绊式、字元驅哀動程式及網凹路介面驅動笆程式。區塊奥驅動程式是颁以固定大小佰長度來傳送拌轉移資料
6、,办且大致是可翱以隨機存取拔資料的設備哎,如硬碟機或光碟機;扳字元裝置是背可被當成一拌連串位元組袄(串流)來敖存取的裝置耙,也就是說肮這類裝置的跋存取方式就半像檔案一樣摆。字元裝置隘驅動程式的袄主要任務,鞍正是實現這吧種行為。這昂類驅動程式把至少會實作背四項系統呼鞍叫,分別是斑open(霸)、clo按se()、翱read(案)和wri叭te()。隘我們所熟悉佰的操控台與般序列埠(/肮dev/c皑onsol安e、/de巴v/tty矮S0般板),就是典翱型的字元裝版置,因為它败們都可順利奥化身成串罢流。字元翱裝置必須透吧過檔案系統白節點(fi凹lesys熬tem n般ode)來百存取;檔案碍系統節
7、點俗白稱為裝置檔挨(devi背ce fi碍le),例半如/dev柏/ttty拌S0、/d板ev/co鞍nsole颁。字元裝置霸與一般正常扳檔案之間的啊最大差異,是一般檔案搬容許你任意暗改變存取點胺(檔案指標皑),但字元啊裝置大部分皑都只是資料凹通道,只能隘被循序存取熬。靶e。疤1艾 懊模組程式的捌基本觀念摆一個驅動程挨式必須被撰扳寫成模組的安型態,才能跋夠具備供使按用者載入與拔移除的特性肮。因此一個靶驅動程式必班然會具有載翱入模組函式氨與移除模組啊這兩個函式笆。故此兩個胺函式就分別颁載入驅動程绊式與移除驅澳動程式的角爸色。版w。伴應用程式在扮啟動之後,巴從頭到尾都芭只執行同一爱件任務。另啊一方
8、面,模敖組在被載入盎核心之後,扒必須先向核哎心註冊它自澳己,以便服败務未來的r叭eques盎t,而其拔”按main罢”爱函式這時候半就立即結束靶了。換言之扮,init皑_modu碍le( )佰 函式 (阿模組的入口版) 的任務盎,是將模組翱的功能 (胺函式) 準耙備好,使這邦些功能可在伴事後被調用耙。模組的第版二個入口點颁是 cle般anup_叭modul隘e ( )巴,它在模組翱被卸載之前肮會被叫用一氨次,其作用蔼就是告訴核拔心:我要拌離開了,別氨再叫我做任办何事。圖奥7袄描繪模組如霸何利用函熬式呼叫與岸函式指標氨,將新功袄能加到運行稗中的核心。败應用程式則摆是在使用挨者空間(霸user 佰
9、space翱) 內運作罢。八每當應用程把式發出系統耙呼叫,或是盎發生硬體中办斷時,LI澳NUX便會拜將執行模式绊從user拌-spac埃e切換到k澳ernel矮-spac背e。驅動程霸式碼必須在般kerne扮l-spa稗ce內運作罢。靶e。肮圖案7 稗將模組連結拌至核心 昂2埃主標號(M傲ajor 爱numbe鞍r)與次標哀號(Min皑or nu阿mber)熬 拜d。办當使用者要矮存取字元裝瓣置時,必須捌透過檔案系扮統裡的代表翱名稱吧,岸這些特殊檔按是集中在 笆/dev/翱目錄之下。澳使用指令摆b。盎ls-l 阿/dev绊得到如圖暗8佰的結果。可翱看出在日期耙欄之前可以笆發現兩個以班逗號隔開的
10、扮數值,在逗凹號左方的數颁值是該裝置矮檔的主編號(ma坝jor n翱umber拜),而逗號右方的數值奥是次編號耙(min翱or nu般mber)扮。主編號笆代表裝置袄所配合驅動耙程式。當核昂心收到op办en( )斑系統呼叫時巴,就是依據霸主編號啊來選擇驅動芭程式。另一霸方面,次胺編號的意疤義只有驅動奥程式自己才按知道,核心疤會將使用者版給定的次編伴號轉交給驅版動程式,核霸心本身用不般到次編號。背一般而言,隘驅動程式以岸次編號來辨爱識同類裝置巴的個體。百8。办圖白8胺隘主編號與次凹標號把要增加一個笆新驅動程式胺到系統,等伴於指派一個挨主編號給它叭。這項指派疤應該在驅動芭程式(模組胺)的初使期叭,
11、藉由呼叫扳linu办x/fs.芭h 所定斑義的reg罢ister板_chrd耙ev( )瓣函式來完成稗:翱H。艾int r阿egist芭er_chrdev(耙unsig扒ned i办nt ma癌jor, 霸const疤 char巴 *nam艾e, 扮struc半t fil昂e_ope岸ratio拜n *fo拜ps);爸o。扳此函數的傳斑回值代表註疤冊動作的成挨功與否。負矮值表示失敗扮,0或正值跋表示成功。叭major半引數是驅動邦程式想要註凹冊的主標號袄;name爱是裝置的名傲稱(如果註拌冊成功,這霸名稱將會出稗現在 /p瓣roc/d案evice罢s檔案的內啊容裡);f耙ops是一胺個指標,指
12、哀向一個函拜式指標陣列伴(arr懊ary o瓣f fun稗ction隘 poin瓣ters)盎,此陣列紀埃錄了驅動程背式各個入口半點(作業方扮法)的位置哎。捌v。班在驅動程式矮向核心完成盎了註冊之後伴,驅動程式碍的各項作稗業方法(笆opera瓣tion)稗就與給定的扒主編號產生挨了關連性。懊每當有人對肮字元裝置檔岸進行某項操胺作時,核心唉就能從該裝拌置檔的主編肮號找出對應奥的驅動程式俺,並透過其班file_吧opera八tions摆結構來呼叫稗對應的作業疤方法。下一凹個問題是如岸何給應用程暗式一個名稱办,讓它們能利用此名稱坝來啟動驅動扳程式。這個八名稱必須安背插在 /d傲ev/ 目百錄下,而且
13、俺必須關連到佰驅動程式的搬主編號與次背編號。在檔啊案系統製作氨節點的命令版是mkno凹d,你必須败有特權身分癌(root坝)才能使用熬此工具。m百knod至阿少需要四個參數,例如按:斑V。拔mknod案 /dev皑/芭c8255唉_driver把 c 邦42案 0吧第一個引數百是節點名稱袄,其後的三翱個引數分別版是裝置類型袄(c代表c拔har d拜evice盎)、主編號隘、以及次編笆號。就像任跋何儲存在磁翱碟上的普通安檔案一樣,摆mknod矮所產生的裝霸置節點會被盎保存下來,懊除非刻意用袄rm命令刪拜除它們。氨我們在驅動百程式主程式盎中做以下定耙義及宣告:邦5。败#defi邦ne鞍把CHDRV
14、般_MAJO肮R搬岸42柏char 拔CHDRV佰_NAME翱 = 稗摆c8255唉_driv艾er懊;芭B。爱而我們系統摆實作時的驅盎動程式註冊矮的動作是在拌一個扒init_阿modul跋e唉程式中實現唉:啊J。百int init_m办odule俺(void癌)鞍if(re把giste癌r_chr熬dev(C碍HDRV_半MAJOR扒, CHD拜RV_NA半ME, &埃c8255吧_chdr蔼v_fop跋s) 叭I。哀鞍鞍print凹k(ke拔rnel:暗 %s: 板Unabl扒e to半 regi般ster 班chara白cter 懊devic霸en,翱 CHDR白V_NAM案E);爸J。
15、哎把班retur胺n -EI阿O;靶肮哀爸.搬在模組被卸岸載之前,它凹必須先釋放巴主標號,而疤這個動作可搬由unre吧giste八r_chr凹dev( 笆) 完成,斑我們在模組癌的清理函式版裡呼叫它:罢H。唉void 巴clean拔up_mo案dule(班void)哎unreg傲ister摆_chrd靶ev(CH埃DRV_M爱AJOR,绊 CHDR跋V_NAM瓣E);吧V。颁print盎k(un肮loade阿d.n俺);半retur埃n;蔼CHDR坝V_MAJ半OR拜引數是要被半釋放的主編伴號,唉CHDRV白_NAME搬是當初註冊啊的裝置名稱癌。這兩個引叭數必須與當肮初呼叫registe捌r_
16、chr败dev( 佰) 所用的霸引數一致,罢否則 un疤regis哎ter_c佰hrdev笆( ) 將绊傳回EI艾NVAL。摆V。啊2暗 笆檔案作業拔與file芭 結構袄驅動程式內皑部以一個f芭ile結構傲來代表一個把已開啟的裝埃置,核心透扳過一個fi挨le_op芭erati笆ons 結唉構來存取驅佰動程式內部矮的作業函式柏(meth昂od)。這摆結構定義在翱linu矮x/fs.邦h把。file把_oper扮ation埃s 結構包袄括斑指向驅動程阿式的绊各種系統呼爱叫,例如r笆ead, 案write瓣, ope败n, re败lease傲.按。操作檔案颁結構肮的各種系統八呼叫,其實肮際動作就是挨
17、靠驅動程式板內部的作業稗系統來達成巴的。靶file_奥opera跋tions版 結構宣告斑範例如下:懊t。埃stati班c str颁uct f扳ile_o岸perat扒ions 绊c8255把_chdr扳v_fop百s = 摆T。唉 按 NUL爱L, 爸 /*ls拔eek*/傲白read:阿 c825岸5_chd巴ev_re八ad, /跋* rea艾d */爱M。扮叭write半: c82办55_ch翱dev_w傲rite,瓣 /* w凹rite 扒*/颁j。案版 挨N按ULL, 懊 /*笆 read艾dir *伴/拔 版 NUL斑L, 办 /* P挨OLL *半/ 巴 版 NUL暗L, /澳
18、* ioc邦tl */氨 艾 NUL白L, /芭* mma般p */爱 o坝pen: 哀c8255奥_chde懊v_ope伴n, /*瓣 open啊 */蔼k。凹 摆 NUL霸L, 瓣/* FL凹USH *胺/邦办relea稗se: c耙8255_哎chdev芭_rele霸ase, 哀/* re邦lease白 */扒V。懊 罢 NUL翱L, /唉* fsy矮nc */矮 按 NUL昂L, /肮* fas啊ync *安/肮 绊 NUL笆L, /板* loc邦k */班 哎 NUL俺L, /跋* rea把dv */靶 扒 NUL碍L, /哀* wri八tev *疤/绊 碍 NULL翱, /*哎 s
19、end拜 page吧 */盎 瓣 NUL蔼L, /板* get笆 unma暗pped 啊area 胺*/ 芭 ;凹習慣上,我把們以變數名靶稱扳(例如埃c8255熬_chdr澳v_fop佰s)懊來表示fi艾le_op芭erati艾ons結構蔼。在fil摆e_ope皑ratio挨ns結構中绊每一個欄位俺,都必須指傲向驅動程式阿中負責特定邦作業方法,板對於驅動程暗式不巴需要吧的作業項目耙,其對應欄办位吧需案指向NUL八L。我們在靶此文中所使隘用到的作業拌方法包括有八read(埃 )、wr芭ite( 碍)、ope白n( )及拔relea蔼se( )百,在此做一敖個簡單的介皑紹。傲h。捌open(柏 )
20、岸 哎範例耙如下:癌int c佰8255_盎chdev摆_open柏( str翱uct i按node 艾*inod稗e, st傲ruct 叭file 伴*file阿 )邦0。澳佰print拜k(c8奥255_o昂penn敖);靶跋MOD_I哎NC_US巴E_COU癌NT;罢邦retur白n 0;敖 這是裝鞍置操作的第一步,一般白會在此函數佰中進行必要耙的初始化準搬備工作及遞哀增目標裝置哀的用量計扒次,以八避矮免模組在檔绊案關閉之前敖被卸載。吧G。按2. re叭lease皑( )柏 霸範例败如下:败int c扒8255_搬chdev佰_rele伴ase( 盎struc绊t ino奥de *i熬n
21、ode,按 stru疤ct fi案le *f鞍ile )埃J。按搬MOD_D靶EC_US佰E_COU阿NT;哎埃print搬k(re吧lease胺n)埃;肮 鞍 re伴turn 芭0;笆relea版se 作業方法的用途百與open扒相反。主要蔼包括遞減用爸量次數、再癌最後一次關胺閉時,將目跋標裝置關機爸、釋放op碍en配置給捌filp-奥priv捌ate_d跋ata的任拌何東西。半E。哎3. re阿ad( )盎 芭範例如下:版stati岸c ssi唉ze_t 凹c8255碍_chde啊v_rea袄d(str霸uct f安ile *芭filp,班 char叭 *buf暗, siz袄e_t c八o
22、unt,邦loff_捌t *of板fset)拌L。矮unsig笆ned i啊nt ix唉;芭buffe半r2 = 隘kmall挨oc(1,皑GFP_K阿ERNEL碍);熬a。扒哀if(ve傲rify_稗area(半VERIF澳Y_WRI啊TE,bu佰f,count)=版-EFAU案LT)版N。哀扒retur澳n -EF罢AULT;办 捌隘print澳k(c8八255_r颁ead柏n);八/* -敖凹-read啊 data版 from肮 8255安 PORT案 A吧搬皑摆 翱*/哎9。埃io_ba瓣se=io罢remap皑_noca盎che(P耙ORTA,盎 LENG懊TH);阿q。扒 罢 *(
23、b氨uffer袄2办)=rea白db(io瓣_base扒);霸 伴 co啊py_to耙_user扳(buf,凹buffe袄r,ix)岸;霸耙kfree斑(buff鞍er捌2懊);巴蔼retur癌n ix;柏 哎驅動程式用埃此指令擷取懊出裝置上的罢資料,並將捌擷取到的資斑料百透過翱copy_巴to_us扳er般指令奥傳遞給應用艾程式。如果捌copy_坝to_us伴er背執行成功則懊傳回一個非奥負數值,代袄表成功讀取百的位元組個阿數。各個引绊數的意義如佰下: fi翱lp 是檔罢案指標;c阿ount 拌是要被傳輸拔的資料量;矮buf引數隘指向use按r-spa凹ce 的緩矮衝區對於r案ead,它熬是
24、一塊空白颁記憶區,用般於存放裝置鞍讀出的資料奥。白d。版4. wr吧ite( 佰)稗 岸範例如下:隘stati拔c ssi熬ze_t 傲c8255半_chde背v_wri扳te(st败ruct 办file 板*filp稗,const cha案r *bu板f,siz癌e_t c碍ount,伴 loff按_t *o蔼ffset爱)拔G。肮 un佰signe鞍d int俺 iy=0鞍;罢 un蔼signe阿d cha邦r dat瓣ax;爸 瓣buffe隘r1 = 阿kmall案oc(1,哎GFP_K挨ERNEL捌);百y。案 叭 班print柏k(c8班255_w奥rite.八.n)芭;半 io办_
25、base翱=iore白map_n办ocach敖e(POR敖TA,LE凹NGTH)百;俺D。袄 cop唉y_fro盎m_use爱r(buf般fer1,艾buf,c俺ount)把;吧G。扒 da拜tax=*绊(buff笆er1白)拌;坝扳print半k(c8叭255_w懊rite.稗.%dn霸,iy)蔼;百q。敖 八 wri凹teb(d案atax,斑 io_b肮ase+1佰);敖 爸 肮懊kfree昂(buff爸er1);皑芭暗retur柏n iy;皑將資料寫入版裝置若發生爱錯誤,則觸啊發 wri疤te( )版 系統呼叫摆的行程會收埃到-EIN翱VAL。如笆果成功,w傲rite將把傳回一個非班負值
26、,代表跋成功寫出的澳位元數。我吧們在實作w耙rite函挨式裡利用扳copy_罢from_扮user跋函式把使用败者空間把之百前所錄的資把料傳送至核靶心空間傲。坝r。吧3办 扳在應用程式岸開啟驅動程爱式的功能扮完成了驅動爱程式的撰寫拌之後,接下般來要寫一個笆應用程式來哀作測試。霸程式裡首先板要使用系統哎呼叫對裝置昂做開啟的動百作,藉由 柏open 奥系統呼叫來鞍呼叫驅動程拔式裡的 o埃pen 函阿式,便會執安行驅動程式笆裡相對應的板動作:邦n。哎疤int 瓣fd1,i懊;啊翱unsig摆ned c叭har d扮atabu疤f10把;跋拔fd1 =哎 open跋(C825八5, O_蔼RDWR)皑
27、;耙隘if (f绊d1=-翱1) 稗瓣澳print霸f(c8啊255 d安river肮 open绊 erro安rn)碍;埃a。邦办疤exit(耙0);百使用 re肮ad 系統百呼叫將10百字元從核心白空間傳送至叭使用者空間傲:爱p。按绊 阿read(唉fd1,d昂atabu办f,10)俺;袄 扮 fo搬r (i=百0;i1安0;i+笆)霸 背 p叭rintf昂(825皑5 por办t A d哀ata=%扒xn,爸datab俺ufi罢);般s。傲 哀 盎跋資料傳送到哎使用者空間败後,接下來瓣我們可以做巴需要的應用袄,例如傳送鞍至網路上或柏做聲音的處背理碍.等啊。使用澳 writ佰e 系統呼伴叫來
28、將捌將1字元岸傳送至核心拌空間:爱9。敖 坝 writ安e(fd1阿,data暗buf,1拜);办執行坝應用程式之唉後便可驗證疤驅動程式的半功能奥。凹完整應用程澳式範例如下伴:耙1。柏/*拜*翱*吧*吧*按*霸*颁*办*碍*伴*/俺n。胺/* 按 按 坝 使奥用者程式 唉 吧 跋 按 拔*/拜i。柏/*耙*稗*蔼*艾*挨*佰*霸*巴*哀*般*/熬k。叭#incl霸ude 按#incl摆ude 皑#incl扮ude 罢#incl捌ude 耙#incl背ude 哀#incl拜ude 按#incl芭ude 跋#defi板ne C8白255 傲/dev/扮c8255艾_driv瓣er坝R。耙int m肮ai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑行业的工程进度管理计划
- 职业技能提升计划的实施路径
- 会计行业发展趋势的分析计划
- 提高幼儿园教育活动的参与感计划
- 感知美好生活的艺术活动计划
- 《贵州安晟能源有限公司贵州省大方县对江井田煤矿(新建)矿产资源绿色开发利用方案(三合一)》专家组评审意见
- 四川省宜宾市南溪二中高二体育《运球、双手胸前传接球》教学实录
- 艾灸治疗便秘
- 2025年红河货运从业资格证考试模拟考试题库下载
- 2025年武汉货运驾驶从业资格证考试题库
- 2025年高考时事政治考点总结
- 县国有企业改革转型方案
- 高中家长会 高考考前家长会家长心理调整课件
- 2025年皖北卫生职业学院单招职业适应性测试题库附答案
- 住宅老旧电梯更新改造方案
- 2025年山东国电投莱阳核能有限公司校园招聘笔试参考题库附带答案详解
- 《主题六 研学旅行我做主》教学设计-2023-2024学年六年级下册综合实践活动辽师大版
- 电力工程建设中的风险控制与管理措施
- 中小学生开学第一课主题班会-以哪吒之魔童降世为榜样
- 八年级北师大版上册数学期中卷面分析
- 2025年张家界航空工业职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
评论
0/150
提交评论