從事安卓驅動開發快一年,寫這篇文章僅僅是為了給剛剛從事這行的兄弟們一點參考。
建議:如果是從未接觸過驅動開發的人想入這行,建議買本宋寶華的書先看上2個月,弄懂什麼是驅動,大緻要做哪些工作。安卓驅動開發入門建議先做傳感器的驅動開發,因為傳感器驅動開發架構清晰,相對簡單易于上手。
下面大緻講一下一個項目開發過程中驅動工程師要做的事情:
一:驅動移植
驅動移植要做兩件事:一是代碼的移植,二是代碼的調試。對于一個已經成熟的平台且公司之前開發過該平台,那麼這個階段就相對簡單了,這種情況下比較适合公司培養新人入手,了解驅動移植的過程。但是如果是一個新開發的平台,那麼工作就比較大了,期間遇到的問題會比較多。這個階段的目的就是使得外設能夠跑起來,手機系統能夠操作該外設。
下面以光距離傳感器ltr559在高通MSM8916平台為例進行具體的說明。
1:找到ltr559光距離傳感器代碼,這裡把握一個原則,最省事的是能夠直接找到該平台(這裡是MSM8916)已經調試成功的代碼,如果沒有則找LTR559廠商要源代碼,和LTR559規格書。
2:根據分類,将該代碼放到平台底版本合适的檔案夾下。這裡是/kernel/drivers/sensor/alsps/ ----qualcomm
/kernel/drivers/misc/mediatek/alsps/ -----mediatek
根據平台在上面對應的目錄下建立一個ltr559檔案夾,然後把ltr559.c放到該檔案夾中
3:配置編譯檔案config 和makefile檔案
4:配置該外設:ltr559的裝置樹(一般是.dtsi檔案),mtk項目還需要配置dws.
檔案大緻路徑:/kernel/arch/arm(arm64)/boot/dts/項目名/平台名.dtsi檔案
裝置樹:通俗的講就是該裝置的一些相關的屬性,最重要的是要配置裝置樹是
屬性名compatible ---用于裝置與驅動的比對
slave裝置的 i2c 位址----用于cpu與外設通過I2C通信
gpio,中斷腳的配置等等
5:上面這些都做好後就可以開始編譯代碼了
根目錄下source build/envset ---導入環境
lunch 任何選擇需要編譯的項目
make bootimage -j32 ---開始編譯核心(-j後面數字代表CPU核數)
6:接下來就是調試代碼了,實作該外設基本功能。調試過程中容易遇到的問題之後再講。
7:最後就是解bug階段了。