| |||
此文章摘抄自微信公众号"芯塾科技",如有侵权,请联系删除,谢谢!
1.文章坚持实际工作中有所帮助---实际工作中遇到问题可查阅。
2.章节内容规划具有连贯性。lspci-setpci-PCIe Configuration Space--next。
3.文章以文字和视频形式发布,建议大家视频和文章结合查阅。
4.视频发布:公众号、B站、抖音,搜寻“芯塾科技”可观看。
5.文章发布: 公众号、CSDN、知乎、B站,搜寻“芯塾科技”可浏览。
2.Pcimem介绍
1.系统启动BIOS阶段已初始化PCIe设备,也就是在系统空间分配了PCIe BAR以及ECAM(Enhanced Config Access Mechanism)。
2.获取PCIe设备在cpu系统地址空间的Mem/IO地址,原则上就可通过地址访问PCIe设备,但是Linux采用虚拟地址空间,因此用户空间还不能通过物理地址直接访问PCIe设备。
3.Pcimem 是一个用于在 Linux 用户空间直接读写 PCI/PCIe 设备内存映射(MMIO)区域的工具。
4.Pcimem通过操作 /dev/mem 设备文件,将物理地址映射到用户空间,允许开发者或调试人员直接访问硬件资源如寄存器,而无需编写内核驱动。
5.linux /dev/mem 是一个特殊的字符设备文件,提供对计算机物理内存(RAM 和内存映射的硬件寄存器)访问权限。通过该设备文件,用户程序可以读写物理地址空间中的任意位置。
6.运行 pcimem 通常需要root权限,因为它涉及到直接操作硬件资源。
7.版本获取
8.Pcimem format
3.Pcimem访问PCIe设备Bar空间
1.Method1
通过lspci获取访问设备的总线号:设备号.功能号信息。
/sys/device/pcixxx/查找到对应设备总线号:设备号.功能号的resource info。
如下所示。
通过lspci获取访问设备的Bar地址。
Pcimem输入Bar Addr+offset即可访问对应的Bar空间内容。
如下所示。
4.Pcimem访问PCIe configuration空间
1.PCIe 设备的配置空间通过ECAM(Enhanced Configuration Access Mechanism) 映射到内存地址,需要结合总线号(Bus)、设备号(Device)、功能号(Function)和寄存器偏移(Offset)计算目标地址。
2.确定ECAM基地址
3.计算目标PCIe设备ECAM地址,根据总线号:设备号.功能号
4.访问configuration空间,vendor id/device id
---------------------------------------------------------
---------------------------------------------------------
文章坚持-工作中查阅可解决实际问题
您的点赞-收藏-转发-评论是我们坚持原创的动力
欢迎关注微信公众号"芯塾科技"
视频发布平台:B站/公众号/抖音,可搜索"芯塾科技"观看
微信搜索:Xinshu Technology, 加入芯塾科技技术交流群