告别DTS?全志A40平台Fex配置实战:以TP触摸屏驱动为例
告别DTS全志A40平台Fex配置实战以TP触摸屏驱动为例在嵌入式开发领域设备树DTS已成为主流SoC平台硬件描述的标准方案。然而当工程师初次接触全志A40这类平台时往往会惊讶地发现传统的.dts文件不见了取而代之的是名为sys_config.fex的神秘配置文件。本文将以触摸屏TP驱动为例深入解析全志独特的驱动fex配置driver code设计哲学帮助开发者快速掌握这套与众不同的硬件配置体系。1. 全志Fex配置体系解析1.1 Fex与DTS的本质差异全志平台的sys_config.fex文件位于lichee/tool/pack/chips/sun8iw11p1/config/a40-p1/目录下其作用类似于但不等同于传统设备树。关键区别在于编译方式DTS通过dtc编译器生成二进制DTB而fex由全志专用工具链处理语法结构fex采用类INI的分段配置格式而非DTS的节点树结构平台特性全志在主线Linux内核外维护了一套完整的硬件抽象层; 典型fex配置片段示例 [ctp_para] ctp_used 1 ctp_name gt911 ctp_twi_id 0 ctp_screen_max_x 800 ctp_screen_max_y 4801.2 全志硬件抽象层的设计逻辑全志采用分层设计将硬件配置与驱动代码解耦配置层sys_config.fex定义所有外设参数解析层sw-device.c实现兼容性匹配驱动层各模块驱动通过统一接口获取配置这种设计与MTK/高通平台直接解析DTS的方案相比增加了抽象层级但提高了配置灵活性。实际测试显示修改fex配置后只需重新打包固件无需重新编译内核。2. TP驱动配置全流程拆解2.1 Fex文件中的触摸屏定义在全志平台上配置触摸屏首先需要在sys_config.fex中定义ctp_para段[ctp_para] ctp_used 1 ; 启用触摸屏 ctp_name gt911 ; IC型号 ctp_twi_id 0 ; 使用的I2C总线 ctp_screen_max_x 800 ; X轴分辨率 ctp_screen_max_y 480 ; Y轴分辨率 ctp_revert_x_flag 0 ; X轴是否反转 ctp_revert_y_flag 0 ; Y轴是否反转 ctp_exchange_x_y_flag 0 ; 是否交换XY轴注意ctp_name必须与驱动中的兼容字符串严格匹配这是设备绑定的关键2.2 驱动中的配置解析机制全志在driver/input/sw-device.c中实现了统一的输入设备管理框架。其核心流程包括兼容性匹配通过of_device_id匹配fex配置与驱动资源注册将匹配的设备添加到全局设备数组配置传递通过ctp_config_info结构体传递参数// 驱动中典型的配置使用方式 static int ctp_probe(struct platform_device *pdev) { struct ctp_config_info *config dev_get_platdata(pdev-dev); int max_x config-screen_max_x; int max_y config-screen_max_y; // ...初始化硬件... }2.3 配置到驱动的完整链路理解配置如何从fex传递到驱动的关键在于以下文件文件路径作用sys_config.fex原始硬件配置sw-device.c设备匹配与注册init-input.c配置解析与结构体填充ctp_driver.c具体驱动实现当系统启动时init-input.c会解析fex编译生成的二进制配置填充ctp_config_info等设备结构体最终驱动通过dev_get_platdata()获取这些配置。3. 与主流平台的对比实践3.1 全志 vs 高通平台配置对比以触摸屏配置为例不同平台的实现方式差异明显高通平台(DTS)方案i2c_1 { touchscreen5d { compatible goodix,gt911; reg 0x5d; interrupt-parent tlmm; interrupts 13 IRQ_TYPE_EDGE_FALLING; reset-gpios tlmm 12 GPIO_ACTIVE_LOW; touchscreen-size-x 800; touchscreen-size-y 480; }; };全志平台(Fex)方案[ctp_para] ctp_used 1 ctp_name gt911 ctp_twi_id 0 ctp_screen_max_x 800 ctp_screen_max_y 480关键差异点全志使用抽象参数名如ctp_twi_id高通直接使用硬件描述全志配置集中管理高通配置分散在各设备节点全志需要专用工具链高通使用标准设备树编译器3.2 调试技巧与常见问题在实际项目中全志平台的触摸屏调试有几个关键检查点配置验证确认ctp_used1已启用设备检查ctp_name与驱动兼容字符串完全一致验证I2C总线ID与实际硬件连接匹配驱动加载检查# 查看输入设备列表 cat /proc/bus/input/devices # 检查内核消息 dmesg | grep ctp硬件信号测量使用示波器检查I2C时钟和数据线验证中断信号是否正常触发测量电源电压是否符合IC要求4. 深入理解全志设计哲学4.1 为何选择Fex而非DTS全志的配置方案看似非主流实则有其历史和技术考量历史兼容性延续自全志早期的sunxi架构设计工具链整合与全志专属的固件打包流程深度集成简化配置对简单外设提供更直观的参数配置方式平台特性适合全志芯片特有的硬件抽象层需求4.2 Fex配置的进阶技巧对于复杂项目掌握这些技巧可以提升开发效率条件配置使用#ifdef样式的条件编译; 根据板型选择不同配置 [product] version p1 #ifdef P1 [ctp_para] ctp_name gt911 #else [ctp_para] ctp_name ft5x06 #endif参数覆盖通过多个fex文件实现配置分层动态调试修改/sys/module/下的参数实时调整驱动行为4.3 未来演进方向虽然全志目前仍坚持fex配置体系但需要注意部分新芯片开始支持混合模式fexDTS社区有工具可以将fex转换为DTS格式全志SDK正在逐步标准化设备接口在最近的一个车载项目中我们通过分析sw-device.c的匹配逻辑成功为一块非标触摸屏实现了驱动适配。关键是在fex中准确定义了自定义参数并通过ctp_config_info扩展结构体传递到驱动层。这种灵活性正是全志设计体系的优势所在。