USRP N310嵌入式设备读取芯片报Device or Resource Busy错误如何解决
问题解答
1. udev排查方法与modalias的准确性对比
两种方法的定位维度不同,不存在绝对的准确性高低,适用场景有区别:
- modalias是内核用于匹配硬件与对应驱动的标识,你读取到的
of:Ngpio(null)Cti,tca6408就是TCA6408芯片的硬件匹配字符串,内核会通过该标识加载对应的驱动,该值用于确认硬件对应的驱动名称是可靠依据。 - udev输出的是设备的层级关联关系,可直接展示当前设备绑定的驱动、父设备的驱动信息,在排查「当前哪个驱动占用了设备」的场景下,udev的输出更直接,不需要额外做匹配关联。
2. cdns-i2c是否为占用设备的驱动
cdns-i2c不是占用0x20从地址TCA6408设备的驱动,它是当前I2C总线9的控制器(适配器)驱动,负责管理整个I2C总线的底层通信,不属于从设备驱动。
结合你反馈的i2cdetect -r 9输出UU、lsmod无相关I2C模块的信息,可以确定实际占用TCA6408设备的是内核内置的gpio-tca6408驱动,该驱动直接编译进内核镜像而非以模块形式加载,因此lsmod查询不到结果。你之前禁用MPM服务无效,是因为占用设备的是内核态已绑定的驱动,而非用户态的MPM进程。
临时解决方法
如果需要自行从用户态操作该TCA6408设备,可先执行以下命令解绑内核驱动:
echo "9-0020" > /sys/bus/i2c/drivers/tca6408/unbind
解绑后再运行你的交叉编译应用即可解决Device or Resource Busy报错。
内容的提问来源于stack exchange,提问作者Tellrell White
相关产品推荐
相关产品推荐

