基于老罗的freg案例,使用NDK工具调用驱动流程详细分析

本文介绍了如何通过NDK编写JNI层,生成so库,从而在Android应用程序中调用设备驱动,以飞思卡尔IMX53开发板上的freg驱动为例。首先,创建Android驱动并在内核编译后,编写Java类并生成JNI头文件,接着编写C语言的freg.c实现,然后编写Android.mk并使用NDK编译生成so库,最后在应用层代码中加载并调用驱动。
摘要由CSDN通过智能技术生成

        鉴于老罗的《Android内核源代码情景分析》第二章介绍的实例freg,全是在源代码中完成(添加HAL层、JNI层以及开启系统服务),这是一个相对复杂的过程。虽然这种调用过程是比较标准的,但对于项目的开发进度会造成很大的拖延(应用程序每变动一次,你不可能就对内核编译一次吧,虽然使用mmm命令每次花费时间几分钟,但一个项目积累下来这个时间量是相当惊人的)。所以本人通过使用NDK工具直接编写JNI层,生成so库文件,然后在Android应用程序中添加类,加载so库文件即可完成对设备驱动的调用。

说实话,没人指导,一人在那摸索真是痛苦,不过痛苦之后方见彩虹,一切都是值得的。允许我唠叨了些,(*^__^*) 好了,废话不多说,直接进入正题,我仍以freg为例进行讲解编写jni库文件用以调用设备的驱动程序,开发板是飞思卡尔的IMX53开发板,cortex-A8内核。

first,编写Android驱动程序,在myAndroid/kernel_imx/drivers文件夹下新建freg文件夹,文件夹下包含freg.c、freg.h、Kconfig、Makefile,内容就不多说了,照着老罗的驱动copy过来即可,当然你要是有耐心自己一点点敲更好了,加深印象嘛。

          接着就到了修改drivers目录下kconfig和Makefile的环节,kconfig中添加 source "drivers/freg/Kconfig",Makefile中添加 obj-$(CONFIG_FREG) += freg/。

          剩下的工作就是编译生成系统文件了。

second,到了本文的重点——编写JNI文件。首先新建Java类,

package com.lcl.whut_open;


import android.util.Log;


public class Jni_open {


public static native int open();

// public static native int get_number();

public static native int write(int i);

public static native int close();


static {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值