开发Android硬件驱动程序

一、

1、实现内核驱动程序模块

驱动程序freg的目录结构如下:

~/android-2.3_r1/kernel/goldfish

----drivers

----freg

----freg.h

----freg.c

----Kconfig

----Makefile

freg.h和freg.c请参考Linux字符设备驱动http://blog.csdn.net/jltxgcy/article/details/29184391

Kconfig如下:

config FREG
	tristate "Fake Register Driver"
	default n
	help
	This is the freg driver for android system.

在编译驱动程序freg之前,我们可以通过执行make memuconfig命令来设置这些编译选项,以便可以指定驱动程序freg的编译方式。驱动程序freg可以以三种方式来编译。第一种方式是直接内建在内核中;第二种方式是编译成内核模块;第三种方式是不编译到内核中。

这个文件定义了驱动程序freg的编译选项。

tristate定义了make menuconfig时弹出界面,配置freg编译选项的名字。

default n表示默认不编译到内核中。

Makefile如下:

obj-$(CONFIG_FREG) += freg.o

其中$(CONFIG_FREG)是一个变量,它的值与驱动程序freg的编译选项有关。如果选择将驱动程序freg内建到内核中,那么变量$(CONFIG_FREG)的值为y;如果选择以模块的方式来编译驱动程序freg,那么变量$(CONFIG_FREG)的值为m;如果变量$(CONFIG_FREG)的值既不为y,也不为m,那么驱动程序freg就不会被编译。

2、修改内核Kconfig

打开arch/arm/Kconfig,找到以下两行内容:

menu "Device Drivers"
......

endmenu

在这两行之间添加下面一行内容,将驱动程序freg的Kconfig文件包含进来。

menu "Device Drivers"
source "drivers/freg/Kconfig"
......

endmenu

3、修改内核Makefile文件

在drivers/Makefile,里面添加以下一行内容:

obj-$(CONFIG_FREG)+= freg/

4、编译内核驱动程序模块

首先执行三句命令:

export ANDROID_PRODUCT_OUT=~/android-2.3_r1/out/target/product/generic  有了这个声明emulator 不用加入那三个img文件
export PATH=$PATH:~/android-2.3_r1/out/host/linux-x86/bin/     emulator命令所在位置
export PATH=$PATH:~/android-2.3_r1/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin  编译内核时使用

然后执行:

弹出下面的界面:

Enable loadable module support前面的[ ],可以按Y(会显示*)或者N(什么都不显示),Y代表内核可以支持动态加载模块,N代表内核不支持动态加载模块。

如果按了Y,那么进入Enable loadable module support后,在子选项"Module unloading",同理按Y,表示支持动态卸载模块。

只有按了Y,在弹出来的第一个配置页面中用上下箭头键选择“Device Drivers”项,接着在弹出的第二个配置界面中继续用上下箭头键选择“Fake Register Driver”项,按Y或者M键,就可以看到奥选项前面方括号的字符变成"*"或者“M”符号,它们分别表示将驱动程序freg编译到内核中或者以模块的方式编译。

最后执行:

编译得到的内核镜像文件zImage保存在arch/arm/boot目录下。

二、

1、开发C可执行程序验证Android硬件驱动程序

~/android-2.3_r1/kernel/goldfish

----external

----freg

----freg.c

----Android.mk

freg.c请参考Linux字符设备驱动http://blog.csdn.net/jltxgcy/article/details/29184391

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := freg
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)

include $(BUILD_EXECUTABLE),表示当前要编译的是一个可执行应用程序模块。

2、编译C可执行文件

首先执行以下命令:

编译成功后,就可以在out/target/product/gerneric/system/bin目录下看到一个freg文件。

然后打包:

在out/target/product/gerneri目录下会生成Android系统镜像文件system.img。

3、启动模拟器,验证正确性。

然后adb shell。

说明我们驱动程序编译正确。

开发Android硬件驱动程序

时间: 2024-11-06 10:55:43

开发Android硬件驱动程序的相关文章

开发Android硬件访问服务

在http://blog.csdn.net/getnextwindow/article/details/47731597中,为Android系统添加了HAL模块,开发好一个硬件抽象层以后,我们通常还需要在应用程序框架中实现一个硬件访问服务.硬件访问服务通过硬件抽象层(HAL)模块来为应用程序提供读写操作.由于硬件抽象层使用c++开发,而应用程序框架中的硬件访问服务是Java语言开发的,因此,硬件访问服务必须通过JNI来调用抽象层模块的接口. Android系统的硬件访问服务通常运行在系统进程Sy

开发Android应用程序来使用硬件访问服务

1.开发Android应用程序来使用硬件访问服务 ~/android-2.3_r1/packages/experimental/Freg ----AndroidManifest.java ----Android.mk ----src ----shy/luo/freg ----Freg.java ----res ----layout ----main.xml ----values ----string.xml ----drawable ----icon.png Freg.java package

用 Eclipse 开发 Android 应用程序

转自:http://www.apkbus.com/android-13828-1-1.html 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程序.第一个示例是一个基本的应用程序,涉及构建和调试的所有阶段.第二个应用程序示例涉及比较复杂的 Android 特性,包括联系人搜索和 Google Maps 地址查找.要想从本教程获得最大收益,具备移动开发经验会有帮助,但不是必需的.开发 Android 应用程序需要 Java? 编程技能,但是对

史无前例,详细视频讲解开发Android端APP开发!!

导读:本文记录了一个机友-小徐基于机智云APP开源框架,从搭建Java环境开始,教你下载JDk.下载AndroidStudio,到控制设备页面等,完成一款正式版安卓APP的开发过程.擅长硬件开发的小伙伴们,如果你想探索APP开发的奥秘,那就来看小徐分享的开发视频吧. 声明:           本人发视频是以个人分享精神.完全免费的心态发布的,这也是我个人生涯第一次录制视频并发布,课程好与坏咱们不谈,我尽最大的努力,把视频做好,把知识点传授给大家,但如果有用词不当,或讲错什么知识点,还请万分见谅

Android 硬件加速器及其问题小结 gif不显示

发现自己的手机上某个界面出现了花屏,某些控件背景被拉伸过多遮住了其他控件,很难看.这种现象高概率出现,分析了下发现:一旦发生这种现象,必然会打印下面这种log,google了下,这种log应该是硬件加速引起的.在从view层级关闭了硬件加速开关之后,问题没有再出现.[plain] view plaincopyprint? D/OpenGLRenderer(10887): GL error from OpenGLRenderer: 0x501      E/OpenGLRenderer(10887

【Xamarin开发 Android 系列 6】 Android 结构基础(上)

前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android 基础知识 一文里,开篇就上图,展示了Android的架构. 大概也就4层 APP--应用程序层 Framework --公共架构层 Native Libs + Dalvik VM---系统类库+虚拟机 Linux Kernel--Linux内核 Android 是一个基于Linux开发的可以运行在智能手机 平板电脑设备上 的系统.如 Android4.0 基于的是Linux2.6 内

Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行h264视频编码和aac音频编码,并发送到RTMP服务器,从而实现Android摄像头直播.程序名为NdkRtmpEncoder,在这里把整个过程,和大体框架介绍一下,算是给需要的人引路. 开发思路 首先,为什么要用NDK来做,因为自己之前就已经实现过RTMP推流.RTMP播放.RTSP转码等等各种

xamarin开发android收集的一些工具

xamarin开发android收集的一些工具 工欲善其事,必先利其器,从16年下半年开始做xamarin相关的开发,平时使用的一些工具和google插件给大家分享一下,都有下载地址,持续更新. Visual Studio Emulator for Android 通过 Visual Studio 实现最佳Android模拟器(微软家的) Genymotion Android模拟器(google家的) Xamarin Live Player xamarin开发android.ios实时预览器 C

哪位大兄弟有用 cMake 开发Android ndk的

一直用 Android studio 开发ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各种蛋疼.主要每次新建一个module都要修改配置半天.之前也看到过google 开发文档有提到 cmake 但是一直没用.哪位大兄弟用过,说下经验 哪位大兄弟有用 cMake 开发Android ndk的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007205830/哪位