【Linux驱动】100ask_imx6ull中ADC光敏电阻实验踩坑

文章讲述了在使用自定义设备树时遇到的iio:device0缺失和内核打印显示引脚被其他设备占用的问题。对比模组代码的设备树,作者发现TSC和ADC共用了GPIO引脚,导致两者无法同时工作。尽管模组代码中的TSC也因引脚被占用未能启动,但最终通过将TSC节点设置为disable解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【1】不出问题的前提条件:完全使用模组代码中的设备树文件与配套APP
【2】本人问题:使用自己的设备树dts生成的dtb时,发现dev目录下根本没有iio:device0,从而直接使用配套APP时出现无法打开文件的情况。
经过对两个设备树启动时内核打印的对比发现,在使用自己的设备树时,会有以下打印:
[ 4.239934] imx6ul-pinctrl 20e0000.iomuxc: pin MX6UL_PAD_GPIO1_IO03 already requested by 2040000.tsc; cannot claim for 2198000.adc
[ 4.252029] imx6ul-pinctrl 20e0000.iomuxc: pin-26 (2198000.adc) status -22
[ 4.259265] imx6ul-pinctrl 20e0000.iomuxc: could not request pin 26 (MX6UL_PAD_GPIO1_IO03) from group adc1grp on device 20e0000.iomuxc
[ 4.271801] vf610-adc 2198000.adc: Error applying setting, reverse things back
[ 4.279399] vf610-adc: probe of 2198000.adc failed with error -22
这表明,在内核配置时其实启用了vf610,但是在申请引脚的时候出现了MX6UL_PAD_GPIO1_IO03被tsc占用的情况。
在设备树中,tsc的引脚是:
TSC引脚
而ADC1的引脚是:
ADC1引脚
很明显,这两个外设共同使用了GPIO1_IO3以及GPIO1_IO4这两个引脚,因此不能同时使用。
但是我在对比自己的设备树和模组代码里的设备树时发现,两者的tsc节点都是启用的,并不存在谁注释了引脚或者status是‘disable’的情况,这就让我有点头疼了,到底是什么导致它的设备树可以运行,而我的设备树不能运行,既然就是因为tsc占用IO导致的,那理应都有问题啊!
最后我再认真比对使用模组代码中的设备树时发现以下打印:
[ 2.817382] imx6ul-pinctrl 20e0000.iomuxc: pin MX6UL_PAD_GPIO1_IO01 already requested by 2010000.ecspi; cannot claim for 2040000.tsc
[ 2.829622] imx6ul-pinctrl 20e0000.iomuxc: pin-24 (2040000.tsc) status -22
[ 2.836636] imx6ul-pinctrl 20e0000.iomuxc: could not request pin 24 (MX6UL_PAD_GPIO1_IO01) from group tscgrp on device 20e0000.iomuxc
[ 2.848825] imx6ul-tsc 2040000.tsc: Error applying setting, reverse things back
[ 2.856266] imx6ul-tsc: probe of 2040000.tsc failed with error -22
天呐!这也太坑爹了!官方的设备树能用是因为:
spi占用了tsc的引脚→tsc没起来→tsc引脚没占用→adc可以申请到引脚了→生成设备文件
【3】目前的解决办法:
在设备树中将 tsc结点的status直接设置为disable就完事了,反正模组代码里也是因为其他设备占用tsc导致它起不来。

### 关于100ask_IMX6ULL平台Uboot驱动移植 #### 编译环境准备 对于100ask_IMX6ULL平台而言,在开始编译前需确保已安装必要的工具链以及依赖库。通常情况下,Linux环境下可以通过包管理器来完成这些软件包的安装。 #### 配置与编译过程 针对特定硬件配置文件的选择至关重要。命令`make -j12 tiansong@tiansong:~/100ask_imx6ull_pro/uboot-imx$`展示了如何利用多线程加速编译流程并指定目标架构[^1]。此操作应在解压后的源码目录下执行,并且应当依据实际使用的开发板型号选取合适的defconfig选项,例如对于QT应用可能需要采用`100ask_imx6ull-qt_defconfig`作为初始配置模板[^2]。 #### 设备树支持 现代版本的U-Boot集成了设备树(Device Tree),这允许更灵活地描述硬件特性而无需硬编码至内核中。适配官方发布的U-boot-2017.03版本时特别强调了这一点,因为该版已经加入了对DTB的支持,最终产物将是包含设备树二进制数据的u-boot-dtb.imx文件[^3]。 #### 测试验证阶段 初次烧录完成后应立即开展基本功能检测工作,比如通过串口控制台进入U-Boot命令行界面后尝试设置静态IP地址(如192.168.1.112),随后运用ping指令检验网络连通状况。这一系列动作有助于确认新构建的固件能否正常启动并且具备基础通信能力。 #### 注意事项 - **备份原始镜像**:在任何改动之前都建议保留一份原厂提供的引导程序副本。 - **仔细阅读文档**:同批次的产品可能存在细微差异,务必参照最新发行说明和技术手册行事。 - **保持系统更新**:定期访问制造商网站获取最新的补丁和支持材料。 - **注意兼容性问题**:当引入第三方组件或者自定义修改时要格外小心,以免破坏稳定性或安全性。 ```bash # 设置静态IP示例代码片段 setenv ipaddr 192.168.1.112; saveenv ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值