本章以Jetson AGX Orin为例讲解I2C watchdog驱动程序的编程,主要分为以下三个部分。
硬件原理图
Block Diagram
SOC端的#pin脚定义
MCU端#pin脚定义
Linux下的I2C驱动框架
上图描述了linux I2C驱动框架,体系结构在linux中实现相当复杂。如何编写一个linux驱动程序呢?所谓Linux驱动个人认为主要是起承上启下的作用,对上提供接口API给内核,再由内核间接将接口提供给应用层,比如应用层访问/dev/watchdogX文件等;对下控制硬件设备。具体实现的流程套路如下:
1. 确定驱动结构:根据硬件设计结合分层/分离思想确定驱动的基本结构。
2. 确定驱动实例:驱动定义,初始化,注册,注销。
3. 向上提供接口:实现i2c设备的i2c_driver接口以及i2c设备对应的watchdog驱动
4. 向下控制硬件:根据寄存器配置方式实现控制逻辑。
具体代码分析
驱动大致流程:
1) 加载驱动(int函数)
2) 添加i2c驱动
3) 匹配目标硬件设备
4) 探测probe函数
5)