
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
RK3399的I2C驱动分为适配器驱动(控制器)和设备驱动(外设),适配器驱动是硬件层实现,设备驱动是业务层实现,通过I2C核心层解耦。适配器驱动基于,通过设备树匹配硬件,核心是实现的(中断驱动的数收发)。中断是RK3399 I2C高效传输的核心,负责逐字节处理、错误检测、传输状态更新。Client驱动通过i2c_driver注册,调用对接核心层,无需关心底层硬件细节,实现跨平台复用。
RK3568的SPI控制器统一在中预定义,板级DTS仅需启用并追加从设备。属性必选说明compatible是固定为,与SPI控制器驱动匹配reg是控制器寄存器基地址+地址空间大小interrupts是SPI控制器中断号clocks是外设总线时钟与功能时钟,名称为pclkspi是固定为<1>,片选号用1个cell表示是固定为<0>,SPI从设备无独立地址空间cs-gpios否GPIO模拟片选时使用,
分层模型:最小数据分片;:完整一次CS选中的事务,由多个transfer组成;同步传输spi_sync阻塞,适合绝大多数外设驱动,开发成本最低;简易封装接口覆盖90%寄存器读写场景,优先使用;多线程访问SPI必须互斥锁保护,避免多条message交错执行;一条message内部默认全程CS低,仅全部transfer完成后释放;单transfer末尾可通过cs_change提前释放片选。
OF API是Linux内核提供的一套设备树解析函数集访问设备树节点读取节点的属性值获取硬件资源(寄存器地址、中断号、GPIO、时钟等)遍历设备树结构功能API使用频率检查节点是否可用⭐⭐⭐⭐⭐读取32位整数⭐⭐⭐⭐⭐读取字符串⭐⭐⭐⭐⭐读取布尔属性⭐⭐⭐⭐获取寄存器资源⭐⭐⭐⭐⭐获取中断号⭐⭐⭐⭐⭐获取GPIO号⭐⭐⭐⭐⭐映射寄存器地址⭐⭐⭐⭐⭐遍历子节点⭐⭐⭐。
【代码】【Linux驱动开发】第20天:I2C 驱动框架与读写 API 详解。
设备树采用分层树形结构描述硬件,和计算机的文件系统目录结构几乎完全一致。它以根节点为起点,向下逐层展开,真实反映了计算机系统中硬件的物理连接关系。
主设备号标识驱动类型,次设备号标识同类型下的不同具体设备cdev结构体是字符设备的抽象,把设备号和驱动的操作函数集关联起来字符设备注册流程:申请设备号 → 初始化cdev → 注册cdev → 创建设备类 → 生成设备文件是用户态与内核态数据交互的唯一安全方式,必须严格遵守使用规则现代驱动优先使用动态设备号,避免设备号冲突,兼容性更好。
本文深入解析Linux驱动开发中的进程上下文与中断上下文核心区别。进程上下文允许睡眠、调度和调用大多数内核API,而中断上下文则限制严格,必须原子化执行且不能睡眠。文章列举了中断上下文绝对禁止的10类操作,如调用可能睡眠的函数、使用互斥锁、执行耗时操作等,并通过正反示例对比展示了规范写法。关键点在于:中断处理必须极速完成(微秒级),不能阻塞系统,否则会导致崩溃或性能问题。理解这些差异是编写稳定高效
mutex:等待时睡眠 → 不占CPU → 只能在进程上下文用spinlock:等待时自旋 → 占CPU →进程/中断都能用中断上下文绝对不能用mutex持有spinlock期间不能睡眠。
在嵌入式 Linux 中,ALSA 是连接应用与音频硬件的核心桥梁。无论是录音还是放音,本质都围绕 PCM 数据流展开。PCM 是 ALSA 传输的核心数据形态播放用,采集用参数配置的关键是采样率、位深、声道数ALSA 通过机制完成稳定的数据流传输本质都是“生产消费速度不匹配ALSA 负责把应用层的 PCM 数据,稳定地送到音频硬件;或者把音频硬件采集到的 PCM 数据,稳定地送回应用层。







