# driver_dev **Repository Path**: wangdong_cmcc/driver_dev ## Basic Information - **Project Name**: driver_dev - **Description**: 现代驱动开发 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 现代驱动开发实例 ## 项目简介 本项目旨在将 `~/workspace/source/i.mx6ull-driver-examples/` 目录下的老驱动重新按照现代 Linux 驱动开发规范重构。 重构目标包括: - 采用标准的总线-设备-驱动模型(platform_driver / i2c_driver) - 使用 `devm_*` 自动管理资源,减少手动释放逻辑 - 使用现代 GPIO consumer 接口 `devm_gpiod_get()` / `devm_gpiod_get_array()` - 遵循设备树绑定规范和驱动注册规范 - 提升错误处理、同步、可维护性和可读性 ## 当前进度 已完成重构的驱动: - `iic/ap3216c_modern.c`:基于 I2C 的 ap3216c 传感器驱动 - `beep/beep.c`:基于 platform device 的蜂鸣器驱动 - `gpio/gpioled.c`:基于 platform driver 的 GPIO LED 驱动,采用设备树绑定和 devm 资源管理 - `spi/icm20608.c`:基于 SPI 的 ICM20608 六轴传感器驱动,改为 per-device 私有数据,增强错误处理和初始化流程 保留旧代码供对比参考: - `iic/old/` 目录下为旧版iic驱动实现 - `gpio/beep/beep-old.c` 为旧版蜂鸣器驱动示例 - `gpio/old/gpioled.c` 为旧版led驱动示例 - `spi/old/icm20608.c`为旧版spi驱动 ## 目录结构 - `iic/` - `ap3216c_modern.c` - `ap3216c_test.c` - `Makefile` - `modern_design_ap3216c_driver.md` - `problem_analysis.md` - `old/` - `beep/` - `beep.c` - `beep-old.c` - `beepApp` - `beepApp.c` - `Makefile` - `imx6ull-14x14-evk.dts` - `imx6ull-14x14-evk.dtb` - `Readme.md` - `gpio/` - `gpioled.c` - `ledApp.c` - `Makefile` - `old/` - `spi/` - `old/` - `icm20608.c` ## 编译与测试 每个子目录都有自己的 `Makefile`,可以分别编译测试: ```bash cd iic && make cd beep && make ``` 如果需要加载模块并测试,请先根据目标板的实际设备树和硬件连接,修改 `*.dts` 配置并重新编译。 ## 规范说明 本项目遵循 `Modern-Linux-Driver-Development-Standards.md` 中的现代驱动开发规范。 主要实践包括: - `probe()` / `remove()` 机制 - `MODULE_DEVICE_TABLE(of, ...)` 设备树匹配 - `devm_kzalloc()`、`devm_gpiod_get()`、`devm_request_irq()` 等自动资源管理 - 适配 `of_match_table` 与 `compatible` 字符串 - 最小化 `remove()` 中手动清理逻辑 ## 目标方向 后续将继续重构更多驱动,覆盖 `~/workspace/source/i.mx6ull-driver-examples/` 中的其他老实现,逐步形成完整的现代驱动迁移示例。 ## 参考 - `Modern-Linux-Driver-Development-Standards.md` - `iic/modern_design_ap3216c_driver.md` - `iic/problem_analysis.md`