【发布时间】:2015-05-05 07:40:38
【问题描述】:
我在用户空间中有某种驱动程序:
通过某些接口(rs232)与设备进行程序对话。 我也有 pin(gpio) 来打开/关闭这个设备。
我没有在我的程序中编写具体的 gpio 代码,以使其更便携,
所以我修改了我的主板的设备树描述, 并描述调节器固定,之后我想使用 用于控制电源开/关的用户空间消费者驱动程序, 但看起来这不是内核开发人员所期望的 (链接到类似问题的讨论,不是我的): http://patchwork.ozlabs.org/patch/374912/
那么我应该如何控制开关的开/关 从用户空间删除我的设备而不添加到我的程序中 有关用于打开/关闭设备的具体 gpio 的信息?
更多详情: 在我的 board dts 中,我这样描述了我的 pin:
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 = ”是 被内核锁定,无法通过/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
【问题讨论】:
-
那么实际的问题是“如何从用户空间的设备树中获取gpio号”?
-
不,这没有帮助。例如,如果我有 /sys/firmware/devicetree/base/regulator-xyz/gpios,我不能使用这个 gpio,因为调节器固定锁定它供自己使用。
-
你能显示你的
/sys/kernel/debug/gpio文件吗(在Android中可以是/d/gpio)?如果您的 GPIO 编号不在此列表中,您可以使用/sys/class/gpio/export文件将其导出,如 here 所述,然后通过/sys/class/gpio/gpioN/value文件从用户空间触发它。 -
我添加了最终解决方案的描述
标签: linux linux-device-driver device device-tree