Android驱动入门-LED--HAL硬件抽象层程序设计①
硬件平台: FriendlyARM Tiny4412 Cortex-A9
操作系统: UBUNTU 14.04 LTS
时间:2016-09-21 16:15:26
设计HAL硬件抽象层程序,则需要打开Android源代码。
在 Android-5.0.2\hardware\libhardware\modules\目录下都是HAL文件。
创建LED文件夹。在文件夹中创建led.c文件。
#include <cutils/log.h>
#include <fcntl.h>
#include <string.h>
#include <hardware/led.h> //自己创建的头文件
#include <stdbool.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <hardware/hardware.h> #define LOG_TAG "ledhal" //打印调试信息 方便在查看调试信息时筛选 static int fd; int led_on(struct led_device_t *dev, int no )
{
ioctl( fd, LED_ON, no );
return ;
} int led_off(struct led_device_t *dev, int no )
{
ioctl( fd, LED_OFF, no );
return ;
} static int led_close(hw_device_t *dev) {
struct led_device_t *led = (struct led_device_t *)dev; //强制转换指针类型
free(led); //在这里 在退出程序时释放掉之前的申请的空间 close(fd); return ;
} static struct led_device_t led_dev = { //此处已经静态分配自己定义的结构体空间
.led_device = {
.tag = HARDWARE_DEVICE_TAG, //固定格式
.close = led_close,
}, .set_on = led_on,
.set_off = led_off,
}; static int open_led_hal(const hw_module_t* module, const char* name,
hw_device_t** device)
{
*device = &led_dev; //直接赋值已静态分配的结构体指针
fd = open( "/dev/my_led",O_RDWR );
if( fd< )
{
ALOGD("open device file failed\n"); // logcat -s ledhal
return ;
}
return ;
} static struct hw_module_methods_t led_methods = {
.open = open_led_hal, //在程序启动时自动执行
};
struct hw_module_t HAL_MODULE_INFO_SYM = { //程序入口 .tag = HARDWARE_MODULE_TAG,
.id = "led",
.methods = &led_methods, //首先调用其中的open函数 };
在 Android-5.0.2\hardware\libhardware\include\hardware\ 下创建头文件led.h
#ifndef _HARDWARE_LED_H
#define _HARDWARE_LED_H #include <hardware/hardware.h> struct led_device_t { //自己设定的结构体
struct hw_device_t led_device; //此成员为固定格式
int (*set_on)(struct led_device_t *dev, int no );
int (*set_off)(struct led_device_t *dev, int no ); }; #define LED_ON _IOW('G',0,int)
#define LED_OFF _IOW('G',1,int) #endif
在 Android-5.0.2\hardware\libhardware\modules\ 目录下创建Android.mk文件,这里我是复制其他文件夹中的。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := led.default //生成的库名称 # HAL module implementation stored in
# hw/<VIBRATOR_HARDWARE_MODULE_ID>.default.so
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_C_INCLUDES := hardware/libhardware
LOCAL_SRC_FILES := led_hal.c //源文件名称
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_MODULE_TAGS := eng //这里我选用的是工程模式 include $(BUILD_SHARED_LIBRARY)
上面有注释的代表是需要修改的地方。
然后退到Android源代码的目录。执行命令生成相关文件。
mmm hardware/libhardware/modules/led/
将在 out/target/product/tiny4412/system/lib/hw/ 目录下生成相关文件。
在执行 ./gen-img.sh 将生成新的system.img文件 重新安装安卓系统,在控制台模式下,可看到在system\lib\hw目录下有相关文件。
Android驱动入门-LED--HAL硬件抽象层程序设计①的更多相关文章
- Android驱动入门-Led控制+app+ndk库+底层驱动
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20 21:56:48 本次实验使用的是 安卓APP + ...
- Android驱动入门-LED--HAL硬件访问服务层②
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-21 16:58:56 为了避免访问冲突,则创建了硬件访 ...
- android驱动学习---led实验
======================== 驱动: 内核:android-kernel 2.6.36 (必须对应你的板子上内核,不然会出现insmod错误) 目的:通过android应用层用户 ...
- Android驱动入门-LED--测试APP编写③
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-24 10:47:03 在Android Studio中 ...
- Android驱动入门-在Android系统上运行JAVA程序
在linux上运行java程序,直接用javac编译,再用java运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的. 如果想在Android上运行Hello wo ...
- Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)
在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: ...
- 自己动手写最简单的Android驱动---LED驱动的编写【转】
本文转载自:http://blog.csdn.net/k_linux_man/article/details/7023824 转载注明出处,作者:K_Linux_Man, 薛凯 山东中医药大学,给文章 ...
- 深入浅出 - Android系统移植与平台开发(十) - led HAL简单设计案例分析
作者:唐老师,华清远见嵌入式学院讲师. 通过前两节HAL框架分析和JNI概述,我们对Android提供的Stub HAL有了比较详细的了解了,下面我们来看下led的实例,写驱动点亮led灯,就如同写程 ...
- Android驱动学习-app调用内核驱动过程(驱动框架回顾)
考研已经过去了,android驱动的学习也断了半年多了,现在重新捡起来学习,回顾一下Android驱动的大体框架. Android系统的核心是java,其有一个David虚拟机.Android-app ...
随机推荐
- 一次简单的分析手机APK病毒木马
写个笔记记录一下,起因是朋友在QQ上发了个连接叫我看看 安不安全,叫我帮他看看,反正在店里待着也没生意,那就顺便看看咯. 打开这个网址 会自动弹出下载一个名为OOXX的APK安装包. 起先我的思路是 ...
- Python十六进制与字符串的转换
电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频
1.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...
- TextView显示颜色高亮的问题
TextView textView = (TextView) findViewById( R.id.tv ); String text = "<font color=\"#d ...
- iOS 关于手势
不同视图不能同时添加相同手势!
- android MediaPlayer的一些使用方法简历
这里提供一些MediaPlayer的简单方法,方便以后熟练的使用它! 1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlay ...
- [转载]50个Demo展示HTML5无穷的魅力
Flash和HTML5的比较已经成为现在最热门的主题之一,我们不去争论哪个好哪个不好.和HTML5在很酷的动画和简单的游戏等方面一样,除非HTML5在未来几年有一些重大发展,否则Flash在富内容网页 ...
- linux 中的 tar 解压
Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...
- 重启 IIS7 应用程序池的批处理
批处理很简单:c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"ASP.NET v4.0"c:\ ...
- 【英文版本】Android开源项目分类汇总
Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library ...