Android 从上层到底层-----hal层
CPU:RK3288
系统:Android 5.1
功能:上层 app 控制 led 亮灭
开发板:Firefly RK3288
led_hal.c
path:hardware/rockchip/firefly/led_hal/led_hal.c
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include <string.h>
- #include <errno.h>
#include <hardware/led_hal.h>- //日志的标签
- #define LOG_TAG "led_hal"
- #include <utils/Log.h>
- static int fd;
- int led_hal_dev_close(struct hw_device_t *device)
- {
- if(device != NULL)
- {
- struct led_hw_device_t *temp = (struct led_hw_device_t *)device;
- free(temp);
- }
- close(fd);
- return ;
- }
- int led_hal_open_dev(void)
- {
- ALOGD("--%s--", __func__);
- fd = open("/dev/firefly_leds", O_RDWR);
- if(fd < )
- {
- ALOGE("open failed : %s", strerror(errno));
- return fd;
- }
- return ;
- }
- int led_hal_control_dev(int on)
- {
- ALOGD("--%s--", __func__);
- int ret;
- ret = write(fd, &on, );
- if(ret < )
- {
- ALOGE("control failed : %s", strerror(errno));
- return ret;
- }
- return ;
- }
- //该函数正确返回0
- int led_hal_module_open(const struct hw_module_t *module, const char *id,
- struct hw_device_t **device)
- {
- ALOGD("--%s--", __func__);
- struct led_hw_device_t *led_dev = NULL;
- led_dev = (struct led_hw_device_t *)malloc(sizeof(struct led_hw_device_t));
- if (led_dev == NULL)
- {
- ALOGE("malloc failed");
- return -;
- }
- ALOGD("malloc success");
- //初始化device对象
- led_dev->common.tag = HARDWARE_DEVICE_TAG;
- led_dev->common.version = ;
- led_dev->common.module = module;
- led_dev->common.close = led_hal_dev_close;
- led_dev->open = led_hal_open_dev;
- led_dev->control = led_hal_control_dev;
- //将当前的led_dev传递给jni层
- *device = (struct hw_device_t *)led_dev;
- return ;
- }
- struct hw_module_methods_t led_hal_methods = {
- open : led_hal_module_open,
- };
- //结构体名称必须为HMI
- struct led_hw_module_t HMI = {
- common : {
- tag : HARDWARE_MODULE_TAG,
- version_major : ,
- version_minor : ,
- //id必须与jni层的一致
- id : LED_HAL_MODULE_ID,
- name : "firefly led hal module",
- methods : &led_hal_methods,
- },
- };
led_hal.h
path:hardware/libhardware/include/hardware/led_hal.h
- #ifndef _LED_HAL_H_
- #define _LED_HAL_H_
- #include <hardware/hardware.h>
- #define LED_HAL_MODULE_ID "firefly_led_hal"
- //自定义module对象,一定要继承父类,
- //可以扩展
- struct led_hw_module_t {
- //一定要在结构体第一位,名称必须是common
- struct hw_module_t common;
- //下面是扩展,用于测试
- int test;
- };
- //自定义device对象,一定要继承父类
- //一定要扩展
- struct led_hw_device_t {
- //一定要在结构体第一位,名称必须是common
- struct hw_device_t common;
- //下面为扩展
- int (*open)(void);
- int (*control)(int on);
- };
- #endif
Android.mk
path:hardware/rockchip/firefly/led_hal/led_hal.c
语法参照 Android.mk语法解析
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := firefly_led_hal.default
- LOCAL_SRC_FILES := led_hal.c
- LOCAL_LDLIBS := -llog
- LOCAL_MODULE_TAGS := optional
- LOCAL_SHARED_LIBRARIES := liblog libcutils
- LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
- include $(BUILD_SHARED_LIBRARY)
Android 从上层到底层-----kernel层
Android 从上层到底层-----jni层
Android 从上层到底层-----app层
Android 从上层到底层-----hal层的更多相关文章
- Android 从上层到底层-----app层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 MainActivity.java package com.aaron ...
- Android 从上层到底层-----jni层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 led_jni.h path:hardware/rockchip/fi ...
- Android 从上层到底层-----kernel层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 1.在dts文件中增加 led 设备 path:kernel/arch ...
- Android HAL层与Linux Kernel层驱动开发简介
近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...
- Android Hal层简要分析
Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...
- 【Android】Sensor框架HAL层解读
Android sensor构建 Android4.1 系统内置对传感器的支持达13种,他们分别是:加速度传感器(accelerometer).磁力传感器(magnetic field).方向传感器( ...
- 〖Android〗OK6410a的Android HAL层代码编写笔记
一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...
- Android native进程间通信实例-binder篇之——HAL层访问JAVA层的服务
有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究. 之前的文章末尾部分说过了service call 可以用来调试系统的binder服务 ...
- Linux、Android系统调用从上层到底层的调用路径浅析
参考: https://blog.csdn.net/liuhangtiant/article/details/85149369 http://blog.sina.com.cn/s/blog_79433 ...
随机推荐
- Qt5.3中qml ApplicationWindow设置窗口无边框问题
这个版本的qt在这里有点bug.. 设置ApplicationWindow的flags属性为Qt.FramelessWindowHint的确可以使程序无边框,但是同时程序在任务栏的图标也没了. 看文档 ...
- json与api- 天气api 博客词频分析
一.json基础 1.1 json的介绍 json现在成为各种程序与语言之间交互的一种数据格式,本质是文本,字符串. json有两种格式: 1. 类似字典 {k:v,k,v} 2. 类似列表 { ...
- [C#]ref,out关键字的作用
ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 使用ref前必须对变量赋值,out不用 out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都 ...
- LeetCode OJ:H-Index(H指数)
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- String类的编码和解码问题
我们前面知道同一个字符在利用不同的编码表得到的结果一般是不一样的. 这里讨论个字符串的编码和解码问题 字符串的一些方法: String(byte[] b,Charset charset); Strin ...
- flask框架中勾子函数的使用
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图函数避免编 ...
- 安装spring报错:Cannot complete the install because of a conflicting dependency.
问题: 在Eclipse里安装Spring插件,help->install new software用端点安装,说是出现软件依赖错误报错如下: Cannot complete the insta ...
- 迭代器、foreach循环、泛型集合
集合的迭代 语法:Iterator<Object> it=集合.iterator(); while(it.hasNext()){ Object obj=it.next(); } is.ha ...
- React-Native进阶_3.触摸高亮显示TouchableHighlight
在安卓原生ListView 点击 其中一个子视图时,会有高亮效果,这个效果在ReactNative 中通过TouchableHighlight 实现,具体使用如下 4.触摸高亮显示 Touchabl ...
- 【Keras学习】资源
Keras项目github源码(python):keras-team/keras: Deep Learning for humans 里面的docs包含说明文档 中文文档:Keras中文文档 预训练模 ...