首页 > 解决方案 > linux内核加载后如何让linux驱动程序检测和使用设备?

问题描述

我在 i2c-0 总线上的地址 0x3f 使用系统监视器设备。该设备在设备树中配置了 pmbus 驱动程序。

问题是,加载 linux 内核时,这个“Sysmon”设备没有通电。因此,当我在总线 0 上执行 i2cdetect 时,我们会在 0x3f 处看到“--”,这是预期的。现在,当我使用我的 UI 为 Sysmon 供电时,该设备由 linux 添加,我们在运行 i2cdetect 时看到“3f”。

现在,我希望 pmbus 驱动程序检测到该设备并将其更改为“UU”,以便我可以在 sysfs 中查看所有 pmbus 属性。

我可以从用户空间做到这一点吗?怎么做?如果没有,你能建议我如何解决这个问题。

如果我强制使用硬件为设备供电,然后加载 linux,pmbus 驱动程序会检测到该设备并保留它。但我不允许强制为设备供电。

设备树:

   i2c@ff020000 

   {

        compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10";
        status = "okay";
        interrupt-parent = <0x4>;
        interrupts = <0x0 0x11 0x4>;
        reg = <0x0 0xff020000 0x0 0x1000>;
        #address-cells = <0x1>;
        #size-cells = <0x0>;
        power-domains = <0x15>;
        clocks = <0x3 0x3d>;
        clock-frequency = <0x186a0>;
        pinctrl-names = "default", "gpio";
        pinctrl-0 = <0x16>;
        pinctrl-1 = <0x17>;
        scl-gpios = <0x18 0x4a 0x0>;
        sda-gpios = <0x18 0x4b 0x0>;

        fpga1sysmon0@3f {
            compatible = "general,pmbus";
            reg = <0x3f>;
        };

PS:我是初学者,这是我在 Stack Overflow 上的第一个问题。请容忍我犯的任何错误。

标签: linuxlinux-device-driverembedded-linuxxilinxi2c

解决方案


/etc/init.d/rcS在(假设您使用的是busybox init)或 systemd中启用 sysmon 怎么样/etc/rc.local

以下将 在 I2C 总线 #1 上的地址0x60处加载LTC2978的驱动程序:

$ modprobe pmbus
$ echo ltc2978 0x60 > /sys/bus/i2c/devices/i2c-1/new_device

你可以把它放进去

/etc/init.d/rcS或者/etc/rc.local

另见 https://www.kernel.org/doc/Documentation/hwmon/pmbus


推荐阅读