考研已经过去了,android驱动的学习也断了半年多了,现在重新捡起来学习,回顾一下Android驱动的大体框架. Android系统的核心是java,其有一个David虚拟机.Android-app操作硬件也相当于是java操作硬件. 在Linux系统上操作硬件是通过open read write等来实现,也就是操作C库.如果java能直接调用C库中的函数,也就解决了app操作硬件的问题. 下面的文章是java调用C/C++库的方法. 链接:JAVA程序通过JNI调用C/C++库 1.方法1-…
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(基于文本菜单的配置界面)#make xconfig(要求 QT 被安装)#make gconfig(要求 GTK+被安装)在配置 Linux 2.6 内核所使用的 make config. make menuconfig. mak…
Linux platform设备驱动模型 文章目录 Linux platform设备驱动模型 前言 框架 设备与驱动的分离 设备(device) 驱动(driver) 匹配(match) 参考 前言 为什么要往平台设备驱动迁移?这里需要引入设备,总线,驱动这三个概念.上一篇字符型设备驱动的实现实际将设备和驱动集成到同一个文件中实现,如果这里有硬件A的驱动,硬件B的驱动,硬件C的驱动,然后有三类用户接口E,接口F和接口G,这里用户接口是提供给用户层调用的接口,每一种接口又必须兼容这三种硬件,按照原…
在上章-使内核支持烧写yaffs2,裁剪内核并制作补丁了 本章,便开始移植以前2.6内核的驱动到3.4新内核 1.介绍 首先内核更新,有可能会重新定义新的宏,去除以前的宏,以前更改函数名等 所以移植驱动的过程如下: 1)编译 2)解决错误 ->2.1)头文件不对:去掉或改名 ->2.2)宏不对:改名使用新宏 ->2.3)有些函数没有了:改名使用新函数 2.移植内核自带的DM9000网卡驱动 machid=16a(mach-smdk2440.c)的内核下输入ifconfig,发现该板卡的内…
这段时间开始搞安卓camera底层驱动了,把以前的的Linux视频驱动回顾一下,本篇主要概述一下vfl2(video for linux 2). 一. V4L2框架: video for linux version 2虚拟视频驱动vivi.c分析:1.分配video_device2.设置3.注册:video_register_device vivi_init    vivi_create_instance        v4l2_device_register   // 不是主要, 只是用于初始…
[摘要]前文我们分析了一个虚拟硬件的网络驱动例子,从中我们看到了网络设备的一些接口,其实网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求).当然它们实际是有很多不同的. 1.引言 首先块设备在/dev目录下有设备节点,而网络设备没有这样的设备入口.read,write等常规的文件接口在网络设备下也没有意义. 最大的区别在于:块设备只响应内核的数据请求:而网络设备驱动要异步地接收来自外部的数据包.简单地说,块设备驱动是被要求传输数据而网络设备是主动请求传输数据.网络设备驱动还…
阿里巴巴无线事业部近期开源的Android平台下的无侵入运行期AOP框架Dexposed,该框架基于AOP思想,支持经典的AOP使用场景.可应用于日志记录,性能统计,安全控制.事务处理.异常处理等方面. 针对Android平台.Dexposed支持函数级别的在线热更新,比如对已经公布在应用市场上的宿主APK,当我们从crash统计平台上发现某个函数调用有bug,导致常常性crash,这时.能够在本地开发一个补丁APK,并公布到server中.宿主APK下载这个补丁APK并集成后,就能够非常eas…
在给Android添加新的驱动后,app要如何使用呢? 正常的使用一个设备,需要getService.但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务. 第一种: 我们自己的创建的硬件设备驱动的类是被系统定义为了隐藏类,那么在Android系统中如何使用隐藏类呢?为此我们可以根据android的编译过程可以看到我们添加的类被添加到framework.jar.但是framework.jar是dex格式,在我们做app时要使用原生态的jar目标文件. 所以我们使用…
如图所示为 X86 PC 上从上电/复位到运行 Linux 用户空间初始进程的流程.在进入与 Linux相关代码之间,会经历如下阶段. ( 1 ) 当系统上电或复位时, CPU 会将 PC 指针赋值为一个特定的地址 0xFFFF0 并执行该地址处的指令.在 PC 机中,该地址位于 BIOS 中,它保存在主板上的 ROM 或 Flash 中. ( 2) BIOS 运行时按照 CMOS 的设置定义的启动设备顺序来搜索处于活动状态并且可以引导的设备. 若从硬盘启动, BIOS 会将硬盘 MBR(主引导…
在之前的定时器驱动程序中,我们发现在连续按下按键的时候,正常情况下应该是一次按下对应一次松开.而程序有时候会显示是两次按下,一次松开.这个问题是因为在按下的时候,因为是机械按键,所以电压信号会产生一定的波动,会让程序进行两次中断,如何解决这个问题呢? 我们可以在发生一次中断之后等待一段时间再去判断按键是否已经被按下,如果是已经被按下了 则本次有效,否则无效.这里用到了定时器. 定时器常用的操作函数有:   init_timer(&timer);   //定时器初始化   timer.data=;…