1. 程式人生 > >Android 底層驅動開發步驟——linux核心層、HAL層、JNI層

Android 底層驅動開發步驟——linux核心層、HAL層、JNI層

1.Linux驅動實現
2.Linux核心驅動測試
3.Android HAL層實現
4.Aidl實現
5.Service java實現
6.Service jni 實現
7.註冊service和jni方法
8.Android App呼叫測試

1.linux驅動實現。

2.Linux核心驅動測試

建立globalmemTest測試檔案,程式碼如下所示:

#include<fcntl.h>
#include<stdio.h>

int main(void)
{
char s[] = "Linux Programmer!\n";
char buffer[80];
int fd=open("/dev/globalmem",O_RDWR);//開啟globalmem裝置,fd返回大於2的數則成功,O_RDWR為許可權
write(fd,s,sizeof(s));          //將字串s寫入globalmem字元裝置中
printf("test write %d %s\n",fd,s );  
        close(fd);  //關閉裝置
fd=open("/dev/globalmem",O_RDWR);
read(fd,buffer,sizeof(buffer));   //讀取globalmem裝置中儲存的資料
printf("test read %d %s\n",fd,buffer);  //輸出結果顯示

return 0;

}

結果展示:


3.在虛擬機器裡面測試

Android原始碼目錄的external下新建globalmem資料夾,將globalmemTest.c放入這裡面,之後在這裡面新建Android.mk


Android.mk檔案

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES :=$(call all-subdir-c-files)
LOCAL_MODULE :=globalmemTest
include $(BUILD_EXECUTABLE)

退回至Android原始碼根目錄下,執行source build/envsetup.sh ,再用lunch載入特定型別,選擇你用的分支數字,之後再make

命令:source build/envsetup.sh

         lunch

         你產品分支數字

         make  [模組名(Android.mk中模組名字)]


之後再目標目錄可以找到編譯後生成的檔案,在虛擬機器中進入adb shell後執行它即可。

4.HAL層可檢視這篇文章