GPIO1_IO01(ADC1_IN1)
IIO 的定位:Linux 内核中用于 ADC、DAC、惯性传感器等低速模拟量传感器的统一驱动框架,由 Jonathan Cameron 提出,解决早期传感器驱动碎片化问题。
四层架构:
用户空间层:通过 sysfs(如 /sys/bus/iio/deviceX/in_voltage0_raw)或 libiio 库访问
IIO Core 层:负责设备注册管理、自动生成 sysfs 属性、trigger/buffer 基础设施
具体驱动层:开发者实现的部分,核心工作是填充 iio_chan_spec(通道描述)和 iio_info(read_raw/write_raw 回调)
硬件层:实际的 ADC 芯片或传感器
关键数据结构:struct iio_dev 代表设备实例;struct iio_chan_spec 描述通道类型(电压/电流/浓度等);struct iio_info 提供数据读写回调。
数据流:应用层 read sysfs → VFS → IIO Core 解析属性名 → 调用驱动的 read_raw() 回调 → 驱动返回值 → 格式化回用户空间。
实际经验:我在 i.MX6ULL 平台上编写过 MQ-7 CO 传感器的 IIO 驱动,使用 platform_driver + device tree 匹配方式,通过 io-channel 机制消费底层 ADC 驱动提供的数据,最终以 ppm 为单位通过 sysfs 暴露给用户空间程序。