第三次月考
第八章 讓開發(fā)板發(fā)出聲音:蜂鳴器驅(qū)動
一、linux代碼驅(qū)動的代碼重用:linux驅(qū)動的代碼重用有很多的方法,比如說用c程序的方式,將要重用的代碼放到其他文件中但是要在頭文件中聲明。還可以采用另外一種動態(tài)重用的方式就是一個linux驅(qū)動可以使用另一個驅(qū)動的內(nèi)容,如函數(shù)等。編譯是由多個文件組成的linux驅(qū)動,如果linux驅(qū)動復(fù)雜,就需要多個linux文件來存放不同的功能,這樣有利于分類和管理。
二、強行卸載linux驅(qū)動:如果編寫的linux驅(qū)動程序在邏輯上是正確的,那么是可以正常裝載和卸載的,在有些情況下就不能正常裝載和卸載,Linux驅(qū)動無法卸載的情況:
情況一:初始化函數(shù)崩潰p
情況二:卸載函數(shù)被阻塞
三、蜂鳴器(pwm)驅(qū)動:蜂鳴器與LED一樣也是開發(fā)板自帶的簡單的硬件,若打開蜂鳴器開發(fā)板會發(fā)出想蜂鳴一樣的叫聲,關(guān)閉就會停止尖叫。蜂鳴器驅(qū)動的原理:pwm基本原理通過脈沖來控制蜂鳴器的打開和關(guān)閉。
測試蜂鳴器驅(qū)動:pwm_fun.c則包含了打開和停止pwm的兩個函數(shù),從Makefile中可以看出,編譯器首先將pwm.c和pwm_fun.c文件編譯成pwm.o和pwm_fun.o,然后再將兩個.o文件連接成pwm_driver.o,最后生成pwm_driver.ko,然后執(zhí)行build.sh腳本文件,然后就編譯成功了。
輸入如下命令:
./ioctl /dev/pwm_dev 1 0
./ioctl /dev/pwm_dev 0 0
由于命令必須要求輸入I/O命令的參數(shù),而PWM驅(qū)動未使用I/O命令參數(shù),所以ioctl最后一個命令行可以任意輸入?yún)?shù)。如果最后顯示如下信息并且蜂鳴器發(fā)出尖叫則說明測試成功!
第九章 硬件抽象層:HAL
HAL(Handerware Abstraction Layer,硬件抽象層)是建立在linux程序上的一套程序庫,這套程序庫并不屬于內(nèi)核,而是屬于內(nèi)核之上的應(yīng)用層。
一、為什么要在Android中加入HAL:在linux驅(qū)動中一般有兩種類型的代碼:訪問硬件寄存器的代碼和業(yè)務(wù)邏輯代碼。對于訪問硬件寄存器的代碼而言,并沒有秘密,這都是調(diào)用linux內(nèi)核的標(biāo)準(zhǔn)函數(shù)進行的標(biāo)準(zhǔn)操作。Google為android加入HAL其主要目的在于:
統(tǒng)一硬件的調(diào)用接口;
解決了GPL版權(quán)問題;‘
針對一些特殊要求;
二、andriod HAL架構(gòu)
在Andriod系統(tǒng)中使用程序庫,條用位于內(nèi)核空間的Linux驅(qū)動,然后Andriod應(yīng)用程序。
HAL的基本原理是在android系統(tǒng)中使用程序庫調(diào)用內(nèi)核空間的linux驅(qū)動。
三、 為LED增加HAL:將所有業(yè)務(wù)邏輯從LED驅(qū)動移植到HAL模塊,而LED驅(qū)動模塊只保留讀寫寄存器的工程能。加入HAL會使組成linux驅(qū)動的一整套library更加獨立,更加容易維護。編寫一款支持HAL的LINUX程序驅(qū)動程序的步驟:1.Linux驅(qū)動程序;2.編寫HAL Library;3.編寫Service Library。編寫HAL模塊的步驟:1.定義結(jié)構(gòu)體和宏;2.編寫HAL模塊的open函數(shù);3.定義hw_module_methods_t結(jié)構(gòu)體變量;4.定義HAL_MODULE_INFO_SYM變量;5.編寫HAL模塊的close函數(shù);6.編寫控制LED的函數(shù)。
第十章 嵌入式linux的調(diào)試技術(shù)
對于復(fù)雜的linux驅(qū)動及HAL等程序庫,需要使用各種方法對其進行調(diào)試
一、打印內(nèi)核調(diào)試信息:printK:printK函數(shù)與printf函數(shù)類似,只不過printK函數(shù)運行在內(nèi)核空間,printf函數(shù)運行在用戶空間。也就是說像linux驅(qū)動這樣的linux內(nèi)核程序只能使用printK函數(shù)輸出調(diào)試信息。
二、防止printK函數(shù)降低linux驅(qū)動性能:雖然printK函數(shù)可以很方便的將消息寫入日志文件或控制臺,大那是大量使用printK函數(shù)操控日志文件或控制臺設(shè)備文件會嚴(yán)重影響linux的驅(qū)動性能。只要只在開發(fā)階段使用printK函數(shù),在正式發(fā)布linux驅(qū)動時把有可能影響性能的printK函數(shù)去掉。
三、通過虛擬文件系統(tǒng)(/proc)進行數(shù)據(jù)交互:在linux文件系統(tǒng)中,/proc經(jīng)常用來被作為用戶空間和內(nèi)核空間進行數(shù)據(jù)交互的工具。/proc文件系統(tǒng)的行為方式和設(shè)備系統(tǒng)(/dev)的類似。
四、調(diào)試工具:gdb,gdbservice,和kgdb。
轉(zhuǎn)載于:https://www.cnblogs.com/zhaoruixia/p/5638572.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 昂贵的聘礼(poj 1062)
- 下一篇: ArcObject开发时,axtoolb