安卓驅動開發要乾的那些事
建議:如果是從未接觸過驅動開發的人想入這行,建議買本宋寶華的書先看上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階段了。