Jason Blog

Stay Hungry, Stay Foolish

Linux字符设备驱动Poll机制

Linux poll机制 在用户空间向驱动程序请求数据时,有以下几种方式: 不断查询,条件不满足的时候就是死循环,很耗CPU 休眠唤醒方式,如果条件不满足,应用程序则一直睡眠下去(缺点) poll机制,如果条件不满足,休眠指定的时间,休眠时间内条件满足则唤醒,条件一直不满足时间到达自动唤醒 异步通知,应用程序注册信号处理函数,驱动程序发送信号 看看调用过程 do_...

Android硬件访问服务(二)

"使用HAL操作硬件"

上一节介绍了使用JNI的方式访问硬件,但这样做有个缺点,如果修改了硬件访问接口,就需要重新编译整个Android系统,这显然非常不方便。那有其他办法吗?有的,Google公司在JNI和Linux Driver之间又添加了一层HAL,即硬件访问服务。由HAL层提供硬件访问的接口,JNI层加载HAL库,这样做的好处就是如果修改了硬件接口,只需要重新编译HAL库,而且有些厂家并不希望公开自己的具体...

AndroidStudio如何使用系统hidden类

在应用开发过程中,可能会需要使用到系统的方法。比如自己在系统中添加了自己的服务,而自己添加的接口都是hidden的.那么AndrodStuido怎么使用呢? ##生成classess 首先重新编译系统,不知道为什么,我直接在frameworks/base/services/目录下执行mmm命令,classess始终不会更新,所以需要重新编译系统.然后把classess.jar拷贝出来,An...

Android硬件访问服务(一)

"使用JNI直接操作硬件"

JNI JNI即Java Native Interface.它是Java访问C/C++的接口。我们知道Java是平台无关的语言,那为什么要创建一个和Native相关的语言呢,这不就破会了Java平台无关的特性吗? 虽然Java很强大,几乎无所不能。但在对性能要求比较高的环境中,Java就比C/C++逊色多了,因为毕竟需要虚拟机嘛。而且,有些Linux系统调用Java是不支持的,比如ioc...

Linux下Java JNI调用C语言动态链接库

JNI是Java Native Interface的简写,一般译作Java本地接口.Java可以通过JNI调用C/C++库,这在安卓开发中无疑是非常方便的.因为Android内核是C语言写的,Android又对内核接口进一步封装,这层称为HAL层,一般是C++写的.而Android应用程序是Java写的,Java怎么操作硬件接口?这就是JNI层存在的作用. 在Java代码中通过JNI调用C...

AM335x WakeUp&Sleep

最近在调试AM335X的休眠唤醒功能,可算是把我折腾惨了. 我们的需求是外部点火信号即ACC能唤醒睡眠中的系统,我们调试的时候用的是GPIO按键模拟ACC的方式. 第一个坑 首先根据AM335X的RM-25.2-Integration介绍,只有BANK0的GPIO才能配置成唤醒源. With four GPIO modules, the device allows for a ...

Ti AM335x ADC Driver

内核版本:linux-3.2.0 单板:AM3352 由于这个版本的内核相对比较老,没有采用设备树,而是采用板级文件的方式来构建单板,所以分析起来相对简单.TI的ADC驱动采用的还是平台总线的驱动方式,即driver-platformbus-device. 先来看看platform-device. static struct adc_data am335x_adc_data = { ...

uboot和内核machine id匹配

在调试新版uboot和内核时,可能出现machine id不匹配的问题,解决办法有两种. uboot版本:2011.09 kernel版本:3.2.0 修改uboot源码 /* 目录:board/ti/am335x/evm.c */ gd->bd->bi_arch_number = MACH_TYPE_TIAM335EVM /* MACH_TYPE_TIAM335EV...