我正在研究内核 gpiolib 和 gpio-xilinx.c。我看到我的设备只有
cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 960-1023,
我很困惑这个 960 是怎么来的。内核如何知道它必须设置这个数字 960?我在设备树中看不到这个数字960。这个960号码是从哪里来的?
/sys/class/gpio/gpiochip960
我期待设置 -
gpio237
gpiochip192
gpiochip224
答案1
gpiochip基址在gpio-xilinx.c中设置为-1。https://elixir.bootlin.com/linux/v5.3.5/source/drivers/gpio/gpio-xilinx.c#L319
这意味着 gpiochip_find_base 将被调用: https://elixir.bootlin.com/linux/v5.3.5/source/drivers/gpio/gpiolib.c#L181
这会尝试从 ARCH_NR_GPIOS 中找到第一个可用范围。
我很确定你有 ARCH_NR_GPIOS == 1024 和 ngpios == 64。这导致范围从 960 到 1023。