Android深度探索——第八章讀書筆記及心得

來源:互聯網
上載者:User

標籤:

蜂鳴器驅動

——第8章讀書筆記及心得

       通過本章的學習,學會了pwm的驅動實驗,知道了蜂鳴器實現的原理。蜂鳴器是開發板上的一個硬體裝置,可以通過向寄存器寫入特定的值來控制蜂鳴器發出尖叫聲。本實驗將linux驅動區分成了多個實現檔案。學會了編寫Makefile檔案。知道了linux驅動模組的依賴。通過實驗學會了linux驅動常用的代碼重用方式及強行卸載linux驅動的方法。

       在C語言中編譯多個原始碼檔案時,如果a.c使用了b.c檔案中的函數,需要在a.c檔案中使用extern預先定義b.c中的函數,extern的作用就是告訴編譯器該函數的函數名、參數個數、參數類型和傳回值類型。這些資訊用以將a.c編譯成a.o。將a.o和b.o串連成可執行檔或程式庫時,編譯器再到b.o中尋找函數的具體實現。所以extern只在編譯階段起作用。

       在編譯時間,最關鍵的一步是編寫Makefile檔案。該檔案的代碼如下:

              Obj-m := multi_file_driver.o

              Multi_file_driver-objs :=main.o fun.o product.

       其中在multi_file_driver目錄中有一個build.sh的指令檔,用於編譯和測試樣本。命令為:#sh build.sh。執行成功後可以使用demesg查看命令日誌資訊。

       代碼重用分為靜態和動態兩種。靜態重用是代碼級的重用,需要將重用的代碼和使用者放在一起進行編譯。最後產生可執行檔檔案或程式庫。模組依賴(到處符號)是另一種代碼共用。在linux驅動中可以實現宏匯出的函數有兩個為EXPORT_SYMBOL和EXPORT_SYMOL_GPL(該函數僅用於GPL協議的linux驅動模組中)。

       當linux驅動模組沒有被正常引用導致的linux驅動無法正常卸載,無法使用rmmod。卸載失敗可能的兩種原因:1、初始化函數崩潰,2、卸載函數被阻塞。當初始化函數崩潰時,需要將linux驅動模組的引用函數清零。可利用的函數“static inline try_module_get(struct module *module)”和“extern void module_put(struct module *module)”。當卸載函數被阻塞時,需要將原來的卸載函數替換成一個空的卸載函數即可。

       蜂鳴器(脈衝寬度調製),基本原理是通過脈衝來控制蜂鳴器的開啟和停止。

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.