Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android驅動移植初識

Android驅動移植初識

編輯:關於Android編程

目的

因為畢設要到公司去做公司給的題目是:基於Android平台的電梯廣告機。Android平台和嵌入式系統的通信是通過CAN總線進行的。具體的硬件是MarsBoard-imx6q火星開發板、Phillip22寸顯示器、usb轉CAN收發器。雖說是電子專業但是以前是主做MCU和匯編的。對於Android做嵌入式還是沒接觸過。隨著項目的進行,我會寫一系列博客來記錄曾經遇到的困惑,解決問題的方法,對問題的認識等。用這種方式來記錄曾經走過的路。

Android嵌入式基本認識

Android開放但不開源的原因

剛開始的兩周,除去專門培訓word規范培訓和AD6繪制PCB培訓剩下的任務就是去Google和Baidu去了解項目的具體要求能力。經過一番搜索原來才知道:做Android驅動基本上和做Linux驅動差不多(其實還要復雜)。Android的內核就是Linux內核,由於為了避開絕對開源Google給Android添加了硬件抽象層(HAL--Hardware Abstarct Level ),就是為了封裝硬件具體的邏輯操作。因為Linux內核遵循GPL協議要求必須開源,如果Android完全開源那麼硬件山寨就無法想象了,這對硬件廠商是毀滅性的沖擊。

Android框架

想必我們以前都看到過下邊這幅圖。但是當我做這個項目的時候才對這幅圖有了不一樣的認識。

Android_system_architecture

Android系統的內核就是Linux內核,圖中也列出了Android系統中重要的驅動。在往上就是硬件抽象層,該層也是用C制作,在往上是應用程序框架和服務程序,該層是用C++和java寫的,最上層是APP,當然是用java寫的了。

要做的具體任務

說說自己要做的具體任務吧: 工業中常用的通訊協議主要有RS485 以太網 CAN等,由於公司CAN總線做的還不錯,所以Android電梯廣告機的通信協議采用CAN總線。所以需要一直CAN總線,對於Linux驅動底層在drivers/net/can/底下有好幾種CAN總線協議,我們選擇的是freescale的Flexcan。關於Android系統編譯、開發環境搭建等過程在本人的另篇博文中有所介紹。編譯Android內核的過程中執行make menuconfig的時候要去設置好Flexcan驅動(如何設置,此處省略吧)。剩下的任務就是如何去編寫硬件抽象層,通過硬件抽象層來訪問內核的Flexcan設備。有了硬件抽象層,接下來就是要編寫JAVA本地接口,Java本地接口JNI用來聯通硬件抽象層和Framework層。關於JNI本人會專門寫幾篇博文來鞏固自己的基礎,此處不再贅述。個人理解就是將本地C/C++代碼向java進行轉換。寫完了JNI之後,我們還需要編寫AndroidFramework Service,編寫服務程序來聯通APP調用和JNI。最後還要寫一個APP,來進行調用Service--調用JNI--調用HAL---調用CAN驅動。。呵呵好麻煩呀。。Android為了獲取數據硬是添上了3層(相比於Linux),可是我們不得不佩服Android的UI接口。用戶體驗確實很好,而且Android的跨平台也很好。 在以後的介紹中,我打算穿插上CAN總線基本認識和JNI編程基本認識、Linux簡單驅動、Android硬件抽象具體操作等博文,整理一下自己的具體思路和方法。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved