1. 程式人生 > >字元裝置驅動程式的三種寫法

字元裝置驅動程式的三種寫法

驅動工程師如何去寫驅動程式?

要看原理圖。確定如何去操作硬體。

對於點亮led燈來說,確定引腳,檢視晶片手冊,確定如何去操作引腳,要設定哪些暫存器,如何設定這些暫存器才可以讓這個引腳輸出高電平或者低電平。

寫驅動程式

驅動程式起封裝作用,如何封裝。應用程式要操作硬體需要open某個裝置檔案。呼叫read函式獲得led的狀態。設定燈的狀態可以呼叫write函式或者各種ioctl函式等。驅動程式就需要實現應用程式所需要的這些介面函式,drv_open,drv_write,drv_ioctl函式等。以面向物件的思想構造fileoperation結構體,並填充該結構體中的方法。a、分配一個fileoperation結構體b、設定該結構體c、註冊結構體,告訴核心,呼叫register_chrdev函式。
問:驅動中如何指定引腳?
有三種方法,一種是在驅動程式碼中寫死,一種是匯流排裝置驅動模型,驅動程式一分為二,一邊是driver函式,一邊是device函式在device函式中指定引腳。最後一種是使用裝置樹指明引腳,這種情況驅動程式也是分成了兩部分,一部分是driver函式同樣是實現字元裝置的分配設定註冊fileoperation結構體等,另外一分部分是裝置樹,如xxx.dts在這裡來指定使用哪個引腳。
上述三種方法唯一的差別就是怎麼指定驅動相關的硬體資源,怎麼指定這些相關的引腳。
因此,驅動程式的寫法核心內容都一樣,差別就在與如何指定硬體資源。
三種方法的優缺點比較:
A. 傳統方法,優點簡單缺點就是不易寬展,硬體更換了板子都要重新寫程式碼重新比編譯,硬體的每次改動都要重新修改軟體版本增加工作量。
B. 匯流排裝置驅動模型,將驅動分為兩部分,device和driver兩部分掛在platform總線上,device負責指定資源,如管腳等。對於相同的硬體操作driver部分都是相同的,硬體只需要編寫相應的device程式碼來指定硬體資源即可。這種方法稍微複雜,但是易擴充套件,冗餘程式碼多且以程式碼的形式出現。
C. 裝置樹。仍然是分為兩部分,一是xxx_driver.c跟匯流排裝置驅動模型一樣,二是裝置樹檔案xxx.dts檔案來指定檔案,核心根據這個檔案來構造xxx_device檔案,執行時去讀取解析xxx.dts檔案。優點是比傳統方法稍複雜,容易擴充套件,沒有冗餘程式碼,不需要重新編譯核心或者驅動只需要提供不一樣的裝置樹檔案。

編寫測試程式