怎样实现硬件访问服务(上)

简介: 怎样实现硬件访问服务

本文原文链接:https://xuesong.blog.csdn.net/article/details/80933999?spm=1001.2014.3001.5502



1、JNI 和 HAL

(com_android_server_ledservice.cpp)

注册JNI本地方法

|加载

hal_led.c : open,read,write


3、修改SystemServer.java:加载C库

1675857907836.jpg

在其main方法里面:

public static void main(String[] args){
    new SystemServer().run();
}
run(){
    System.loadLibrary("android_servers");//对应onload.cpp文件
}


run方法中:

1675857931851.jpg

JNI文件:注册本地方法com_android_server_LedService.cpp供LedService.java使用


1675857919238.jpg

有哪些本地方法

static const JNINativeMethod methods[] = {
    {"native_ledOpen","()I",(void *)ledOpen},
    {"native_ledClose","()V",(void *)ledClose},
    {"native_ledCtrl","(II)I",(void *)ledCtrl},
}


注册本地方法:

int register_android_server_LedService(JNIEnv *env)
{ 
    //给LedService 类注册
    return 
//注册本地方法。
jniRegisterNativeMethods(env,"com/android/server/LedService",methods,NELEM(methods));
}


onload.cpp:被调用

extern "C" jint JNI_On_Load()
{
    register_android_server_LedService(env);
}

1675857989256.jpg


对于复杂的操作可修改HAl,然后将生成的.so文件放到系统中。


startOtherServices:

1675858039374.jpg

1675858048167.jpg

1675858055880.jpg

这就是个类

1675858066658.jpg

调用一些NATive方法:

1675858254959.jpg

1675858264522.jpg

告诉系统是谁:

1675857663546.jpg

相关文章
|
25天前
|
存储 人工智能 物联网
探索操作系统的本质与影响
本文深入探讨了操作系统的核心概念、历史演变及其对现代社会的深远影响。通过对操作系统架构、功能及发展趋势的分析,旨在为读者提供一个全面而深入的理解,展现其在技术世界中的基石地位。
|
2月前
|
编译器 API C语言
C语言与硬件交互:通过I/O端口控制硬件。
C语言与硬件交互:通过I/O端口控制硬件。
46 0
|
5月前
|
Linux
Linux设备驱动之多个同类设备共用一套驱动
Linux设备驱动之多个同类设备共用一套驱动
139 0
|
5月前
硬件中电感器的重要作用与特性
硬件中电感器的重要作用与特性
46 0
|
人机交互
操作系统进行设备控制的常见方式
基于上一篇博客,对操作系统进行常见设备控制的方式介绍,并知识拓展。
446 2
操作系统进行设备控制的常见方式
|
存储 安全 程序员
操作系统的概念、功能、目标
操作系统的概念、功能、目标
194 1
|
固态存储 异构计算
电脑的硬件组成部分以及它们的维护方法?
电脑的硬件组成部分以及它们的维护方法?
|
缓存 前端开发 调度
根据Nehalem架构了解CPU内部细节
根据Nehalem架构了解CPU内部细节
283 0
|
缓存 开发工具 数据安全/隐私保护
【软考学习17】数据传输控制方式、虚设备和微内核操作系统
【软考学习17】数据传输控制方式、虚设备和微内核操作系统
148 0
Web服务器是直接和硬件交互的吗?底层原理是什么?
Web服务器是直接和硬件交互的吗?底层原理是什么?
164 0