Android底层驱动开发记录:02_JNI

本文详细记录了Android底层驱动开发的过程,从创建IIoctrlJ25Service.aidl开始,逐步介绍如何构建JNI服务,包括在SystemServer中注册服务、编写JNI文件、编译系统服务和修改APP以调用底层驱动。最后提到了使用反射进行硬件访问服务的选项,并提供了相关代码链接。
摘要由CSDN通过智能技术生成

照旧按照教程来,自己画了一下韦老师那个图:

1、创建 IIoctrlJ25Service.aidl 放在/frameworks/base/core/java/android/os/

package android.os;

/** {@hide} */
interface IIoctrlJ25Service
{
    int IoctrlJ25(int which,int status);
}

修改/frameworks/base下的Android.mk,修改完就可以 mmm /frameworks/base ,完成以后你获得一份系统生成的文件out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/os/IIoctrlJ25Service.java 其中最后一部分

static final int TRANSACTION_IoctrlJ25 = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
}
public int IoctrlJ25(int which, int status) throws android.os.RemoteException;
}

与接口文件接口相同。

2、 创建完成IoctrlJ25Service.java,放在frameworks/base/services/core/java/com/android/server/IoctrlJ25Service.java

package com.android.server;
import android.os.IIoctrlJ25Service;
import android.util.Log;

public class IoctrlJ25Service extends IIoctrlJ25Service.Stub {
    private static final String TAG = "IoctrlJ25Service";

	/* call native c function to access hardware */
	public int IoctrlJ25(int which, int status) throws android.os.RemoteException
	{
		Log.i(TAG,"IO "+which+"  status"+status);
		return native_ioctrlj25_ctl(which, status);
	}

	public IoctrlJ25Service() {
		int ret = native_ioctrlj25_open();
		Log.i(TAG,"native_ioctrlj25_open ret="+ret);
	}

	public static native int native_ioctrlj25_open();
	public static native void native_ioctrlj25_close();
	public static native int native_ioctrlj25_ctl(int which, int status);
}

注意IoctrlJ25该接口方法要与上边保持一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值