输入系统的移植

2016-2-18 chenhui 移植

输入系统,就是用来接收并处理用户通过触摸屏、键盘(这两个也是最标准的输入设备)等设备发出的输入信息的系统。 和显示系统一样,输入系统也是由:Linux 驱动、HAL 模块、Framework 层组成的,只是显示系统的 Linux 驱动使用的是 FrameBuffer,而输入系统使用的则是 Linux 内核中的输入子系统。 输入子系统和 Fram...

阅读全文>>

评论(3) 浏览(1405)

显示系统的移植

2016-2-17 chenhui 移植

如果你会编写 Linux 驱动或者会编写基于 Linux 的 GUI 程序,那么你就应该清楚内核是通过 FrameBuffer 机制来为上层提供绘制屏幕图像的接口的。 FrameBuffer 实际上是一个驱动程序,但他和普通的驱动程序有点不一样,他这个驱动程序是一个框架,真正的硬件细节代码需要程序员另外编写 FrameBuffer 驱动来实现。这么做是因为不同的驱...

阅读全文>>

评论(0) 浏览(396)

添加新设备

2016-2-13 chenhui 移植

Android 由两个部分组成: 为 Android 定制过的 Linux 内核 真正的 Android 系统:处于用户空间的虚拟机和各自库  所谓的移植,其实就是移植(或编写)驱动以让系统能够在某个硬件平台上运行,Android 也是这样。 我们一定要搞清楚一件事:除了修改过的 Linux ...

阅读全文>>

评论(0) 浏览(428)

Android 编译系统

2016-2-13 chenhui 移植

Android 也是使用 Makefile 来对源代码进行编译,他有几个非常重要的 Makefile 文件如下: /Makefile     /Build/core/main.mk            &nb...

阅读全文>>

评论(0) 浏览(176)

Google 服务的添加

2015-12-31 chenhui ROM

Android 源代码中并不包含比如 Google Play 的谷歌服务,这些谷歌服务也不开源,所以需要我们自己进一步添加。 添加方法也很简单,获取到 Google 服务的 APK 包后,直接放到 system/app 目录里即可。 下载地址如下: GoogleServicesFramework.apk ...

阅读全文>>

评论(0) 浏览(176)

Native 代码回调 Java 代码

2015-12-23 chenhui NDK

C 语言调用 Java 代码和 Java 反射实际上非常相似,或者说在底层上来说根本就是一回事。本文介绍如何使用 C 代码来调用 Java 代码。 void JNICALL Java_xxx_calljava(JNIEnv * env, jobject obj){ //使用 java 的反射得到要使用的 Java 类 jclass dpclazz = ...

阅读全文>>

评论(0) 浏览(153)

NDK 库的开发和应用程序的调用

2015-12-23 chenhui NDK

NDK 程序分两种,一种是以 JNI 库的形式存在,被 Android 应用调用,也就是官方文档中的 hello-jni;这个另一种是完全使用本地代码编写,对应官方文档中的 native_activity。本文介绍第一种 NDK 程序的编写方法,第二种 NDK 程序的编写方法,可以参考本篇译文:freehui.com/?post=165。 先给出编写步骤,然后再给出每一...

阅读全文>>

评论(0) 浏览(192)

应用程序使用 JNI 接口操作硬件

2015-12-22 chenhui HAL

编写完 HAL 库和 Service 库后,驱动部分就算是完成了,接下来的就是应用程序如何去使用 Service 库提供的 JNI 接口的问题。 一般来说,我们都会把调用 Service 库的代码写成一个类,并单独打包成 jar 文件,下面是这么一个类的简单实现。 package com.android; public class ...

阅读全文>>

评论(0) 浏览(151)

HAL Service 的编写和编译

2015-12-22 chenhui HAL

在编写完 HAL 模块后,还需要再编写 Service,这个 Service 是一个 JNI 库(或者说,就是一个 NDK 程序),他完成对 HAL 模块的加载,并实现 JNI 接口供一个应用程序使用,应用程序可以简单地调用 JNI 接口实现对硬件的操作。他和 HAL 库一样,都是 .so 文件。 Service 库的代码编写起来其实非常简单,下面是一个实例代码,他可以和前一篇文章的 HA...

阅读全文>>

评论(0) 浏览(270)

HAL 模块的编写和编译

2015-12-22 chenhui HAL

使用 HAL 的驱动程序的编写步骤如下: 编写 Linux 驱动。这个驱动程序应该只做到“ 数据中转 ”的作用,因为处理逻辑都要放在 HAL 一层。 编写 HAL 库。HAL 库位于 Android 的库层,所以本质上就是一个 Linux 库。 编写 Service 库。非必须,老版本没有这个步骤,后来加上的。他一般是被 JNI 调用的...

阅读全文>>

评论(0) 浏览(236)

HAL 的基本概念

2015-12-22 chenhui HAL

Android 的驱动程序有两种实现方式:一是 把逻辑完全使用传统的 Linux 驱动实现;二是在 Linux 驱动只作为一个 “ 中转站 ” 使用,而真正的处理逻辑则使用处于用户空间的 HAL 来实现。 HAL 全称为硬件抽象层(Hard Abstraction Layout),他存在的目标是解决 Linux 驱动的开源问题。由于 Linux 传统驱动...

阅读全文>>

评论(0) 浏览(165)

[译自官方文档] NDK 编程教程之 Eclipse 调用 NDK

2015-12-21 chenhui NDK

安装 要安装和配置 NDK,先按照下面的步骤来: 要使用 NDK ,你必须先安装 Android SDK。 然后,下载并解压 NDK,确定下载的版本符合你的平台。你可以把解压后的目录放在你的任何一个地方。 如果你要从命令行构建, 打开终端窗口, 并使用包含 NDK 的本地目录更新 PATH 环...

阅读全文>>

评论(0) 浏览(156)

[译自官方文档] NDK 编程教程之native-activity

2015-12-20 chenhui NDK

这是一个非常简单的完全本地的应用程序示例,他没有使用 Java 源代码。在没有任何 Java 源代码的时候,Java 编译器仍然会为 DVM 创建一个可执行 stub 来运行,这个 stub 封装了实际的代码,他存在于 .so 文件中。 应用程序本身只是简单地把一个颜色映射到整个屏幕上,之后更改部分颜色以响应检测到的移动。 AndroidManifest.xml ...

阅读全文>>

评论(0) 浏览(327)

[译自官方文档] NDK 编程教程之hello-jni

2015-12-20 chenhui NDK

这个例子提供了一个最为基础的最小的使用 NDK 构建的应用程序。 Android.mk 下面两行提供了本地源文件名,以及构建出的共享库名。构建出的库的全名是 libhello-jni.so,但你应该省略掉他的后缀名. LOCAL_SRC_FILES := hello-jni.c LOCAL_MODULE := hello-jni 查看更多关系如何使用这个文件的文档,请查看...

阅读全文>>

评论(0) 浏览(220)

[译自官方文档] NDK 编程教程之概论

2015-12-20 chenhui NDK

在开始之前 本教程假设你已经: 熟悉 Android app 的开发和 C/C++ 语言的基本概念. 使用 带 ADT 插件的 Eclipse 进行工作. 引言 本节提供了一个关于如何使用 NDK 进行工作的高级教程。Android NDK 是一个允许你在 APP 中嵌入 C/C++ 代码的一...

阅读全文>>

评论(0) 浏览(360)

开发环境的搭建

2015-12-20 chenhui NDK

NDK 支持 Linux、Mac OS X 及 Windows,在这些平台上运行 NDK 必须满足以下要求: 完整的不低于 1.5 的 Android SDK  GNU Make 最新版本的 awk 如果是 Windows,那么还需要 Cygwin 1.7 以上的版本 在确...

阅读全文>>

评论(0) 浏览(141)

Edify 脚本语言

2015-12-17 chenhui ROM

如果我们把一个 Recovery 刷机包(下面简称刷机包)解压开,并进入 META-INF/com/google/android 目录,我们会发现两个文件:update-binary 和 updater-script。 这两个文件是刷机包中最为重要的两个文件,其中 updater-script 是一个 edify 脚本文件,这个脚本提供了一系列供我们操作的函数,比如...

阅读全文>>

评论(0) 浏览(312)

Recovery ROM 的制作

2015-12-16 chenhui ROM

Recovery ROM 相对于之前提到的 Bootloader 包,他是更为智能的一种刷机模式,因为线刷包能做的事情他都能做,而且他还能很多线刷包所不能做的事情,比如只更改系统的文件系统的某一部分内容而不修改到其他文件,线刷包由于只是简单粗暴的烧写 Flash,所以无法实现这个功能。由于 Recovery ROM 可以被放在 SD 卡里然后进行刷机,所以他又被称为卡刷包。 ...

阅读全文>>

评论(0) 浏览(897)

Bootloader ROM 的制作

2015-12-16 chenhui ROM

所谓的 Bootloader ROM,就是在 Bootloader 下(在 Android 中又称 fastboot 模式)进行刷机的一种刷机包。由于刷机时必须电脑连接着手机,所以他又被称为线刷包。 如果你以前在开发板上烧写过 Linux,那么你就能明白这个线刷包到底是怎么回事,因为实际上所谓的线刷包,其实就是把 Android 系统的每个分区全都做成镜像(当然也可以只做...

阅读全文>>

评论(0) 浏览(433)

用户数据镜像 userdata.img

2015-12-16 chenhui ROM

在我们编译完 Android 源代码后,他的 out/target/product/xxx/ 目录下就会一个 userdata.img 和一个 data 目录。这个 userdata.img 就是用户数据镜像,他保存在 userdata 分区并被挂载到 Andorid 的 /data 目录。 我们可以把一些 ROM 自带的应用程序和其他需要和 ROM 一起存放的文件打包到...

阅读全文>>

评论(0) 浏览(570)

Copyright ©2015-2016 freehui All rights reserved