
Android设备驱动开发
文章平均质量分 87
记录学习Android设备驱动开发的点点滴滴
阿迷创客
主要从事安卓设备,Soc的BSP开发相关工作,熟悉mtk(mstar)、amlogic、全志,其他还玩过rk、高通等平台,平时有空就专研专研技术,写写小作文……
展开
-
在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?
PWM风扇也是日常Android智能设备开发中常见的外围小设备,而对于驱动工程师而言,主要工作就是实现风扇的控制驱动,除了设定风扇的速度之外,还要获取风扇的转速信息,而PWM风扇就是一个可以通过FG信号线反馈转速信息的设备。 本文即基于全志H713平台,介绍一下FG信号线的用法,以及PWM风扇转速获取的算法。原创 2024-08-16 15:17:52 · 4971 阅读 · 0 评论 -
在写温度传感器驱动之前:热敏电阻的温度、电阻、电压的映射关系
在日常的Soc驱动开发中,对于芯片的实际使用者,大多数时间所调试的是外围设备的驱动,或者说是自己新增设备的驱动。本文即介绍其中常用的一个小模组:温度传感器(NTC热敏电阻)的使用方法,关键是搞懂其中的映射关系是否正确:温度值、电阻值、ADC读取的电压值。当映射正确后,我们就可以很快的将它们组织成需要的温度曲线,或者填写各个温控阈值(在什么温度,干什么事情)。原创 2024-08-11 15:41:21 · 1445 阅读 · 0 评论 -
i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset
- 在编写某I2C设备之前,可以使用开源的I2C测试工具,先对总线和设备的连通性做一个简单测试,或更进一步手动发送一些命令,进行设备的初始化、检验相关功能。- 本文即介绍i2ctools工具,它的源文件只有1个.c文件,但编译后有一组子工具。在全志的芯片平台上,基本都有携带,可以直接使用,例如H713以及本文的H618平台,掌握此工具后,可大幅提升I2C设备的开发和调试效率。原创 2024-02-25 01:38:02 · 5219 阅读 · 0 评论 -
基于Amlogic 安卓9.0, 驱动简说(五):基于GPIO、LED子系统的LED驱动
- 本章介绍LED子系统的使用。 使用LED子系统,可以轻松实现对LED,例如常见的闪烁和亮度控制功能。 简单起见,本章先使用GPIO实现,在不模拟PWM的情况下,只能实现点亮和灭灯的效果,重点是介绍GPIO、LED子系统的使用。原创 2023-01-05 01:55:14 · 1582 阅读 · 0 评论 -
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍Platform平台驱动框架,使用此框架,将可以用上DTS设备树文件,实现设备的静态枚举,实现设备与驱动的分离。本文基于Amlogic T972 , Android 9.0, 内核版本 4.9.113。原创 2022-12-29 19:01:54 · 1161 阅读 · 0 评论 -
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
在第1篇文章《驱动简说(一):字符设备驱动,手动创建设备》中,我们了解了基础的字符设备驱动的写法,但也注意到了它的缺点:设备号需要自己去找,自己创建(容易冲突);需要自己创建和驱动匹配的设备文件(否则应用层无设备可用)。在第2篇文章《驱动简说(二):字符设备驱动,自动创建设备》中,我们通过alloc自动分配设备号,以及主动注册class、device对象,解决了第1篇的两个问题。但是…… 我们还有更简单的方法,达到第2篇的目的,但不需要写第2篇的那么多代码!原创 2022-12-29 12:05:15 · 808 阅读 · 0 评论 -
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
本文是“驱动简说”的第2篇,是本人的读书总结,对于大多数人来说,看看这些例子就已经够用!回顾前文的驱动,有如下两个缺点,本篇文章,就以经典例子,来解决这两个问题: 1.主设备号是手动创建的,而不是分配的; 2.设备文件还需要手动创建。原创 2022-12-28 22:48:50 · 833 阅读 · 0 评论 -
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文提取书籍中,较为经典的例子。让驱动的学习,变得更加简单!目前市面上,很难找到一本讲得特别好的嵌入式驱动开发教程,尤其是适配Android 平台的。LDD3是一本翻译较好,写得较好的书,但其内容基于Linux kernel 2.6版本,接口和架构都较老了。国产书籍普遍较为片面,翻译的书籍则表述较差(机器翻译),于是乎,看完之后,想总结一下!本文基于Amlogic T972 , Android 9.0, 内核版本 4.9.113。原创 2022-12-28 16:49:30 · 1203 阅读 · 1 评论 -
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第3篇,介绍如何利用内核中现有的i2c bus驱动,在最少的代码量上,做到对slaver设备的控制。基于现有的i2c bus驱动,我们可直接在应用层编写slaver设备的控制代码!如此,大大降低了设备驱动的开发难度。当然,工资还是得照样领!原创 2022-12-25 22:23:34 · 1012 阅读 · 0 评论 -
不写一行代码(二):实现安卓基于PWM的LED设备驱动
在完成了基于GPIO的LED设备驱动的文章后,本文继续介绍基于PWM的LED设备驱动。同样的,站在巨人的肩膀上,不写一行代码……,但工资还是要领……原创 2022-12-25 00:32:03 · 1468 阅读 · 0 评论 -
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
安卓设备驱动,本质上依旧还是Linux架构的驱动程序,基于Linux Kernel。在做安卓ROM开发的过程中,我们经常要控制设备的LED灯,许多情况下,我们直接就去写了一个LED的字符设备驱动,却不知,这类驱动,在kernel driver大神手下,早就给我们写了通用版本,但凡我们多看它一眼,就可以站在巨人的肩膀上,不写一行代码……,但工资还是要领……原创 2022-12-24 12:01:12 · 2745 阅读 · 2 评论 -
重温Linux内核:互斥和同步
对于临界资源,常用的就是自旋锁和互斥锁,区别是自旋锁不可打断(睡眠),而互斥锁可以。信号量一般用于实现内核中的同步机制。本文集合了自旋锁、读写锁、顺序锁、互斥锁、信号量、完成量、RCU等概念及例子,大体上,相关内容,看这篇应该够了。原创 2022-12-07 20:32:46 · 624 阅读 · 0 评论 -
Linux内核的基础设施:工作队列、等待队列
本文介绍Linux内核的睡眠机制,介绍了等待队列的用法,以简单的demo案例,介绍使用细节。大体上,通常,我们所开发的设备驱动程序,并不需要有自己的工作队列。如果我们只是偶尔需要向队列中提交任务,则内核已为我们提供了一个更简单、更有效的方法,就是使用内核提供的现成的工作队列!但因为它是和内核中其他任务共享的,所以我们不应该在里面执行一些需要sleep很久的工作。本文是读书笔记的实操记录。原创 2022-12-06 22:50:13 · 912 阅读 · 0 评论