博主专注于 Android/Linux 外设驱动,学习计划如下:
学习 Linux 有两种路线:第一种是按照 Linux 启动流程,去梳理每个子系统。第二种是先把 Linux 所有用到的子系统学会,再组合起来。
博主选择第一种方式,知道自己在学什么东西,在系统什么阶段起作用。
其实就是沿着 /init/main.c 的 start_kernel 函数一路向下分析。
GPIO 是基础,Linux 下 GPIO 的使用和单片机还是有区别的。
主要学习 PIN 脚的硬件结构、Linux GPIO 子系统、pinctrl 子系统的实现和用法。
中断也是常用的,主要是学习 ARM 的 GIC 中断控制器 spec,普通 EINT 中断的申请、使用,中断下半部和中断线程化处理等知识。
学习 GPIO 子系统和中断子系统,都离不开设备树,都需要去修改设备树,基础的设备树教程较为简单,很容易上手。
主要学习 I2C spec 和 I2C driver ,并写 demo 与外设芯片通信,学会其通信原理、debug 方法。(包含 MIPI I3C 协议)
主要学习 SPI spec 和 SPI driver,并写 demo 与外设芯片通信,学会其通信原理、debug 方法。
Sensorhub:智能传感集线器,是一种基于低功耗 MCU 和轻量级 RTOS 操作系统之上的软硬件结合的解决方案,其主要功能是连接并处理来自各种传感器设备的数据。
诞生之初的目的主要是为了解决在移动设备端的功耗问题。比如希望手机主控休眠的时候,依旧可以获取传感器数据,MCU 的耗电比 SOC 小很多。
包含单片机、FreeRTOS、RISC-V 架构等知识。
工作以后接手的第一个驱动就是 android 平台下耳机的插拔检测和按键检测。这部分涉及的硬件知识比较简单,但是软件上对中断的处理,软件检测的鲁棒性,都有比较高的要求,涉及到驱动开发中经常使用的中断申请,工作队列,tasklet,竟态和同步,linux input 子系统,android 键值映射等知识。
推荐一篇关于耳机检测的文章:
https://yunzhi.github.io/headset_knowledge
主要关于 uart spec,即传输协议规格。以及 Linux 的 tty 架构及 UART 驱动,可以参考前几天博主发的文章:
所谓 TP 触摸屏驱动,其实就是【I2C/SPI + EINT 中断 + input 子系统 + 多点触控协议】。因此这里的关键点在于 Linux input 子系统和 Android input 子系统的学习。
input 子系统是一个非常 common 的子系统,很多模块都会用到,可以重点学习。
Linux input 子系统的资料很多,Android input 子系统推荐如下系列文章:
https://www.jianshu.com/p/5a879b7ad3b2
前几天博主发了一篇文章可以直接做参考:
USB:Universal Serial BUS(通用串行总线),是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB 接口支持设备的即插即用和热插拔功能。USB 发展到现在已经有 USB1.0/1.1/2.0/3.0/4.0 等多个版本。目前用的最多的就是 USB1.1 和USB2.0,USB3.0、USB4.0目前已经开始普及。
USB 是一个很大的模块,包括:USB spec、USB emulation、USB ADB、USB MTP、USB ACM、USB OTG、充电等协议,每一点都要研究很久才能搞懂。
后续会继续学习 keypad、马达、SD 卡、ADC、PWM 、IR、charging、gauge、RTC 等模块。
本文分享自 嵌入式Linux系统开发 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!