Skip to content

外围地址

如果没有可用的内核驱动程序,并且程序需要直接使用 mmap 访问外围设备地址,则它需要知道外围总线段在虚拟内存映射中的放置位置。这取决于所使用的树莓派型号,因此可以使用三种帮助程序功能来提供平台独立性。 注意:请使用这些功能,而不要使用硬编码的值,因为这将确保将来的兼容性。

unsigned bcm_host_get_peripheral_address()

这将返回外围设备映射到的 ARM 端物理地址。在 Pi Zero,Pi Zero W和第一代树莓派和计算模块上为 0x20000000 ,在 Pi 2,Pi 3和计算模块 3 上为 0x3f000000 。

unsigned bcm_host_get_peripheral_size()

这将返回外围设备空间的大小,对于所有型号,均为 0x01000000 。

unsigned bcm_host_get_sdram_address()

这将返回 SDRAM 的总线地址。在 Pi Zero,Pi Zero W和第一代树莓派和计算模块(已缓存 GPU L2)上,这是 0x40000000 ,在 Pi 2,Pi 3和计算模块 3 (未缓存)上是 0xC0000000 。

使用这些功能构建 C 程序

默认情况下," include"文件和库安装在树莓派 OS系统上。

将以下行添加到您的 C 程序中:

# include <bcm_host.h>

连结:

- lbcm_host

因此,一个简单的命令行编译可能是:

cc myfile.c -I/opt/vc/include -L/opt/vc/lib -lbcm_host -o myfile