linux - 我如何在 linux 中找到 GPIO 的定义,尤其是对于 beaglebone black?

标签 linux embedded embedded-linux beagleboneblack

我只想知道在Linux 3.8中有没有头文件来描述GPIO硬件板的端口,特别是 Beaglebone 黑板。有四组GPIO在 Beaglebone Black board 中,每组有 32 个 GPIO。所以我猜这是一个 GPIOGROUP X(0 <= X <= 3) PORT Y (0 <= Y <= 31) , 将映射到 GPIO 端口 (32 * X + Y) .例如,GPIO12GROUP1GPIO44 , 当我使用 Linux 时我们可以使用 44 GPIO蜜蜂。所以当我使用一些像“gpio_is_valid”这样的API时,我可以将参数设置为44。因为我想为某些设备编写一个Linux驱动程序,我真的需要知道它是如何定义的。我不关心如何控制GPIO s 在用户空间。

非常感谢。

最佳答案

内核从引导环境中获取默认的 pin muxing。要在不使用用户空间的情况下控制引脚行为,您可以修补引导环境。首先加载 X-Loader (MLO),它加载 U-Boot 环境 (u-boot.bin),后者加载内核。

请记住,我是从 2011 年开始了解这一点的,因此在以后的构建中可能会有更好的方法来实现这一点……另外,我使用的是 Gumstix Overo(类似于 BeagleBoard)。看起来 BeagleBone Black 使用与原始 BeagleBoard 相同的启动环境,所以我会尝试回答您的问题(我引用的是 BeagleBoard 使用的文件,BeagleBoard Black 可能有所不同)。

为了控制设备首次开机时的 GPIO 行为,您可以修补 X-Loader 以定义所需的引脚复用:

x-loader:
board/omap3530beagle/omap3530beagle.c
include/asm/arch-omap3/mux.h # review to match pin assignments to the technical manual

然后 X-Loader (MLO) 将加载 U-Boot 环境。为了控制内核最初如何处理引脚复用,以及在内核加载期间 (IIRC),您可以修补 U-Boot 以定义所需的引脚复用:

u-boot:
board/ti/beagle/beagle.h
arch/arm/include/asm/arch-omap3/mux.h # review to match pin assignments to the technical manual

启动后,您可以切换或读取用户空间中的 GPIO :)。

此外,可以使用 devmem2 在 Overo 的用户空间中更改引脚复用,因此除非您需要控制默认行为(例如将引脚保持为低电平以保持设备断电),否则使用起来会容易得多类似 devmem2 的东西。

关于linux - 我如何在 linux 中找到 GPIO 的定义,尤其是对于 beaglebone black?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720710/

相关文章:

linux - 使用 CURL 添加请求时间戳

c - 使用system()执行存在缓冲区溢出漏洞的程序时没有报错信息

c - 遗产库

c - Popen 导致程序卡住

embedded-linux - 从用户空间获取 U-boot 的版本

arrays - sh + 如何运行命令并将其设置为参数( VAL )

linux - connect() 函数的基本 Shellcode

pointers - 使用 freeRTOS 在 stm32 上随机分配神秘值(A5A5A5A5 和 FFFFFFFF)的指针导致硬故障

ubuntu - 在嵌入式设备上的dpkg .deb之后找不到 puppet 代理

Linux Kernel 3.4.1 在打印 "VFS: Mounted root (ubifs filesystem)."后挂起