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驱动实现。

这里编写一个字符设备cdev驱动,详情请看 linux设备驱动学习(二)——字符设备编写及测试


2.Linux内核驱动测试

建立globalmemTest测试文件,代码如下所示:

#include
#include

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;

}

结果展示:

Android 底层驱动开发步骤——linux内核层、HAL层、JNI层_第1张图片


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中模块名字)]

Android 底层驱动开发步骤——linux内核层、HAL层、JNI层_第2张图片

之后再目标目录可以找到编译后生成的文件,在虚拟机中进入adb shell后执行它即可。


4.HAL层可查看这篇文章

Android HAL层编写



你可能感兴趣的:(android,linux)