type
status
slug
summary
tags
category
icon
password
new update day
Property
Dec 15, 2023 03:46 AM
created days
Last edited time
Dec 15, 2023 03:46 AM

背景资料

最近拿出了我自己的吃灰派,想着正好最近在学习驱动开发,于是就尝试着使用树莓派的 GPIO 进行一些驱动程序的开发练手工作。
首先了解到树莓派 4b 使用的CPU是 bcm2711,于是就找到了对应的芯片手册:
通过查询 GPIO 那一章节的介绍发现芯片手册上的 GPIO 物理基地址为 0x7e200000.
notion image
于是就使用这个基地址在驱动程序中进行了 ioremap 操作,结果触发了内核系统的保护机制,即:不允许映射相关内存区域。
而且树莓派的官方 datasheet 也并没有什么有用的信息,只有一个对应的引脚图。
notion image
后面经过查找资料发现,不止一个人遇到了这个问题。
树莓派4B的datasheet在我看来非常混乱复杂,尤其是地址映射方面。单datasheet就有两个版本而且还自相矛盾。为了查找到确定的物理地址,使用官方提供的函数进行读取。

安装运行环境

编写查询程序

首先在应用层插入头文件:
可用函数有如下选择:
本例要求读取外设物理地址,使用函数(1),代码如下:
用下面的语句进行编译,一定要在树莓派上进行编译运行
notion image
这个很重要,是驱动开发的基础,以此为基地址相对偏移一个位置。如GPIO的设置。在这里要特别注意相对偏移量。
💡
同时我们也可以发现这个地址跟芯片手册提供的不是同一个:0x7e200000

参考资料

使用 OpenWrt SDK 手动编译 alist 并安装在树莓派官网系统 Raspberry Pi OS 上吃鹅全过程