Orin Nano 8GB +jetpack6.2 + 官方载板,遇到 GPIO 无法控制的问题,以下是操作及调试过程:
目标控制引脚为 gpio07,根据 Jetson 官方 pinmux 表,对应的硬件信号为 PG.06,其在 gpiochip0 中的编号为 41。
$ gpioinfo |grep PG.06
line 41: "PG.06" unused output active-high
$ sudo gpioset gpiochip0 41=0
$ sudo gpioset gpiochip0 41=1
==引脚电平无实际变化。测量管脚始终保持固定电平,未见切换。==
我们在内核 drivers/gpio/gpio-tegra186.c
中的 tegra186_gpio_set()
函数增加了打印:
static void tegra186_gpio_set(struct gpio_chip *chip, unsigned int offset,
int level)
{
struct tegra_gpio *gpio = gpiochip_get_data(chip);
void __iomem *base;
u32 value;
base = tegra186_gpio_get_base(gpio, offset);
if (WARN_ON(base == NULL))
return;
+ printk("gpio_set: offset=%u level=%d addr = %d\n", offset, level, base + TEGRA186_GPIO_OUTPUT_VALUE);
value = readl(base + TEGRA186_GPIO_OUTPUT_VALUE);
if (level == 0)
value &= ~TEGRA186_GPIO_OUTPUT_VALUE_HIGH;
else
value |= TEGRA186_GPIO_OUTPUT_VALUE_HIGH;
writel(value, base + TEGRA186_GPIO_OUTPUT_VALUE);
}
从内核打印日志确认,GPIO 确实通过 writel() 访问到了对应地址,offset 也为 41:
kernel: gpio_set: offset=41 level=0 addr = 155402448
kernel: gpio_set: offset=41 level=1 addr = 155402448
ps:已经尝试过该链接中的补丁,但是无效 40hdr - SPI1 gpio padctl register bit[10] effect by gpiod tools in JP6 - #19