4

我在用户空间中有某种驱动程序:

通过某些接口(rs232)与设备进行程序对话。我也有 pin(gpio) 来打开/关闭这个设备。

我不在我的程序中编写具体的 gpio 代码,以使其更便携,

所以我修改了我的板的设备树描述,并描述了调节器固定,之后我想使用用户空间消费者驱动程序来控制电源开/关,但看起来这不是内核开发人员所期望的(链接到类似问题的讨论,不是我的): http: //patchwork.ozlabs.org/patch/374912/

那么我应该如何从用户空间控制我的设备的打开/关闭而不向我的程序添加有关用于打开/关闭设备的具体 gpio 的信息?

更多详细信息:在我的板 dts 中,我这样描述了我的引脚:

regulator-deviceX {
    status = "okay";
    compatible = "regulator-fixed";
    regulator-name = "DEV_X_ON#";
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    gpio = <&gpio5 4 GPIO_ACTIVE_LOW>;
};

当然,开机后"gpio = <&gpio5 4 GPIO_ACTIVE_LOW>" 被内核锁定,无法通过/sys/class/gpio接口使用。

考虑这种方法不好,这是不可能的(或者我不明白如何)从用户空间更改调节器状态,因为您可以看到“状态”是只读文件。

root@board:/sys/class/regulator/regulator.1# ls -l
lrwxrwxrwx    1 root     root             0 May  3 03:32 device -> ../../../regulator-deviceX
-r--r--r--    1 root     root          4096 May  3 03:32 microvolts
-r--r--r--    1 root     root          4096 May  3 03:32 name
-r--r--r--    1 root     root          4096 May  3 03:32 num_users
drwxr-xr-x    2 root     root             0 May  3 03:32 power
-r--r--r--    1 root     root          4096 May  3 03:32 state
lrwxrwxrwx    1 root     root             0 May  3 03:25 subsystem ->   ../../../../class/regulator
-r--r--r--    1 root     root          4096 May  3 03:32 suspend_disk_state
-r--r--r--    1 root     root          4096 May  3 03:32 suspend_mem_state
-r--r--r--    1 root     root          4096 May  3 03:32 suspend_standby_state
-r--r--r--    1 root     root          4096 May  3 03:32 type
-rw-r--r--    1 root     root          4096 May  3 03:25 uevent
4

1 回答 1

1

因此,最终的解决方案如下所示:

步骤1

在设备树中描述设备,虽然您不需要内核来处理它,但在这里描述它看起来很合适

gps-reciever {
    compatible = "my_company_name,gps_recv_name";
    vcc-supply = <&ext_gps_recv_reg>;
    comment = "connected via usb<->rs232, port0";
};

其中任何正常调节器的 ext_gps_recv_reg。

第2步

我为 linux 内核编写了一个简单的平台设备驱动程序,它与上面的设备兼容,在这个驱动程序的探测功能中,我调用了 platform_device_register_full 来为 userspace_consumer 驱动程序设置参数。

之后我可以通过名称找到合适的文件:cat /sys/bus/platform/devices/reg-userspace-consumer*/name,然后通过:echo "disabled" > /sys/bus/platform/devices 禁用/启用调节器/reg-userspace-consumer*/状态

所以我将设备描述与 linux 内核实现分开。

于 2015-05-04T23:40:38.237 回答