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
.于是就使用这个基地址在驱动程序中进行了 ioremap 操作,结果触发了内核系统的保护机制,即:不允许映射相关内存区域。
而且树莓派的官方 datasheet 也并没有什么有用的信息,只有一个对应的引脚图。
后面经过查找资料发现,不止一个人遇到了这个问题。
树莓派4B的datasheet在我看来非常混乱复杂,尤其是地址映射方面。单datasheet就有两个版本而且还自相矛盾。为了查找到确定的物理地址,使用官方提供的函数进行读取。
安装运行环境
编写查询程序
首先在应用层插入头文件:
可用函数有如下选择:
本例要求读取外设物理地址,使用函数(1),代码如下:
用下面的语句进行编译,一定要在树莓派上进行编译运行
这个很重要,是驱动开发的基础,以此为基地址相对偏移一个位置。如GPIO的设置。在这里要特别注意相对偏移量。
同时我们也可以发现这个地址跟芯片手册提供的不是同一个:
0x7e200000
参考资料
- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2023/12/15/Raspberry-Pi-register-physical-base-address-query
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章