- FPGA PCIE Pcileech 项目学习笔记 By:Moer 公开
- 前言
- 本文档本身是个人学习笔记,发现被人恶意倒卖,为防止大家受骗,故公开
- 本人唯一QQ:2644015855 其他都是骗子
- 学习群Q:
- 升级了下群人数 小伙伴一起进来讨论吧
- PCIE 设备初始化流程图
- 如何在 TeleScan 或 arbor 查看对应设备?
- 先找到设备管理器中被采集设备
- TeleScan中如何看?
- 在 arbor 中如何查看?
- 0.打开 IT 计算器 (进制计算器)
- 1.仿真采集设备的影子空间
- 1.导出转换 COE
- 2.替换项目影子空间文件
- 3.影子(配置)空间详解
- 如果你希望能更真实的仿真配置空间读写位,同时需要替换 Writemask 掩码文件哟
- 2.如何 Vivado 中生成项目
- 2.1:从控制台进入项目目录
- 2.2:从控制台中创建工程项目
- 3.打开顶部模块修改参数
- 3.1 启用配置空间 TLP 数据传输(1 是默认关闭)
- 3.2 更改 PCIE CFG 参数
- 3.3 仿真 DSN 寄存器的高部和低部
- 3.4 仿真 Command 数值
- 4.仿真 CORETOP(配置空间)参数以及指针
- 4.1 更改核心中头部参数
- 4.2 仿真 Core 中的 Bar 基地址寄存器 size value
- 手动查看或换算方法 -1
- 手动查看或换算方法 -2
- Bar 结尾描述
- 如果你满足了,懒惰了
- 5.这下边是进一步的 Core Top 配置空间 的参数仿真
- 影子空间接管寄存器指针
- 为什么 0A 是 0x28h
- 为什么 0A 后才让配置空间接管?
- 为什么接管是两个地址?例如 0A,0A?
- 修改 PCI 能力指针
- 修改电源管理能力的指针
- VC 指针仿真
- VSEC 指针仿真
- DSN 配置仿真
- MSI & MSIX 指针仿真
- 6.修改可分配最大负载 MaxPayload Supported 和 szie
- 6.1 在影子空间中检查并可能修改对应的数值
- 6.1 修改了不同的 MaxPayload Supported 和 Size 在影子空间中如何更改呢 ?
- 7.写掩码 Writemask
- 7.1:更改参数
- 7.2:如何去写掩码?
- 7.2.1 :寄存器参数解释
- RW1C
- 未定义参数:Undefined
- Teledyne 图解以及如何写掩码
- 什么是大小端序?
- 7.2.2:一个一个算太麻烦?
- 7.2.3:另一种方法-通过 teledyne 文件直接转 Writemask.coe
- 7.2.3.1:使用方式
- 7.2.3.2:修改模板文件
- 7.2.3.3:如何转换?
- 8.为项目添加 RW1C 掩码
- 8.1 :在项目中创建 RW1C 的 IP 核
- 8.1.1: 为 RW1C 掩码创建。coe 文件
- 8.1.2 :调用 RW1C IP 核对接接口
- 8.1.3:定义 rw1c 信号 并且将 rw1c 掩码添加到运算逻辑
- 8.2:如何使用 RW1C 掩码?
- 总结:添加rw1c 掩码后写法和 Writemask 掩码一样
- 小技巧
- 9. 配置正确的Bar 映射大小,以及基地址传递
- 如果你要做其他设备,多 IO 设备等
- 9.1: 替换 TLP 中例化 BAR TLP 和 Bar address
- 10.仿真 BAR 内内存数据(TLP)
- 到底什么是 TLP?
- 10.1 找到 Bar2 的内存数据
- 为什么在绿叶中查看 1000h?
- 10.2 如何匹配对应数据?
- 10.3 使用 RW 转储 TLP 并修改对应寄存器赋值
- 10.3.1: 转换为 COE
- 10.3.2 :COE 转换为 verilog 代码
- 10.4 :修改特殊寄存器和 MAC
- 10.4.1: 修改特殊寄存器数据和地址
- 10.4.2 :找不到 MAC 寄存器?
- 10.5 :锁定 MAC 前三组
- (装逼)成就 Get
- 10.6 :等等等等等等 你说你没有 MAC?
- TLP 赋值部分注释
- 小提示:计算分配资源空间大小
- 11.TLP 仿真之添加更多的 BAR 回应模块
- 11.1 例化中使用更多模块,并且创建 TLp 模块
- 11.2 创建新的接口以及例化新的 BAR 模块
- 11.2.1:pcileech_pcie_a7 中定义新信号 并接入到子模块
- 11.2.2:在子模块pcie_cfg_a7中接入信号
- 11.2.3:在子模块pcie_tlp_a7中接入信号
- 11.2.4:在子模块tlps128_bar_controller中接入信号并对接另一个 BAR TLP 模块
- 11.3 新建一个 BAR TLP 模块
- 11.4 配置中增加 BAR 的读写判断
- 12.特殊设备(动态内存)TLP 如何写入?
- 12.1 多次提取并转换为 TLP 格式
- 12.2 对比过滤变动值
- 12.3 关于重复值的过滤
- 13.Zero 4K 空间内存仿真
- 13.1 主要作用
- 13.2 在做 z4k 之前 我们要了解一些基础知识
- 13.3 转储数据并放入 Zero4k 文件中
- 13.3.1:查询需要的寄存器的数据
- 13.3.2:Dump(转储)为 Bin 文件
- 13.3.3:转换并放入 zero4k 数据
- 13.4 如何在 128_bar_cont 中调用 zero4k
- 13.4.1:例化 zero4k 模块
- 注意:如果 bar0 是 64 位并且绑定 z4k 需要 bar1 绑定 none
- 13.4.2:绑定 bar0 报错啦?
- 看到这里是不是小伙伴们会感觉 一切都清晰了许多?
- LINUX 系统 MMIOTrace 内存映射日志
- 什么是 mmiotrace
- MMIO 跟踪指令
- 步骤详解
- 导出到桌面
- 注:
- 如何查看?
- 具体 Linux_MMIOTrace 查看解析注释 byMOER
- LINUX+QEMU 虚拟机 Trace Windows 系统下的 MMIO 操作
- 为什么要如此复杂?
- TLP进阶之非对称内存处理
- 知识碎片
- 中断操作(使设备活跃)
- 什么是中断?
- MSI-X中断
- 锁板子 ID(DNA)
- 如何查询板卡的 DNA(ID)信息
- DNA 锁如何添加?(FIFO中添加)
- 1.打开 fifo 源文件添加变量(下方模块)
- 2.修改Fifo逻辑
- 3.添加DNA检查模块
- 体验模块
- 1.新建体验模块
- 2.例化体验模块
- 3.链接信号
- 4.更改信号名
- 导出固件
- 第一种方式:
- 第二种方式:
- 其他学习文档
- 知识碎片
- 固件烧录教程
- 部分设备掩码
- 部分设备型号要点
- By: Moer
FPGA PCIE Pcileech 项目学习笔记 By:Moer 公开
FPGA PCIE Pcileech 项目学习笔记 By:Moer 公开
Modified June 14
前言
主打一手学习目的的个人笔记 如果有任何错误的地方请告知我 V:Lifehiphop
同时也恳请大家有什么好的方法 知识可以多分享 创造好的环境
要是能帮助到您恳请 github 点个关注
多谢!
本文档本身是个人学习笔记,发现被人恶意倒卖,为防止大家受骗,故公开
本人唯一QQ:2644015855 其他都是骗子
学习群Q:
Unable to print
升级了下群人数 小伙伴一起进来讨论吧
在学习固件之前看看
BIN = 二进制数值
DEC = 十进制数值
HEX = 十六进制数值
Bit = 位
WORD = 字节
DWORD = 双字,四字节
你需要用到的工具有
Vivado (没有我 你寸步难行啊)
arbor (要不是不好看哪些位是只读还是读写,早没 teledyne 的事了)
TeleScan (我可以很方便的看到哪些位是只读还是读写哟 并且方便转储)
RW-Everything (超强 IO/MMIO 查看工具 想做 TLP 少不了我哟)
案例采集的设备为 RTL8111 网卡
可能不同步骤使用的不是同一张 8111 所以采集信息也有出入 主要学习原理
PCIE 设备初始化流程图
Code block
+------------------------+
| 系统上电 |
+------------------------+
|
v
+------------------------+
| 执行自检 (POST) |
+------------------------+
|
v
+------------------------+
| 发现 PCIe 设备 |
| (读取配置空间信息) |
+------------------------+
|
v
+------------------------+
| 资源分配 |
| I/O地址, 内存地址, IRQ|
+------------------------+
|
v
+------------------------+
| 驱动程序匹配 |
| (Vendor ID, Device ID) |
+------------------------+
|
v
+------------------------+
| 驱动程序加载 |
+------------------------+
|
v
+------------------------+
| 驱动程序初始化 |
| (创建工作队列, 设定中断) |
+------------------------+
|
v
+------------------------+
| 设备配置 |
| (设置设备寄存器,功能)|
+------------------------+
|
v
+------------------------+
| 设备自检与状态确认 |
| (确认功能正常) |
+------------------------+
|
v
+------------------------+
| 在线状态通知 |
| (报告设备已初始化) |
+------------------------+
|
v
+------------------------+
| 设备准备就绪 |
| (可以进行数据传输) |
+------------------------+
如何在 TeleScan 或 arbor 查看对应设备?
先找到设备管理器中被采集设备
例如教程中的 8111 设备
在设备管理器中
我们主要看这个位置
PCI 插槽 14 (PCI 总线 2、设备 0、功能 0)也就是 02:00:00
Unable to print
TeleScan中如何看?
圈起来的这三个对应着设备管理器中的位置参数
区别是设备管理器中的是 10 进制,而 TeleScan是 16 进制
所以设备管理器中是 02:00:00
Unable to print
TeleScan中应该是?
16 进制也是一样的
02:00:0
但是记得 TeleScan要转 16 进制哈
Unable to print
在 arbor 中如何查看?
第一步先扫描
Unable to print
Unable to print
扫描后来到 map 这里看更简单了
arbor 默认是直接十进制和设备管理器对应的
刚刚在设备管理器中看到是 02:00:0
这一下不就找到了?
Unable to print
Unable to print
转换.exe
11.00KB
Comments (0)
Go to the first comment
0 words
- Help Center
- Keyboard Shortcuts