塊設(shè)備通常指一些需要以塊(如512字節(jié))的方式寫入的設(shè)備,如IDE硬盤、SCSI硬盤、光驅(qū)等。它的驅(qū)動程序的編寫過程與字符型設(shè)備驅(qū)動程序的編寫有很大的區(qū)別。
前面所講述的驅(qū)動程序中都沒有涉及中斷處理,而實際上,有很多Linux的驅(qū)動都是通過中斷的方式來進(jìn)行內(nèi)核和硬件的交互。中斷機(jī)制提供了硬件和軟件之間異步傳遞信息的方式。硬件設(shè)備在發(fā)生某個事件時通過中斷通知軟件進(jìn)行處理。中斷實現(xiàn)了硬件設(shè)備按需獲得處理器關(guān)注的機(jī)制,與查詢方式相比可以大大節(jié)省CPU資源的開銷。
LED和蜂鳴器是最簡單的GPIO的應(yīng)用,都不需要任何外部輸入或控制。按鍵同樣使用GPIO接口,但按鍵本身需要外部的輸入,即在驅(qū)動程序中要處理外部中斷。按鍵硬件驅(qū)動原理圖如圖11-7所示。
該實驗是編寫最簡單的字符驅(qū)動程序,這里的設(shè)備也就是一段內(nèi)存,實現(xiàn)簡單的讀寫功能,并列出常用格式的Makefile以及驅(qū)動的加載和卸載腳本。讀者可以熟悉字符設(shè)備驅(qū)動的整個編寫流程。
本章主要介紹了嵌入式Linux設(shè)備驅(qū)動程序的開發(fā)。首先介紹了設(shè)備驅(qū)動程序的概念及Linux對設(shè)備驅(qū)動的處理,這里要明確驅(qū)動程序在Linux中的定位。
目前的桌面機(jī)操作系統(tǒng)大多有著美觀、操作方便、功能齊全的GUI(圖形用戶界面),例如KDE或者GNOME。GUI(圖形用戶界面)是指計算機(jī)與其使用者之間的對話接口,可以說,GUI是當(dāng)今計算機(jī)技術(shù)的重大成就。它的存在為使用者提供了友好便利的界面,并大大地方便了非專業(yè)用戶的使用,使得人們從繁瑣的命令中解脫出來,可以通過窗口、菜單方便地進(jìn)行操作。
通過編寫一個跳動的“Hello,World”字符串,進(jìn)一步熟悉嵌入式Qt的開發(fā)過程。
這里要講的線程相關(guān)操作都是用戶空間中的線程的操作。在Linux中,一般pthread線程庫是一套通用的線程庫,是由POSIX提出的,因此具有很好的可移植性。
用戶選用ARM處理器開發(fā)嵌入式產(chǎn)品時,選擇合適的開發(fā)工具可以加快開發(fā)進(jìn)度,節(jié)省開發(fā)成本。根據(jù)功能不同,ARM應(yīng)用軟件的開發(fā)工具分別有編譯軟件、匯編軟件、連接軟件、調(diào)試軟件、評估板、JTAG仿真器和在線仿真器等,目前世界上大約有四十多家公司提供以上不同種類的開發(fā)產(chǎn)品。
本章主要講解了嵌入式Linux的圖形編程。首先介紹了幾種常見的嵌入式圖形界面編程機(jī)制,并給出了它們之間的關(guān)系。
ARM(Advanced RISC Machines)有三種含義,它是一個公司的名稱,是一類微處理器的通稱,還是一種技術(shù)的名稱。
ARM體系結(jié)構(gòu)是CPU產(chǎn)品所使用的一種體系結(jié)構(gòu),ARM公司開發(fā)了一套擁有知識產(chǎn)權(quán)的RISC體系結(jié)構(gòu)的指令集。每個ARM處理器都有一個特定的指令集架構(gòu),而一個特定的指令集架構(gòu)又可以由多種處理器實現(xiàn)。
ARM處理器當(dāng)前有6個產(chǎn)品系列:ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore,其中ARM11為最近推出的產(chǎn)品。進(jìn)一步的產(chǎn)品來自于合作伙伴,例如Intel Xscale ARM7、ARM9、ARM9E、ARM10E是4個通用處理器系列。每個系列提供一套特定的性能來滿足設(shè)計者對功耗、性能、體積的需求。
表1.3顯示了ARM7、ARM9、ARM10及ARM11內(nèi)核之間屬性的比較。有些屬性依賴于生產(chǎn)過程和工藝,具體芯片需參閱其芯片手冊。
并不是所有的指令都需要上述每一個步驟,但是,多數(shù)指令需要其中的多個步驟。這些步驟往往使用不同的硬件功能,例如,ALU可能只在第4步中用到。因此,如果一條指令不是在前一條指令結(jié)束之前就開始,那么在每一步驟內(nèi)處理器只有少部分的硬件在使用。
ARM7系列處理器主要應(yīng)用于下面一些場合:個人音頻設(shè)備(MP3播放器、WMA播放器、AAC播放器); 接入級的無線設(shè)備;噴墨打印機(jī);數(shù)碼照相機(jī)
ARM內(nèi)核采用精簡指令集結(jié)構(gòu)(RISC,Reduced Instruction Set Computer)體系結(jié)構(gòu)。RISC技術(shù)產(chǎn)生于上世紀(jì)70年代。其目標(biāo)是設(shè)計出一套能在高時鐘頻率下單周期執(zhí)行、簡單而有效的指令集,RISC的設(shè)計重點(diǎn)在于降低硬件執(zhí)行指令的復(fù)雜度,這是因為軟件比硬件容易提供更大的靈活性和更高的智能。
根據(jù)內(nèi)存訪問指令的分類,內(nèi)存訪問指令的尋址方式可以分為以下幾種。 ① 字及無符號字節(jié)的Load/Store指令的尋址方式。 ② 雜類Load/Store指令的尋址方式。 ③ 批量Load/Store指令的尋址方式。 ④ 協(xié)處理器Load/Store指令的尋址方式。
ARM處理器內(nèi)核廣泛應(yīng)用于嵌入式系統(tǒng)和其他行業(yè)應(yīng)用中。為了適應(yīng)不同系統(tǒng)的需要,ARM采用了靈活多樣的存儲管理體系。從平板式內(nèi)存映射到靈活方便的MMU內(nèi)存管理單元,用戶可以根據(jù)自己的需要使用不同的存儲管理策略。
ARM系統(tǒng)完成I/O功能的標(biāo)準(zhǔn)方法是使用存儲器映射I/O。這種方法使用特定的存儲器地址。當(dāng)從這些地址加載或向這些地址存儲時,它們提供I/O功能。某些ARM系統(tǒng)也可能有直接存儲器訪問(DMA,Direct Memory Access)硬件。