硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20  21:56:48 本次实验使用的是 安卓APP + NDK库 + Linux底层驱动. 一. 首先在 Android Studio 上编写APP. 对软件进行布局. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android…
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-21  16:58:56 为了避免访问冲突,则创建了硬件访问服务层. 硬件服务需要注册到service manager. 首先:内核驱动 <<-->> LED-HAL硬件抽象层 <<-->>  CPP文件 <<-->> 服务类JAVA. 服务类JAVA包含: aidl .硬件服务 .注册到Ser…
======================== 驱动: 内核:android-kernel 2.6.36  (必须对应你的板子上内核,不然会出现insmod错误) 目的:通过android应用层用户空间访问内核空间驱动程序. 实验:Button控件,点亮和熄灭LED. 注明:android应用层访问驱动,一般有2种方法来访问到硬件驱动程序. 这里讲解个人看法,各位别介意. 1: 应用层 ---> framwork层JNI ---> 驱动c 2:  应用层 ---> framwork层J…
硬件平台: 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> #inc…
硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-24  10:47:03 在Android Studio中创建工程. 在用到我们自己定义的类时,需要用到隐藏类. 在编译时生成的java库在 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 下 在file-->>project structure中先点击加号…
在linux上运行java程序,直接用javac编译,再用java运行就行了.但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的. 如果想在Android上运行Hello world!.则需要一下步骤. /* File Name: Hello.java */ public class Hello { public static void main(String[] args) { System.out.println("Hello world!"); } } 首…
在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: 我们自己的创建的硬件设备驱动的类是被系统定义为了隐藏类,那么在Android系统中如何使用隐藏类呢?为此我们可以根据android的编译过程可以看到我们添加的类被添加到framework.jar.但是framework.jar是dex格式,在我们做app时要使用原生态的jar目标文件. 所以我们使用…
1.Android驱动框架App1 App2 App3 App4-------------------硬件访问服务-------------------JNI-------------------C库-------------------Linux内核驱动 也就是说Android驱动 = Linux驱动 + 封装.重点在与硬件访问服务,不同的硬件需要不同的硬件访问服务. 2.需要根据“韦东山Android系统视频使用手册20160303.pdf”的第六章安装Android Studio.Me:…
一.系统编程 1.SystemServer.java类中提供了main()方法,说明它是以一个进程的方式存在的,启动后直接执行其run() 2.注册服务ServiceManager.addService("vibrator", vibrator);通过addService来告诉系统,告诉系统指的是service_manager.c表示的进程.service_manager管理着系统中的所有service.要想这些服务能被应用程序使用,就必须要注册进service_manager中.应用…
JNI向上提供本地函数,向下加载HAL文件,并调用HAL的函数: HAL负责访问驱动程序执行硬件操作 JNI和HAL都是用c语言或者C++语言编写的,JNI加载HAL的实质就是使用dlopen加载动态库文件 安多人源代码中第dlopen做了一层封装,在JNI中是通过hw_get_module来加载动态库 external\chromium_org\third_party\hwcplus\src\hardware.chw_get_module("led")//分析hw_get_modul…