我使用 i.mx6 板 (yocto(jethro)) 并配置设备树。我更改了一个 dts 文件并将 dtb 文件放在启动分区中。我在 dts 文件中设置 GPIO4_IO19 如下。
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
...
MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 0x0000B0B0
...
>;
};
...
起初 MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 是在其他组(usdhcgrp)中定义的,但我注释掉了它们。
启动后,我检查gpio是否按照我的设置成功确定。结果是
echo 115 > /sys/class/gpio/export
-sh: echo: write error: Device or resource busy
所以我检查了这个。
cat /sys/kernel/debug/gpio
GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
gpio-10 (phy-reset ) out lo
GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
gpio-68 (ft5x06_irq_gpio ) in hi
GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
gpio-109 (? ) out lo
gpio-115 (cd ) in lo
gpio-116 (? ) out lo
gpio-117 (? ) out lo
gpio-118 (sysfs ) in hi
GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
gpio-128 (phy-reset ) out lo
cd使用gpio-115。也许这意味着卡检测。我想用它作为 sysfs 来读取状态。还有其他方式阅读吗?此外,gpio-10、68、109、116、117被其他设备使用。我如何通过 sysfs 使用它们?
我想我需要做的是检查寄存器是否正确设置值。如果寄存器值与我设置的不同,我猜测其他进程设置了引脚控制。但是我不知道访问寄存器的方式。
我对gpio115的了解如下
mux_reg address: 0x01DC and the value.
conf_reg address: 0x0468 and the value.
input_reg address: 0x0000 and the value.
与其他 GPIO 相同。
如何访问 0x01DC 然后获取 linux(yocto) 中的值?
谢谢您的合作。
答案1
如果您只想知道引脚的状态,它已经在 /sys/kernel/debug/gpio 中呈现给您
gpio-115 (cd ) in lo
它被配置为输入,并且当前值较低,如果您在插槽中插入/取出卡,该值将会改变!
如果您确实想要或需要直接访问寄存器值,请尝试检查实用程序 devregs!