在A33上移植ICM20608D,歷時3.5天。回顧該Sneosr移植、調試歷程,沒有產生過多障礙及意外。能夠說,一切按設想中的樣子演進。16日下午完成了linux driver及android hal的移植,確認sensor工做正常,interrupt可產生,driver可做出響應。17日及18日,熟悉代碼及調試。19日供應商現場支持,收官。linux
Android sensors的移植方法,能夠歸納爲如下步驟:android
若上述5步作到位但未獲得預期結果,迅速聯繫供應商作現場支持。shell
第1點沒必要多說,讀懂原理圖是做爲嵌入式軟件工程師的基本素質。函數
第2點是移植driver,通常來講,供應商會給到某平臺的適用source code,不必定是全志平臺,但必須是可用的,完整的source code。移植driver要作的工做通常是:工具
將驅動代碼正確移植到平臺,成功編譯後。須要檢查軟件代碼在時序上是否知足sensor工做所需的時序,sensor的中斷是否合理地產生,driver的中斷處理函數是否合理地進行響應。spa
第3點至關重要,在移植HAL以前,必須想辦法嘗試脫離HAL層的影響對底層進行debug確認。仔細閱讀ICM20608D驅動代碼後,不難發現,驅動裏面會產生若干節點,其中就包括讀取sensor registers當前值的節點及其餘重要的節點。另外,在HAL代碼中,也存在好幾個調試用的工具源碼,好比selftest、mpu_iio等。能夠將它們編譯出現,在shell中直接執行。debug
第4點是移植HAL層代碼,將HAL代碼存放到android/hardware下,全志平臺加載sensor hal是根據sensors.<platform>.so的規劃進行加載,所以,應優先將LOCAL_MODULE的值修改成sensors.$(TARGET_BOARD_PLATFORM)。因爲HAL層代碼不一樣產家規範不同,很難抽象出能適用於全部sensor hal移植的方法論。可是,只要代碼自己是完整的,經過閱讀代碼,編譯,debug,成功移植只是時間問題。調試
HAL代碼向上註冊硬件設備使用是公共的規範和接口,通常來講,不須要太懷疑SensorService的正確性。code
若是說經歷了上面的過程,sensor仍然沒有辦法在系統中正常使用起來,就應該堅決果斷地約供應商技術人員過來現場支持。緣由有:orm
總結: