Welcome to Quantaunit
The doc are concluions for Cyrus idea and devlop process. and also the study process.
This doc can devlop your engineering capability in the view of math,support you having a system design ability.
Tables
- 1. Design and design Tools
- 2. Tools Learn
- 3. Quanta Devlop and Systems Engineering
- 4. Theoretical
- 4.1. Theoretical Math, Particle Computational Physics, Cemistry and Organism.
- 4.2. Theoretical Sociology, Computational Financy, Computational Produce.
- 4.3. QuantaCompute
- 4.4. How to Define, Analyes, and Prove
- 4.5. How to Abstract, Compute, Control
- 4.6. Informatization and Intelligence
- 4.7. QuantaCompute
- 5. Doc, lib and Agile Development
- 6. Kanban and Human Factor Engineering
- 7. Safe and Decode
- 8. Appendix
- 9. About Me
- 10. Markdown Doc
- 10.1. TEST
- 10.2. 允许转发 (从内部网络到外网)
- 10.3. 允许代理网卡路由发送
- 10.4. 允许转发 (从外网返回的流量到内部网络)
- 10.5. 然后 FORWARD 规则就可以匹配
- 10.6. Daily Question Troubleshooting
- 10.7. 创建网桥
- 10.8. 启用网桥接口
- 10.9. 将网桥接口连接到物理网卡(如eth0)
- 10.10. 配置网桥的IPv6地址
- 10.11. 启用IPv6转发
- 10.12. 为网桥配置IPv6地址
- 10.13. 为WLAN接口配置IPv6地址
- 10.14. 启用IPv6转发
- 10.15. Deep Learning
- 10.16. Android 命令行移植相关
- 10.17. ChatGPT useful question
- 10.18. 复制代码
lspci -s 08:00.0 -vv
输出将包含该设备的所有详细信息,包括内存基址和I/O基址。例如:
arduino
复制代码
08:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-DA2
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort-
SERR- <PERR- INTx- Latency: 0, Cache Line Size: 64 bytes I/O ports at 4000 [size=32] Memory at f7800000 (64-bit, non-prefetchable) [size=8M] Memory at f8000000 (64-bit, prefetchable) [size=16M] Expansion ROM at f7680000 [disabled] [size=128K] Capabilities: 在此输出中,I/O ports at 4000即为设备的I/O基址。 使用 setpci 工具直接读取PCI配置空间 setpci命令允许我们直接读取PCI配置空间中的寄存器,查看I/O基址寄存器(Base Address Register, BAR):读取I/O基址: PCI设备的I/O基址通常保存在BAR寄存器中。可以使用以下命令读取:bashsetpci -s 08:00.0 BASE_ADDRESS_0这会显示该设备第一个BAR寄存器的值。若设备有多个BAR寄存器(即支持多个地址空间),可以查询BASE_ADDRESS_1/BASE_ADDRESS_2等。解析BAR寄存器的值: 如果BAR的最低位是1,说明它是I/O地址。 如果BAR的最低位是0,说明它是内存地址。 I/O基址寄存器的值需要与0xFFFFFFFC(即屏蔽掉最后两位)进行AND操作以获得I/O基址。 例如: bash 复制代码 setpci -s 08:00.0 BASE_ADDRESS_0 | sed ‘s/^/0x/’ | xargs printf “%x\n” sed ‘s/^/0x/’ 将输出转换为十六进制格式。 xargs printf “%x\n” 用于格式化输出。 解释I/O基址 从lspci或setpci获取的I/O基址是设备的起始地址,设备通常使用一系列连续的I/O地址。查看设备文档以了解每个地址的作用。 注意事项 权限问题:查看或操作PCI配置空间通常需要超级用户权限。 数据解释:必须了解设备文档以正确解释和使用I/O基址。 安全性:直接访问设备I/O端口可能影响系统稳定性,在实验环境中进行。 通过这些步骤,你可以获取网卡的I/O基址并用于进一步开发和调试。 lspci -s 08:00.0 -vv 得到 Region 0: I/O ports at e000 [size=256] Region 2: Memory at fbc00000 (64-bit, non-prefetchable) [size=64K] Region 4: Memory at fbc10000 (64-bit, non-prefetchable) [size=16K] setpci -s 08:00.0 BASE_ADDRESS_0 得到0000e001 请你为我讲解 ChatGPT 从你提供的输出来看,我们可以理解为以下内容: lspci 输出解释 plaintext 复制代码 Region 0: I/O ports at e000 [size=256] Region 2: Memory at fbc00000 (64-bit, non-prefetchable) [size=64K] Region 4: Memory at fbc10000 (64-bit, non-prefetchable) [size=16K] Region 0: I/O Ports I/O ports at e000: 这表示该设备的I/O基地址为0xe000。 [size=256]: 表示该设备使用256个I/O端口,从0xe000到0xe0ff。 Region 2 and 4: Memory Memory at fbc00000 和 Memory at fbc10000: 这两个区域指示设备的内存映射地址,分别为0xfbc00000和0xfbc10000。 这些内存区域的大小分别为64K和16K。 setpci 输出解释 plaintext 复制代码 0000e001 0000e001是设备的BAR(Base Address Register)寄存器的值。 解析值: 最低位(1):当最低位为1时,这表示这是一个I/O端口地址。 基地址(e000):我们需要将最低两位屏蔽掉,得到0xe000,这与lspci输出的I/O端口一致。 I/O 基址解析 在PCI配置空间中,BAR寄存器用于存储设备的基址。根据PCI规范,BAR寄存器的最低位用于指示地址类型: 最低位为1:表示I/O地址。 最低位为0:表示内存地址。 如何确定I/O地址 I/O地址:要获得I/O基址,需要将BAR寄存器的值与0xFFFFFFFC进行AND操作,屏蔽掉最低两位: I/O Address =0000 𝑒 001 & 0 𝑥 𝐹 𝐹 𝐹 𝐹 𝐹 𝐹 𝐹 𝐶 =0𝑥0000𝑒000 I/O Address=0000e001&0xFFFFFFFC=0x0000e000 这表示设备的I/O基址为0xe000。总结 从lspci和setpci的输出中,我们可以确定: 该设备在PCI总线上使用的I/O基地址为0xe000,并占用256个I/O端口。 你可以通过编写C程序来访问这些I/O端口,使用inb和outb函数与设备进行通信。 使用这些信息,可以继续在系统中进行硬件编程和调试。请确保在实验环境中进行,以避免对系统稳定性造成影响。 基地址(e000):我们需要将最低两位屏蔽掉,得到0xe000,这与lspci输出的I/O端口一致。这是怎么来的 ChatGPT 在PCI配置空间中,基地址寄存器(BAR,Base Address Register)用于确定设备的内存或I/O空间的起始地址。每个BAR寄存器通常是32位宽(或64位宽,用于64位地址),但其中最低几位具有特殊的意义。具体地,BAR寄存器的最低两位用于指示该BAR所指向的地址类型以及对齐要求。 BAR寄存器最低两位的含最低位(位0):用于指示地址类型。 为0时表示是内存地址。为1时表示是I/O地址。第二位(位1):用于内存地址对齐要求,在I/O地址中不使用,通常也是0。 基地址解析过程屏蔽最低两位:为了获得实际的地址(无论是内存地址还是I/O地址),我们需要忽略这些特定位,因此通常会对BAR值执行与0xFFFFFFFC的按位与操作(对于32位BAR),以清除这两位的非地址信息。 示例解析: BAR值为0000e001: 转换为二进制:0000 0000 0000 0000 1110 0000 0000 0001 去掉最低两位:与0xFFFFFFFC按位与,二进制表示为1111 1111 1111 1111 1111 1111 1111 1100 原始值: 00000000000000001110000000000001 与0xFFFFFFFC按位与: 11111111111111111111111111111100 结果: 00000000000000001110000000000000 - 10.19. 𝑈 𝑜
- 10.20. 𝑓 ( 利润 , 合规风险 , 治理成本 ) 𝑈 𝑟
- 10.21. 𝑓 ( 监管成本 , 声誉风险 ) 𝑈 𝑢
- 10.22. 𝜇 𝑢 𝑝 ( 𝑥 )
- 10.23. 𝑈 𝑂
- 10.24. 𝜋 ( 𝑚 , 𝑏 ) − 𝐶 ( 𝑠 ) − 𝜆 ( 𝑠 , 𝑚 ) 𝑈 𝑅
- 10.25. − 𝐷 ( 𝑚 , 𝑏 ) − 𝐶 ( 𝑠 ) 𝑈 𝑈
- 10.26. 𝜇 ( 𝑟 𝑢 𝑙 𝑒 )
- 10.27. 𝜇 𝑢 𝑝 ( 𝑥 )
- 10.28. 𝑑
- 11. Hand Write note