Android深度探索(三)

來源:互聯網
上載者:User

標籤:

第八章

   蜂鳴器開發板上帶的一個硬體裝置。可以通過向寄存器寫入特定的值來控制蜂鳴器發出的聲音。下來將介紹蜂鳴器的使用原理,並實現蜂鳴器的驅動。pwm驅動的使用不同於LED驅動的使用,其由多個檔案組成,這是大多數linux驅動實現的標準方式。

編譯pwm驅動,有多個檔案組成的驅動。雖然倆個驅動實現的功能不同,但倆個驅動的原始碼是相同,linux驅動模組的依賴,代碼重用分為靜態和動態倆種。靜態重用把代碼放一塊就可以編譯最終產生一個可執行檔或程式庫。本節介紹一種代碼共用方式:模組依賴也稱匯出符號。強行卸載linux驅動,如果編寫的linux驅動在邏輯上是正確的,那麼就可以正常裝載和卸載。在意外環境下出現異常,就無法正常卸載。分為初始化函數崩潰,初始化函數無法正常返回。卸載函數堵塞,在調用卸載函數時成功返回才能順利完成。否則就會出現堵塞。

蜂鳴器驅動是開發板內建的一個簡單硬體,開啟的時候就會發出叫聲。基本原理就是通過脈衝控制蜂鳴器的而開啟和停止。通過I/O命令可以開啟和停止pwm。測試驅動編寫的I/O命令的程式 ioctl.pwm驅動與LED驅動實作類別似,可以還要簡單一些。將linux驅動分成多個實現檔案才使用了較為簡單的pwm驅動。也學到了更多的驅動代碼,對控制開發板有了進一步的瞭解。

第九章

    HAL是建立在Linux驅動之上的一套程式庫,這套程式庫並不屬於Linux核心,而是屬於Linux核心層之上的應用程式層。Google為Android加入HAL主要有如下的目的:統一硬體的調用介面、解決了GPL著作權問題。加入HAL的驅動使應用程式不需要再關心Linux驅動和裝置檔案的互動方式,而只需要像訪問普通API一樣就可以和Linux驅動進行互動。

    基本原理是只從指定寄存器讀取或寫入5個位元組,第1個位元組用於指定讀寫的動作以及寄存器類型。後4個位元組是讀寫的實際的資料。在與LED驅動互動時,只要向裝置檔案讀取或發送5個位元組的資料,就可以讀寫指定的寄存器。由於LED驅動程式的裝置檔案接收的不是字串,而是位元組類型的資料,因此需要單獨做一個程式向裝置檔案寫入位元組形式的資料,或從裝置檔案中讀取位元組類型的資料。

    編寫HAL模組的步驟和原理:定義結構體和宏,編寫HAL模組的open函數,定義hw_module_methods_t結構體變數,定義HAL_MODULE_INFO_SYM變數,編寫HAL模組的 close函數,編寫控制LED的函數。HAL模組可以被Android系統自動調用,自然也擁有類似main或init函數的介面,只不過這個介面不是函數,而是一個固定名稱的結構體變數也就是說,所有的HAL程式都必須要有一個變數。Linux驅動有兩種方式,一種就是通過傳統的方式直接與Linux驅動互動,如直接讀寫裝置檔案的資料。另外一種是Android特有的,就是通過HAL模組。HAL模組本質上就是通過Linux共用庫與Linux驅動互動,然後應用程式再訪問Linux共用庫。

第十章

   對於複雜的Linux驅動及HAL等程式庫,需要使用各種方法對其進行調試,例如,設定斷點、逐步跟蹤代碼、輸出調試資訊等。Printk函數運行在核心空間,printf函數運行在使用者空間。

   使用printk函數可以很方便地將訊息寫入記錄檔或控制台,但大量使用printk函數動作記錄檔案或控制台裝置檔案會嚴重影響Linux驅動的效能,因此,這就要求Linux驅動只在開發階段使用printk函數輸出訊息。Printk函數在控制台顯示訊息是通過/dev/console裝置檔案實現的,該裝置檔案只在字元介面的控制台下才起作用,所以printk函數只有用在字元介面的控制台上才能正常輸出訊息。

    在Linux檔案系統中,/proc經常被用來作為核心空間與使用者空間進行資料互動的工具。/proc是虛擬檔案系統,所以讀寫/proc檔案系統的速度要遠比讀寫/dev檔案系統的速度快。因此,/proc檔案系統也可作為Linux驅動與使用者空間程式互動的工具。在Linux驅動程式中可以使用核心功能在/proc目錄中建立和刪除虛擬檔案,也可以建立和刪除虛擬目錄。/proc檔案系統和/dev檔案系統一樣,也需要設定訪問檔案的動作處理函數,/dev檔案系統通過file_operations.read和file_operations.write函數指標變數讀寫裝置檔案的讀寫動作處理函數。Proc_dir_entry結構體代表一個虛擬目錄或檔案。Android模擬器只能通過連接埠映射方式使用gdbserver偵錯工具,但開發板除了可以通過IP串連到gdbserver外,還可以通過串口進行串連。

Android深度探索(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.