第8章:讓開發板發出聲音:蜂鳴器
一、linux驅動的**重用
linux 驅動的**重用有很多種方法。可以採用標準 c 程式的方式。將要重用的**放在其他的檔案(在標頭檔案中宣告)中。如果要使用某些功能, include 相應的標頭檔案即可(這種方式稱為靜態重用)。也可以使用另外一種動態重用的方式,也就是乙個 linux 驅動可以使用另外乙個linux驅動中的資源(函式、變數、巨集等)。本節將詳細介紹這些**重用方法。
編譯是有多個檔案組成的linux驅動
linux 驅動的**不多,將所有的**都放到乙個檔案中並沒有什麼不妥, 但對於複雜的 linux 驅動, 就需要使用多個源**檔案存放不同的功能**, 這樣做有利於**分類和管理。當然,如果linux 驅動要使用第三方的源**, 那麼就不得不編譯多個源**檔案,最終便成.ko檔案或編譯進linux核心(估計不會有人將第三方草原**都複製到 個檔案裡再進行編譯)。
2.linux驅動模組的依賴(匯出符號)
**重用分為靜態和動態兩種。在上一節介紹的方式是**的靜態重用,這種方式是**級的重用,也就是將需要重用的**和使用這些**的使用者放在一起進行編譯,最終生成乙個可執行檔案或程式庫(.ko、.so等)。
在本節將介紹另外一種**共享的方式:模組依賴,也稱為匯出符號。如果只能用一句話解釋如何利用匯出符號實現**共卒,這句話就是「在乙個驅動模組裡使用另乙個驅動模組裡的被匯出的符號(常章、變數、函式等)」。
二、強行解除安裝linux驅動
如果編寫的ljnux驅動程式在邏輯上是正確的,那麼可以正常裝載和解除安裝,但在某些情況下,可能某些程式會出現異常情況。這時linux驅動可能會無法正常解除安裝。在本節將介紹如何處這些無法解除安裝的驅動。
情況1:初始化函式崩潰
由於linux驅動模組的初始化函式(通過module_init 巨集指定的函式)進行了某些操作而崩潰,從而導致初始化函式無法正常返回。這種情況的表現是當前linux 驅動模組沒用被任何其他的linux驅動模組使用,但卻顯示已經被引用了一次。
情況2:解除安裝函式被阻塞
在使用 rmmod 命令解除安裝 linux 驅動時,系統會呼叫解除安裝函式(通過 module_exit 巨集指定的函式),只有解除安裝函式成功返回肘, linux 驅動才會被解除安裝。 如果解除安裝函式被阻塞(可能是死迴圈、併發等情況引起的阻塞), rmmod 命令也會被阻塞.也就是說永遠不會執行到解除安裝 linux 驅動模組的**。這種情況的表現是一執行rmmod命令就會停在那不動了, 永遠也不會返回到系統的操作提示符。
三、蜂鳴器(pwm)驅動實驗
pwm驅動與led驅動的實現流程類似,可能還要簡單一些。在本章只是為了演示如何將乙個 linux驅動分成多個實現檔案, 才使用了比較簡單的pwm驅動。
總結:通過本章的學習, 可以掌握linux驅動常用的**重用方式。除此之外,本章還介紹了一種強行解除安裝linux驅動的方法。通過這種方法,就可免去不斷重啟機器的痛苦了。
讀「讓開發板發出聲音 蜂鳴器驅動」的心得
1可以通過向暫存器寫入特定的值來控制蜂鳴器發出尖叫聲。2乙個複雜的驅動不太可能將所有 都放在乙個檔案中,最好將相關的 放在相應的檔案中。在編譯 linux 驅動時將這些檔案進行聯合編譯。3當開發乙個 linux 驅動時,如果無法使用 rmmod 命令正常解除安裝 linux 驅動,就會造成無法再次安...
讓開發板飛 四軸飛控原理
這一層的主要任務是讀取各感測器的資料。四軸上用的通常是mems感測器,與傳統認知有很多不同 這一層主要負責感測器融合於濾波。通常簡單辦法是互補濾波,複雜辦法是擴充套件卡曼濾波。最後輸出的是飛行器姿態 這一層負責根據pid演算法控制電機,調整飛行器姿態。pid的功能是將飛行器穩定在乙個特定的姿態 對應...
Arc engine 開發 第8章小結
主要是講了柵格資料 其中有,訪問與建立柵格資料 iworkspcacefactory workspacefactory new rasterworkspacefactoryclass iworkspace workspace string filepath e data irasterworkspa...