已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
北京交通大學碩士學位論文 中文摘要 中文摘要 摘要:a r ml i n u x 作為嵌入式技術(shù)中的一種,由于嵌入式l i n u x 具有強大的多任 務管理功能、支持強大的q t 圖形界面工具、運行穩(wěn)定、代碼開源等特點,使其在 民用工業(yè)和軍工業(yè)等領(lǐng)域得到廣泛的應用,是目前研究與應用的一個熱點。隨著 a r m 硬件平臺和嵌入式l i n u x 的進一步發(fā)展,基于a r m 硬件平臺的l i n u x 嵌入 式系統(tǒng)是今后嵌入式技術(shù)的一個發(fā)展方向。 本文在對a r ml i n u x 技術(shù)各個環(huán)節(jié)進行深入研究的基礎(chǔ)上,結(jié)合q t 圖形開 發(fā)工具設(shè)計了一個具有快速啟動、系統(tǒng)升級、分析存儲數(shù)據(jù)功能的一個a r ml i n u x 數(shù)據(jù)通信系統(tǒng)。論文的內(nèi)容主要包括以下幾個方面: 1 研究了目前主流的a r ml i n u x 開發(fā)技術(shù),在此基礎(chǔ)上提出了基于a r m l i n u x 的具有快速啟動、系統(tǒng)升級、分析存儲數(shù)據(jù)功能的一個數(shù)據(jù)通信系統(tǒng) 設(shè)計方案。 2 實現(xiàn)了基于a r ml i n u x 的數(shù)據(jù)通信、數(shù)據(jù)分析、數(shù)據(jù)存儲的系統(tǒng),涉及到 a r ml i n u x 的上層軟件設(shè)計,底層驅(qū)動設(shè)計等各個環(huán)節(jié)。 3 深入研究了嵌入式l i n u x 和相關(guān)b o o t l o a d e r 的源代碼,提出了系統(tǒng)快速啟動 方案。 4 實現(xiàn)了a r ml i n u x 系統(tǒng)的快速啟動,快速啟動對于嵌入式系統(tǒng)來說意義重 大,系統(tǒng)穩(wěn)定快速的啟動能夠提高眾多嵌入式系統(tǒng)組成的大系統(tǒng)的性能。 5 實現(xiàn)了對a r ml i n u x 的系統(tǒng)軟件升級,軟件升級對于嵌入式系統(tǒng)來說是非 常必要的,具有軟件升級功能的嵌入式系統(tǒng)能夠大大減少系統(tǒng)再開發(fā)的成 本。 試驗結(jié)果表明了本文提出的系統(tǒng)設(shè)計方案是可行的,數(shù)據(jù)通信、數(shù)據(jù)分析、數(shù) 據(jù)存儲、系統(tǒng)快速啟動和系統(tǒng)軟件升級等功能正常,本文研究的技術(shù)不但能夠應 用于本工程而且能夠應用在其他a r ml i n u x 系統(tǒng),具有一定的應用空間。 本論文中共有圖3 2 幅,表1 3 幅,參考文獻2 1 篇。 關(guān)鍵詞:a r m l i n u x ;q t e ;快速啟動;系統(tǒng)升級 北京交通大學碩士學位論文 a b s 汀ra c t a bs t r a c t a b s t r a c t :a r ml i n u xa so n eo fe m b e d d e dt e c h n o l o g y s ,b e c a u s eo ft h em u l t i t a s k m a n a g e m e n tf u n c t i o f i s ,s u p p o r t i n gg r a p h i c a li n t e r f a c et o o l s ,s t a b l eo p e r a t i o na n d o p e n - s o u r c ec o d e ,h a sb e e nw i d e l ya p p l i e dt oc i v i l i a ni n d u s t r ya n dm i l i t a r yi n d u s t r y i t i sah o t s p o to ft h ep r e s e n ts t u d ya n da p p l i c a t i o n w i t ht h ed e v e l o p m e n to fa r mh a r d w a r e p l a t f o r ma n de m b e d d e dl i n u x ,e m b e d d e dl i n u xw h i c hb a s e d o na r mw i l lb e c o m e p o p u l a ri nf u t u r e i nt h i sp a p e r ,b a s i n go nt h ei n - d e p t hr e s e a r c ha n ds o u n di n v e s t i g a t i o n ,ad a t a c o m m u n i c a t i o ns y s t e mw h i c hh a st h ef u n c t i o n so ff a s tb o o t i n g ,s y s t e mu p g r a d e ,d a t a s t o r ea n da n a l y s i sh a sb e e ns u c c e s s f u l l yd e s i g n e d t h i sp a p e ri sm a d eu po ft h e f o l l o w i n gp a n s : b ya n a l y z i n gt h ep r e s e n td e v e l o p m e n ts t a t u so fa r ml i n u x ,ad a t ac o m m u n i c a t i o n s y s t e mw h i c hh a st h ef u n c t i o n so ff a s tb o o t i n g ,s y s t e mu p g r a d e ,d a t as t o r ea n da n a l y s i s h a sb e e ns u c c e s s f u l l yd e s i g n e d b yh a v i n gai n - d e p t hs t u d yo fe m b e d d e dl i n u xa n dt h eb o o t l o a d e rs o u r c ec o d e ,a f a s tb o o t i n gt e c h n i q u eo fa r mh a sb e e ns u c c e s s f u l l yd e s i g n e da n di m p l e m e n t e d b yh a v i n gai n - d e p t hs t u d yo fe m b e d d e dl i n u xa n d t h eb o o f l o a d e rs o u r c ec o d e ,t h e t e c h n i q u ea b o u ts y s t e mu p g t a d eh a sb e e ns u c c e s s f u l l yd e s i g n e di m p l e m e n t e d e x p e r i m e n t a t i o nh a sp r o v e dt h a ts y s t e md e s i g ni nt h i sp a p e r i sf e a s i b l e e v e r y f u n c t i o ni sa v a i l a b l e ,t h es y s t e mh a sw i d ed e v e l o p m e n ts p a c e k e y w o r d s :a r m l i n u x ;q t e ;f a s tb o o t ;s y s t e mu p g r a d e 北京交通大學碩士學位論文獨創(chuàng)性聲明 獨創(chuàng)性聲明 本人聲明所呈交的學位論文是本人在導師指導下進行的研究工作和取得的研究成果,除 了文中特別加以標注和致謝之處外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也 不包含為獲得北京交通人學或其他教育機構(gòu)的學位或證書而使用過的材料。與我一同:i :作的 同志對本研究所做的任何貢獻均已在論文中作了明確的說明并表示了謝意。 學位論文作者簽名:簽字日期:年月日 6 3 學位論文版權(quán)使用授權(quán)書 本學位論文作者完全了解北京交通大學有關(guān)保留、使h j 學位論文的規(guī)定。特授權(quán)北京交 通人學可以將學位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,提供閱覽服務,并采用影 印、縮印或掃描等復制手段保存、匯編以供查閱和借閱。同意學校向國家有關(guān)部門或機構(gòu)送 交論文的復印件和磁盤。 ( 保密的學位論文在解密后適用本授權(quán)說明) 學位論文作者簽名: f , l o a dz i a o e ) ) k 魁1 “8 0 。o o o 一= 慷6 0 0 0 。0 ) ) b o o ts c n ”t 1 ( i f n ) 一= 0 1 u t l o o ) ;5 , t o ” n = 日卿l o t 婦c o 雌一n l o n :f n 5 e 0 a t a d d x 一1 田0 1 l o c a li pa d h e 5 舢21 6 805 5a o 口d l o c a l 口a d d z o a 女2 5 52 5 52 5 e0 d e f a u l t e r 口a d d c e s s :1 9 21 0 啦 l l o = tp c ” d 船一o rda d h 一:2 1 0 l s e t 口t m t kh 打d 一【恥c 】:h u 鯉啦n e o z kh 咖6a d n e ,5 敞】:o 坤0 蛐啦:0 巾o :婦:帆8 4 b e c p o z t :。 f o z c ec 郵o l ef o c l nd “ e s 5 o s :f a l :e h o o z - d e b u 2a tb o o tt i e :f n s e d a t er e o o 1 1 “t c o n t i n u ( ? z e o lo 日1 f 舶o o ?;? l f 8 1 0 : h o f r o o z 0 3 f b e o 。呻3 伽0 0 0a to l f 8 0 3 0 3 : r o n o o t 圖2 4 ”曲t 中參數(shù)設(shè)置 f i 9 2 - 8p a r a m e t e f 晡g i nr c d b o o t 然后重啟下位機。 北京交通大學碩士學位論文工程的硬件和軟件平臺 2 下載l i n u x 內(nèi)核映像和文件系統(tǒng)。 在下載內(nèi)核文件映像到下位機上之前,必須先進行邢的設(shè)置。 打開邢在目錄“t o o l s ”中的服務軟件【t 卸“e 。 點擊 t i l p d - ) c o n f l g u 陀 打開窗口 t r p ds e t t i n g s ”。 口圖墨墨瞄匿霪薹董,- l 籟蠶麓i :_ _ 旦j 到 s ri sr u n n i n gdou to tm a x3 2c l e n t sa o c t e d 削2 4 點擊t 郵配苴按鈕 f i g2 - 9 c l i c k 血e h u r o n n 目乎m d 仰t l l p 點擊 h o m e d i 凇t o r f 的 a r o w s e 按韌,打開z l m a g v 和r a m d i s k g z 所在日錄。 點擊l o g f i l e n a m e 的“b m w s e 按鈕,打開t 卸d 既f 。 點擊o k 。 皿互e 旺臣圈圈;g 醚 點| r 口b h 悄b 嘶h 0 圖2 - 1 0 選擇i m a g e 文件 f i 9 2 - 1 0 c h o c c e i m a g e 點擊 t f l p d - s t a r t 開始t f r p 服務 鬈駕 畫 劇 北京交通大學碩士學位論文工樣的艘件和軟件平臺 凹2 - i i 開始t 如服務 f i g2 - 1 】s t a r l t 卸s e r v i c e 邢服務已經(jīng)運行?,F(xiàn)在可以下載l i n u x 映像文件到下位機上,在這之前先 確定防火墻已經(jīng)關(guān)閉,否則可能出現(xiàn)問題。 a 、下載文件系統(tǒng): 在超級終端下輸入r e d b o o t 的命令進行設(shè)置和下載。 r e 曲o o t l o a d vbo x b 0 0 0 0 0r a m d l s ke zd o 帆l o a dr 柚d l s k zt dt h e 跚0 x 8 0 0 0 0 0 r a f 1 1 e1 0 a d e do x 0 0 8 0 0 0 0 0 0 2 0 0 9 7 6 3 0 4 e de n t r ya to x 0 0 8 0 0 0 0 0 i tm a yt a k m o m et i m e ,t e rf i n i s h t t et h ef i l e 口s t e mt ot h 8f l a s h h e r e o x b 0 0 0 0 0i st h er 墟a d d r e 8 s ,6 0 0 0 0 01 st h e 1 e n g t ho f t h e y 礬d l s kg :f i l e ( ai n t l eb 1 # t h a nt h ez 缸d i s ks i z e ) l r e d b o o t f i sc t eb 腳8 。0 0 0 0 一1o x 6 0 0 0 0 0r 姐d i s k z e f 0 x 6 0 0 4 0 0 0 0 0 蛹0 8 4 0 0 0 0 : p z o g r 螄f r o m0 x 0 0 8 0 0 0 0 0 - 0 x o o e 0 0 0 0 0a t o z 8 0 0 4 0 0 0 0 : e f r 肌o z b l f c o o o o _ o x 6 2 0 0 0 o o :, p r o g r a m 住o no x o 盯b f 0 0 0 一o x 0 3 f f f 0 0 0a to x 6 1 f c 0 0 0 0 : 圖二1 2 在超級終端下設(shè)置和下載 f i g 2 1 2s e t t i n g s0 a d d o w n l o a d i n h y p 廿血胡 b 下載內(nèi)核映像 北京交通大學碩士學位論文工程的硬件和軟件平臺 r e d b o o t l o a d v bo x s o o c 【0z i n a g e r a wf 1 1 el o a d e d0 曲0 0 8 0 0 0 。_ 0 9 0 0 1 4 9 9 l h 帖1 t et ot h ef l a s h - r e 曲o 。t f l sc i e a t e - b0 蜘0 0 0 0 1o x l 0 0 0 0 0z r m a g e e 一f z 0 x 6 0 6 4 0 0 0 c r - 6 0 ? 4 0 0 0 0 : p z o r a mf o z 0 0 0 8 0 0 3 0 - o x o o l 8 0 0 0 0a to x 6 。6 4 0 0 0 0 圖2 1 3 下載內(nèi)核映像 f i 9 2 - 1 3 d o w n l o a d i m a g e 重啟下位機的l i n u x ,或者運行下面的命令。 r e d b o o t e x 0 x s o d 0 0 0 一so z 6 0 0 0 0 0 圈2 一1 4 重啟系統(tǒng) f i g2 - 1 4 r e s e ts y s t 咖 重啟之后,下面的信息將被看見。 r e d b o 口t ) r e s e t r e :e t t i n g + e i b e r n e te t h 0h n ca d d e s s0 d 1 0 90 0 :0 b6 日 i p :1 9 2 1 6 805 5 2 5 52 5 52 5 5b6 e t e p1 9 2 1 6 b8 l c e f a u l ts e r :t 9 21 6 80 d h ss e r u e ri p1 9 21 6 8 日1 r e d b o o tc t - ib o o l s t r n dd ? b u g 一- e n ti r o ) - r a m l h o nc e r t ,f i e dr e l e a s em e r s i o du 2 一b u l l t9 7 。3 9 。2 9 “c1 82 柏 p l o tr 口r - :c i r r u sl 0 9 1 ce d b 9 3 1 5b o a r d ( n r h g z e i ) r e u 日 c o p v r i o h t ( c 】2 0 8 02 8 0 ;2 0 0 2r e dh 口ti n c 幽2 1 5 止在登陸f 位機l i a u x 界向 f i 9 2 - 1 5 l a f o r m a t i o n o f l a n d i n g a r m l i a l l x i n t e r f a c e 那么,現(xiàn)在我們看到了下位機上運行的l i n u x 系統(tǒng)。 北京交通大學硬士學位論文工程的硬件和軟件平臺 n e t w i n d e rf l o a t i n gp o i n te m u l a t o rv 89 7 【d o u b l ep r e c i s i o nj r r h d i s k :c o m p r e s s e di m a g ef o u n da tb l o c k0 f r e e i n gi n i t r dm e m o r v6 1 4 4 k v f s :n o u n t e dr o o ti e x t 2f i l e s v s t e m ) f r e e i n gi n i tm e m o r y :6 8 k i n l fs t a r t e d :e p 8 0 以明c 2 8 8 41 21 8 _ 1 3 :3 卜蚰) l u l t l c a l lb i n a r y e t h 8n on e ! w o r kc a b l ed e t e c t e d ! p l e a s ep r e s se n t e rt oa c t i v a t et h i sc o n s o l e b u s y b o xv l c 2 8 8 41 21 8 1 3 :3 7 + 8 9 8 8 ) b u i l t i ns h e l ll a s h ) e n t e r h e l p f o r8l i s to fb u i l t i nc o m = a n d s # 幽2 一1 6 a r m l i n l l x 界面 f i g2 1 6 a r m l i o u x i n t c r f a c o 到此為止,下位機上的l i n u x 操作系統(tǒng)成功運行起來,環(huán)境搭建成功。 2 3 結(jié)論 到此為止,基于a r m 9 的l i n u x 軟件開發(fā)平臺就完全建立起來了,我們可以在 上位機的l i n u x 操作系統(tǒng)中進行程序的編輯、編譯和下載。在下位機上運行編譯成 功的可執(zhí)行程序,然后反復調(diào)試并改進。 除此之外,本章還比較了幾種b t l o a d c r 的不同和幾種g u i 工具的不同并做 出了適合本工程選擇。 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 3 底層驅(qū)動程序的設(shè)計 本工程需要有一個嵌入式的小鍵盤,那么就要設(shè)計相應的鍵盤驅(qū)動,這就涉 及到l i n u x 下的鍵盤驅(qū)動設(shè)計方法的問題。下面先簡要敘述一下l i n u x 下驅(qū)動程序 的編寫方法和相應的流程。 3 1l i n u x 驅(qū)動的編寫方法 一般情況下,l i n u x 內(nèi)核已經(jīng)為設(shè)計人員提供了大量的設(shè)備驅(qū)動程序,如果要 使用的設(shè)備是標準設(shè)備,比如u s b 設(shè)備,一般就不需要自己從頭開始寫驅(qū)動,僅 僅需要修改l i n u x 自帶的驅(qū)動程序。但是在有些情況下,當設(shè)計人員設(shè)計了一些非 標準的設(shè)備時,比如a d c 、d a c 、用戶自定義鍵盤等,要在l i n u x 下使用這些設(shè) 備,就要求設(shè)計人員自己寫這些設(shè)備的驅(qū)動程序。 l i n u x 的設(shè)備驅(qū)動程序根據(jù)設(shè)備的類型和特點具有不同的復雜度,表面看起來 千差萬別,但是實際上這些驅(qū)動有一些共性,只要掌握這些驅(qū)動程序的套路,再 加上對設(shè)備硬件的熟悉就可以比較輕松的開發(fā)自己的驅(qū)動程序。 3 1 1l i n u x 內(nèi)核模塊 1 ) 內(nèi)核模塊簡介 l i n u x 設(shè)備驅(qū)動程序是l i n u x 的內(nèi)核程序,一般情況下,l i n u x 的驅(qū)動程序被編 譯成l i n u x 內(nèi)核模塊,因為l i n u x 能夠運行在兩種模式之下:用戶模式和特權(quán)模式。 一般后一種模式被稱為內(nèi)核模式,模式反映的是處理器本身實際處理指令和權(quán)限 方式的改變。內(nèi)核模塊是l i n u x 內(nèi)核代碼中的功能代碼段。 2 ) 模塊特點 模塊具有下面兩個特點: a ) 模塊本身不被編譯進入內(nèi)核映像,從而控制了內(nèi)核的大小。 b ) 模塊一旦被加載,它就和內(nèi)核中的其他模塊完全一樣。 c ) 內(nèi)核模塊結(jié)構(gòu) 內(nèi)核模塊的程序結(jié)構(gòu): 表3 - 1 內(nèi)核模塊程序結(jié)構(gòu) 1 b l e 3 1k e r n e lm o d u l es t r u c t u r e 北京交通人學碩士學位論文底層驅(qū)動的設(shè)計 模塊加載函數(shù)模塊初始化必須 模塊卸載函數(shù)完成模塊加載函數(shù)的反必須 作用 模塊許可證證明描述內(nèi)核模塊的許可權(quán)必須 限 模塊參數(shù)傳遞給模塊的值,對應 可選 模塊內(nèi)部的全局變量 模塊導出符號導出函數(shù)或者變量的符 可選 號 模塊作者等信息聲明聲明作者等信息 可選 4 ) 內(nèi)核模塊的編譯 模塊按照上述結(jié)構(gòu)編寫,之后就可以將其編譯成模塊( o ) 文件。 首先要為內(nèi)核模塊編寫m a k e f i l e 文件: 一般情況下如果內(nèi)核模塊只有一個c 文件,m a k e f i l e 文件內(nèi)容如下: 表3 - 2m a k e f i l e l 內(nèi)容 t a b l e 3 - 2t h ec o n t e n t so fm a k e f i l e l 那么相對應的編譯命令如下所示: m a k e - c u s r s r c l i n u x m = $ ( p w d ) m o d u l e s 其中c 之后指定的是l i n u x 內(nèi)核源代碼的目錄,而m = 后指定的是n a m e c 和 m a k e f i l e 所在的目錄。 編譯執(zhí)行過程中經(jīng)歷了這樣的步驟,先進入l i n u x 內(nèi)核所在的目錄,并編譯出 n a m e o 文件,運行m o d p o s t 會生成臨時的n a m e m o d c 文件,而后根據(jù)此文件編 譯出n a m e m o d o 之后連接n a m e o 和n a m e m o d o 文件得到模塊目標文件n a l l l e k o , 最后離開l i n u x 內(nèi)核所在的目錄。 1 】 另外,如果一個模塊包括多個c 文件( 如f i l e l c 、f i l e 2 c ) ,則應該以如下方 式編寫m a k e f i l e : 表3 3m a k e f i l e 2 內(nèi)容 1 1 a b l e 3 3 t h ec o n t e n t so fm a k e f i l e 2 1 9 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 5 ) 內(nèi)模塊的加載 現(xiàn)在要將編譯出來的內(nèi)核模塊加載到內(nèi)核中,只需要運行命令: i n s m o dn a m e k o 就可以成功的加載模塊到內(nèi)核。加載以后,需要驗證是否真正 將模塊加載到內(nèi)核中,方法很簡單,只需要運行命令:l s m o d 就可以列出所有的內(nèi) 核模塊,查看列表中是否有剛剛加載的模塊。如果剛剛加載的內(nèi)核模塊是l i n u x 驅(qū)動模塊,那么還可以通過使用c a t p r o c d e v i c e s 命令查看是否有n a m e 設(shè)備。 3 1 2 驅(qū)動的具體編程方法 l i n u x 設(shè)備分為字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備。字符設(shè)備是其中最簡單的一類 設(shè)備,按鍵設(shè)備就屬于字符設(shè)備。 先敘述一下一般簡單的字符設(shè)備的編程方法: 1 ) 字符設(shè)備中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu) l i n u x 字符設(shè)備中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有以下幾個: a ) c d e v 結(jié)構(gòu)體 l i n u x 內(nèi)核中使用c d e v 結(jié)構(gòu)體描述字符設(shè)備,c d e v 結(jié)構(gòu)體的定義如下所示: 表3 _ 4c d e v 結(jié)構(gòu)體 t i b l e 3 - 4 t h ec d e vs t m c t c d e v 結(jié)構(gòu)體的d e vt 成員定義了設(shè)備號,為3 2 位,其中高1 2 位為主設(shè)備號, 低2 0 位為次設(shè)備號,使用下列宏可以從d e vt 獲得主設(shè)備號和次設(shè)備號。 m a j o r ( d e v _ td e v ) ; m i n o r ( d e v _ td e v ) ; c d e v 結(jié)構(gòu)體的另一個重要成員f i l eo p e r a t i o n s 定義了字符設(shè)備驅(qū)動提供給虛擬 文件系統(tǒng)的接口函數(shù)。 l i n u x 內(nèi)核提供了一組函數(shù)用于操作c d e v 結(jié)構(gòu)體,如下所示: 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 表3 5c d e v 結(jié)構(gòu)體操作函數(shù) m l b l e 3 5t h ec d e vs t r u c tf u n c t i o n b ) f i l eo p e r a t i o n s 結(jié)構(gòu)體 f i l eo p e r a t i o n s 結(jié)構(gòu)體中的成員函數(shù)是字符設(shè)備驅(qū)動程序設(shè)計的主要內(nèi)容,這 些函數(shù)實際會在應用程序進行l(wèi) i n u x 的o p e n ( ) 、w r i t e ( ) 、r e a d ( ) 、c l o s e ( ) 等系統(tǒng)調(diào)用 時最終被調(diào)用,f i l e 結(jié)構(gòu)體目前已經(jīng)被豐富的比較龐大,它們的定義如operations 下所示: 表3 - 6f i l eo p e r a t i o n s 結(jié)構(gòu)體 t a b l e 3 6t h ef i l e o p e r a t i o n ss t r u c t s t r u c tf i l e _ o p e r a t i o n s s t r u c tm o d u l e * o w n e r ; l o f l f _ t ( 宰l l s e e k ) ( s t r u c tf i l e 幸,l o f f _ t ,i n t ) ; s s i z e _ t ( * r e a d ) ( s t r u c tf i l e 宰,c h a r 一s e r 奉,s i z e _ _ t ,l o f f t 木) ; s s i z e _ t ( 卑a i o r e a d ) ( s t r u c tk i o c b 牛,c h a r u s e r 牛,s i z e _ _ t ,l o f f t ) ; s s i z e _ t ( 宰w r i t e ) ( s t r u e tf i l e 拳,c o n s tc h a r _ u s e r ,s i z e t ,l o f j f t 棗) ; s s i z e _ t ( 宰a i o _ w r i t e ) ( s t r u c tk i o c b 拳,c o n s tc h a r j s e r 宰,s i z e _ t ,l o f t _ t ) ; i n t ( * r e a d d i r ) ( s t m c tf i l e 宰,v o i d 宰,f i l l d i rt ) ; u n s i g n e di n t ( * p o l l ) ( s t r u c tf i l e 木,s t r u c tp o l l _ t a b l e _ s t r u c t 奉) ; i n t ( 宰i o c t l ) ( s t r u c ti n o d e 奉,s t r u c tf i l e 宰,u n s i g n e di n t ,u n s i g n e dl o n g ) ; m t ( * m m a p ) ( s t r u c tf i l e 宰,s t r u c tv m a r e a s t r u c t 奉) ; i n t ( * o p e n ) ( s t r u c ti n o d ej i ,s t r u c tf i l e 木) ; i n t ( 木f l u s h ) ( s t r u c tf i l e 母) ; i n t ( * r e l e a s e ) ( s t r u c ti n o d e 宰,s t r u c tf i l e 宰) ; l n t ( 木f s y n c ) ( s t r u c tf i l e 掌,s t r u c td e n t r y 宰,i n td a t a s y n c ) ; m t ( 宰a i o _ f s y n c ) ( s t m c tk i o c b 牛,i n td a t a s y n c ) ; m t ( 木f a s y n c ) ( i n t ,s t r u e tf i l e 木,i n t ) ; i n t ( l o c k ) ( s t r u c tf i l e + ,i n t ,s t r u c tf i l el o c k 拳) ; s s i z e _ t ( 木r e a d v ) ( s t r u c tf i l e 宰,c o n s ts t r u c ti o v e c 拳,u n s i g n e dl o n g ,l o f t t 宰) ; s s i z e _ t ( 木w r i t e v ) ( s t r u c tf i l e ,c o n s ts t r u c ti o v e c 宰,u n s i g n e dl o n g ,l o f f j 木) ; s s i z e _ t ( 宰s e n d f i l e ) ( s t r u c tf i l e 奉,l o 町書,s i z et ,r e a d _ a c t o r _ t ,v o i d e r 拳) ; s s i z e _ t ( 宰s e n a g e ) ( s t r u c tf i l e 書,s t r u c tp a g e 棗,i n t ,s i z e _ t ,l o f f _ t ,i n t ) ; u n s i g n e dl o n g ( 木g e t _ u n m a p p e d _ a r e a ) ( s t r u c tf i l e 事,u n s i g n e dl o n g , u n s i g n e d l o n g ,u n s i g n e dl o n g ,u n s i g n e dl o n g ) ; 2 l 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 2 ) 驅(qū)動程序的基本結(jié)構(gòu)簡述 l i n u x 內(nèi)核把驅(qū)動程序模塊分為三種類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。, 其中,字符設(shè)備和塊設(shè)備可以像文件一樣被訪問,例如,驅(qū)動程序通常會實 現(xiàn)o p e n 、c l o s e 、r e a d 、w r i t e 等操作。 對于大多數(shù)的字符設(shè)備來說,雖然字符設(shè)備提供給用戶的操作是一個類似于 流控制的設(shè)備節(jié)點,即通常字符設(shè)備都是順序?qū)懭牒妥x取的,但是也有些字符設(shè) 備看上去像是一個數(shù)據(jù)區(qū),支持s e e k 等操作,可以來回讀取數(shù)據(jù)。因此字符設(shè)備 和塊設(shè)備的主要區(qū)別不在于能否s e e k ,而是在于系統(tǒng)對這兩種類型設(shè)備的管理方 式。應用程序?qū)τ谧址O(shè)備的每一個i o 操作,都會直接傳遞給系統(tǒng)內(nèi)核對應的驅(qū) 動程序;而應用程序?qū)τ趬K設(shè)備的操作,要經(jīng)過系統(tǒng)的緩沖區(qū)處理,間接傳遞給 驅(qū)動程序處理。通常,塊設(shè)備是文件系統(tǒng)的宿主,對于嵌入式系統(tǒng)來說,更常見 于f l a s h 、d o c 等存取媒質(zhì)中??梢哉f塊設(shè)備的這種方式是為存儲提供優(yōu)化的;而 字符設(shè)備的管理方式是為操作提供優(yōu)化的。這也是在l i n u x 系統(tǒng)中,既有對應的字 符設(shè)備驅(qū)動程序,也有對應的塊設(shè)備驅(qū)動程序的原因。網(wǎng)絡(luò)設(shè)備在l i n u x 系統(tǒng)中是 一類比較特殊的設(shè)備,它不像字符設(shè)備或者塊設(shè)備那樣通過對應的設(shè)備文件節(jié)點 去訪問,內(nèi)核也不再通過r e a d 或者w r i t e 等調(diào)用去訪問網(wǎng)絡(luò)設(shè)各。 在編寫的結(jié)構(gòu)上,l i n u x 驅(qū)動程序首先是一個l i n u x 內(nèi)核模塊,它必須具備 l i n u x 內(nèi)核模塊必備的函數(shù)和數(shù)據(jù)結(jié)構(gòu),在驅(qū)動程序的編寫中,最基本和最重要的 是f i l eo p e r a t i o n s 結(jié)構(gòu)體的實現(xiàn),在f i l eo p e r a t i o n s 結(jié)構(gòu)體中,并不是所有的函數(shù) 都必須實現(xiàn),有的函數(shù)是必要的,但是有些函數(shù)就是不需要的,哪些函數(shù)是需要 的取決于具體的外設(shè),一般情況下,幾個最基本的函數(shù)是o p e n 、r e a d 、w r i t e 、c l o s e 或者r e l e a s e 、i o c t l 等幾個函數(shù),這幾個函數(shù)實現(xiàn)打開設(shè)備、讀取設(shè)備數(shù)據(jù)、給設(shè) 備發(fā)送數(shù)據(jù)、關(guān)閉設(shè)備、接口控制等,這些功能是幾乎所有設(shè)備都需要的。其它 的函數(shù)都是實現(xiàn)了再被這些接口函數(shù)調(diào)用,依照具體的設(shè)備的最底層的代碼,不 同的設(shè)備,代碼的實現(xiàn)不同。 3 2l i n u x 驅(qū)動的測試方法 l i n u x 驅(qū)動程序編譯好并通過l i n u x 內(nèi)核模塊的方式加載到l i n u x 內(nèi)核中之后, 接下來就要驗證編寫的l i n u x 驅(qū)動的功能是否正常。 一個基本的驗證程序所要實現(xiàn)的功能和編寫的方法如下所述。 驗證程序和驅(qū)動程序不同,驅(qū)動程序是l i n u x 內(nèi)核程序而驗證程序是驗證驅(qū)動 北京交通人學碩士學位論文底層驅(qū)動的設(shè)計 程序功能是否正常的簡單應用程序。在驅(qū)動程序中實現(xiàn)的系統(tǒng)的接口程序( 函數(shù)) , 要在測試程序中得到驗證,比如一個字符型的設(shè)備的驅(qū)動程序,實現(xiàn)了o p e n 、r e a d 、 w r i t e 、c l o s e 。那么在驗證程序中,要嘗試去調(diào)用o p e n 、r e a d 、w r i t e 、c l o s e 打開設(shè) 備,讀取設(shè)備、寫設(shè)備,關(guān)閉設(shè)備。如果測試程序成功那么相應的驅(qū)動程序也就 是正確無誤的。 如果發(fā)現(xiàn)程序有問題,那么就需要進行調(diào)試,調(diào)試的基本方法是通過n f s 將 調(diào)試過的程序放到下位機上運行,測試結(jié)果。流程圖如下所示: 圖3 1 驅(qū)動程序測試調(diào)試流程 f i g 3 - 1t e s td r i v e rd e b u g g i n gp r o c e s s 3 3l i n u x 鍵盤驅(qū)動的設(shè)計 y 在本工程中需要一個嵌入式的小鍵盤,為此需要設(shè)計一個4 * 6 的鍵盤驅(qū)動, 鍵盤驅(qū)動是字符類l i n u x 設(shè)備驅(qū)動,本設(shè)計中的鍵盤是一個j t a g ( 1 6 針) 接口的 小鍵盤。 3 3 1 鍵盤驅(qū)動的原理 3 3 1 1 鍵盤的硬件模塊 1 ) 硬件平臺 在本工程中,硬件平臺是e p 9 3 1 5 。改硬件平臺自帶板載8 * 8 矩陣鍵盤口,用于連 北京交通大學碩+ 學位論文底層驅(qū)動的設(shè)計 接鍵盤輸入,或作為i o 口輸入輸出。 2 ) 矩陣掃描法 矩陣式結(jié)構(gòu)的鍵盤比直接法識別要復雜一些,列線通過電阻接正電源,并將行 線所接的i o 口作為輸出端,而列線所接的i o 口則作為輸入。這樣,當按鍵沒 有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦 有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有 鍵按下了。在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依 次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某 根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線 與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 3 3 1 2 鍵盤驅(qū)動的軟件模塊 一般的l i n u x 驅(qū)動程序都采用的是層次型體系結(jié)構(gòu),包括鍵盤驅(qū)動程序。l i n u x 中,鍵盤驅(qū)動是分為兩層來實現(xiàn)的。其中,上層是通用的鍵盤抽象層,它負責鍵 盤驅(qū)動不依賴于底層硬件的相關(guān)功能,而且提供為底層的服務;下層是硬件處理 層,和具體的硬件相關(guān),主要完成對硬件的直接操作。鍵盤驅(qū)動程序的上層公共 部分在目錄d r i v e r k e y b o a r d c 下。該文件中最重要的就是內(nèi)核用宏 e x p o r ts y m b o l 導出函數(shù)h a n d l es c a n c o d e 。 函數(shù)h a n d l es c a n c o d e 功能:轉(zhuǎn)換掃描碼為鍵碼,接下來根據(jù)擴展鍵的按下情 況轉(zhuǎn)換鍵碼為目標碼,也就是a s c i i 碼,再將該a s c i i 碼放到終端設(shè)備緩沖區(qū), 再調(diào)度一個t a s k l e t 負責將其回顯在顯示器。本函數(shù)完成鍵盤驅(qū)動程序中最核心的 工作,而這些核心的邏輯功能并不依賴于底層硬件,所以可以將其獨立出來,并 且供底層的硬件處理函數(shù)來調(diào)用。本文件中還另外定義了幾個回調(diào)函數(shù),它們可 以被鍵盤驅(qū)動程序的上層公共部分調(diào)用,具體實現(xiàn)由底層硬件處理函數(shù)實現(xiàn)。比 如k b du n e x p e c t e d,i i l i,等。這里面被upk b dth wk b dt r a n s l a t e k b dt r a n s l a t e h a n d l es c a n c o d e 函數(shù)調(diào)用,可以轉(zhuǎn)換掃描碼轉(zhuǎn)為鍵碼。鍵盤驅(qū)動程序的底層硬件 處理部分和具體的硬件環(huán)境有關(guān)系,不同的硬件環(huán)境函數(shù)實現(xiàn)也不同。 在上述這種體系結(jié)構(gòu)下,如果需要添加一塊特殊鍵盤到系統(tǒng)中,那么整體思 路就顯得比較清晰了。研發(fā)人員只要編寫和具體硬件環(huán)境相關(guān)的底層處理函數(shù), 便可以成功的將鍵盤驅(qū)動起來。在驅(qū)動程序中的底層硬件處理函數(shù)中最重要的工 作是在鍵盤中斷處理函數(shù)中獲得被按下鍵的掃描碼,并且以它為參數(shù)調(diào)用函數(shù) h a n d l es c a n c o d e ,那掃描碼到底是多少,其實具體的掃描碼可以由開發(fā)人員具體定 義,但是它必須唯一地標識被按下按鍵在鍵盤上的具體位置。另外,研發(fā)人員應 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 該提供對應的從掃描碼到鍵碼的轉(zhuǎn)換函數(shù)k b dt r a n s l a t e 。具體的鍵碼轉(zhuǎn)換是將目標 碼放在終端的輸入緩沖區(qū)內(nèi),另外回顯等工作都是由h a n d l es c a n c o d e 負責完成的。 由此得出結(jié)論,內(nèi)核導出函數(shù)h a n d l es c a n c o d e 在鍵盤驅(qū)動程序里,負責完成將底 層硬件處理層和上層通用抽象層聯(lián)系起來的重要作用,非常關(guān)鍵。 另外,在鍵盤驅(qū)動消抖時利用l i n u x 內(nèi)核提供的定時器隊列機制避免忙等的 方法,而不是用純粹的忙等消抖。下面用流程圖來表示這種方法的原理。 3 3 2 鍵盤驅(qū)動的實現(xiàn) 圖3 - 2 鍵盤消抖流程 f i g 3 - 2k e yw i t h o u tj i t t e rp r o c e s s 北京交通人學碩士學位論文底層驅(qū)動的設(shè)計 1 ) 內(nèi)核模塊的注冊和撤銷 驅(qū)動程序首先是l i n u x 內(nèi)核模塊,在進行加載鍵盤驅(qū)動模塊時,先執(zhí)行的是內(nèi) 核模塊注冊函數(shù)。它負責內(nèi)核注冊設(shè)備和初始化變量。 2 ) f i l e o p e r a t i o n s 的設(shè)置 s t a t i cs t r u c tf i l e o p e r a t i o n sk e y p a d _ f o p s = o p e n :k e y p a d _ o p e n , r e a d :k e y p a d _ r e a d , f a s y n c :k e y p a d _ f a s y n c , p o l l :k e y p a d _ p o l l , c l o s e :k e y p a d _ c l o s e , ) ; 本接口定義完之后,就是對具體函數(shù)的實現(xiàn)。函數(shù)的具體實現(xiàn),和下列技術(shù) 相關(guān),有內(nèi)核定時器,等待隊列的實現(xiàn)( 阻塞方式) ,異步方式的實現(xiàn),循環(huán)隊列 等。 3 ) 打開函數(shù)k e y p a d _ o p e n o 具體實現(xiàn) 設(shè)備打開一般包括兩個步驟,包括設(shè)備的初始化和設(shè)備引用計數(shù)器加1 。 鍵盤事件數(shù)據(jù)結(jié)構(gòu)定義: t y p e d e fs t r u c t u l o n gs t a t u s ;表示按鍵的值 u l o n gc l i c k ;是否有按鍵按下,1 有,0 沒有 k e y _ e v e n t 函數(shù)執(zhí)行流程圖: 北京交通大學碩士學位論文底層驅(qū)動的設(shè)計 圖3 - 3o p e n 函數(shù)流程 f i g 3 - 3o p e nf u n c t i o np r o c e s s 4 ) 關(guān)閉函數(shù)k e y p a d _ c l o s e ( ) ,關(guān)閉操作主要實現(xiàn)的是:刪除定時器信號中斷,設(shè)備 計數(shù)器減1 ,關(guān)閉設(shè)備異步通知, 函數(shù)執(zhí)行流程圖: 圖3 _ 4c l o s e 函數(shù)流程 f i g 3 - 4c l o s ef u n c t i o np r o c e s s 5 ) 讀取操作接口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童館會員制度規(guī)范要求
- 幼兒園廚師自救制度規(guī)范
- 科技人才檔案管理制度
- 三個班客服排班制度規(guī)范
- 酒店保養(yǎng)石材制度規(guī)范標準
- 法警隊嚴格考勤制度規(guī)范
- 檔案學校信息化采購制度
- 干事檔案管理制度
- 機構(gòu)合伙人制度規(guī)范要求
- 校級領(lǐng)導帶課制度規(guī)范要求
- DB1331-T 025.1-2022 雄安新區(qū)工程建設(shè)關(guān)鍵質(zhì)量指標體系:建筑工程
- 旅游行業(yè)如何玩轉(zhuǎn)視頻號 從0到1開啟私域營銷
- 急腹癥影像診斷課件
- 【《紫鑫藥業(yè)財務報告審計失敗案列分析》12000字(論文)】
- 三級醫(yī)院營養(yǎng)科建設(shè)方案
- 醫(yī)院外聯(lián)部主任述職報告
- 集團內(nèi)部融媒體管理辦法
- ASTM-D1238中文翻譯(熔融流動率、熔融指數(shù)、體積流動速率)
- 2025年浙江省寧波市鎮(zhèn)海中學高考英語模擬試卷(1月份)
- 短視頻創(chuàng)作-短視頻手機拍攝與剪輯
- 車輛掛靠駕校合同協(xié)議
評論
0/150
提交評論