You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux 5.19+iMX8平台下imx6q-pcie驱动添加remove函数后仍无unbind/bind属性的问题咨询

Linux 5.19+iMX8平台下imx6q-pcie驱动添加remove函数后仍无unbind/bind属性的问题咨询

我之前调试平台驱动的时候也碰到过类似的sysfs属性不出现的情况,咱们一步步来排查解决:

  • 先检查驱动是否禁用了绑定属性
    内核驱动的struct device_driver结构体里有个suppress_bind_attrs字段,如果设置为true,会直接关闭bind/unbind这些sysfs属性。你去看看imx6_pcie_driver.driver部分有没有这个设置,如果有的话改成false或者直接删掉这行配置。

  • 确认remove函数的正确性与驱动更新生效
    首先要保证你的imx6_pcie_remove函数签名是符合内核要求的:

    static int imx6_pcie_remove(struct platform_device *pdev)
    {
        // 你的逻辑,哪怕是空的也要返回0
        return 0;
    }
    

    另外,一定要确认修改后的驱动代码已经被正确编译加载了:如果是内置驱动,必须重新编译内核并烧录;如果是可加载模块,要重新编译模块然后用rmmod+insmod重新加载,不然你的修改根本没生效。

  • 检查设备树与设备状态
    先查看驱动当前绑定的设备:

    ls /sys/bus/platform/drivers/imx6q-pcie/
    

    如果能看到对应的设备节点,再检查设备树里的PCIe节点配置,有没有设置类似no-hotplug这样的属性阻止热移除。另外,确保内核配置里开启了PCI热插拔相关选项,比如用下面的命令检查:

    zcat /proc/config.gz | grep HOTPLUG_PCI
    

    要保证CONFIG_HOTPLUG_PCI是y或者m,如果有针对iMX平台的专属配置(比如CONFIG_HOTPLUG_PCI_IMX6)也要确保开启。

  • 调试手段:手动创建sysfs属性
    如果上面的步骤都没问题还是看不到bind/unbind,可以尝试在驱动注册成功后手动创建这些属性,添加代码:

    driver_create_file(&imx6_pcie_driver.driver, &driver_attr_unbind);
    driver_create_file(&imx6_pcie_driver.driver, &driver_attr_bind);
    

    这属于临时调试方法,正常情况下内核会自动创建这些属性,这么做能帮你确认是不是内核的自动创建逻辑被什么地方拦截了。

备注:内容来源于stack exchange,提问作者code_fodder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:12:38