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

下面我就简单实现一个字符驱动

代码编译

在kernel/goldfish/drivers/下创建驱动文件夹,这里我创建test2,
然后编写对应的Kconfig/Makefile文件。这2个文件比较简单。
Kconfig:

把这2个文件都放在test2目录下。

当然仅仅这样还不够,因为你并没有让内核编译关联到我们新创建的test2驱动。

在kernel/goldfish/drivers/Makefile中添加

 

在kernel/goldfish/arch/arm/Kconfig中添加

然后在kernel/goldfish下执行命令make menuconfig

 

然后找到对应的驱动,按键按Y,启动该驱动,然后exit退出保存。

最后执行,make

 

成功生成zImage文件

查看驱动

启动android虚拟机,并指定内核为当前生成的内核。

emulator -kernel kernel/goldfish/arch/arm/boot/zImage

然后执行adb shell进入android系统控制台

执行 cat /proc/devices


 

可以看到test2驱动已经注册了。

但是,我们还希望能在/dev下有test2驱动,那么还需要在test_init最后面再添加2行代码。

然后替换掉原来的test2.c文件,重新make生成zImage文件,然后再调用
emulator -kernel kernel/goldfish/arch/arm/boot/zImage 重新启动模拟器
就会发现,/dev下出现了test2驱动

 

 

这里编写一个字符设备cdev驱动,详情请看 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层可查看这篇文章

Android HAL层编写

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值