码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PCI bar 解析


    只要是接入系统的 pci 设备就需要和系统软件进行交互,设备和系统之间的交流主要包含以下两部分:

    1,系统要能访问到设备的寄存器

    用于控制设备行为,包括DMA,数据收发等;设备通过寄存器报告自身的状态,如是否工作正常,有没有什么错误;

    2,设备和系统之间互相传输数据

    系统定位设备寄存器的位置以及数据收发的位置。换句话说,设备内部的这些资源应该是可寻址的,能够被系统访问到进而完成一些读写操作。一种思路是设备出厂的时候,就固化自己片上存储空间对应在系统中的地址空间,比如对应到0xFE000000h ~ 0xFE000FFF(4KB),这段地址被该设备独占,对这段地址进行ioremap映射后进行访问就可以和该设备交互。可想而知这种方式可扩展性差,毕竟设备有很多,照这样分配地址,那估计系统有多少地址宽度都不够造的。

    另外每个设备对于其所需要的地址空间类型(无论是IO映射还是MMIO映射)和大小有多种多样的需求,但是又不能自己配置,所以必须以一定方式提供信息(包括请求的地址空间类型和大小)给系统,从而让BIOS或操作系统内核来为其分配。PCIe设备可能会有一些自己的内部资源,Host通过BAR(Base Address Register)空间访问这些资源,BAR指的是设备配置空间中的4个字节,针对一个设备来说,其有6个BAR地址(实际中所有的BAR并不会都使用,不使用的BAR必须由厂商硬编码为0),设备的每个BAR对应设备上的一段存储空间(或者寄存器空间),系统通过将系统地址写入BAR就建立了存储空间的卡上地址和系统地址空间的映射。BAR空间实际上是Hos

  • 相关阅读:
    记录el-input使用原生JS事件修改值data后v-model值不同步问题
    IDEA中,maven项目下,lombok插件 ,添加lombok.jar, Maven项目下lombok依赖配置
    第六章 网络互连与互联网(二)
    关于组合数(二项系数)的一个递推公式
    如何改进企业旧式工时管理系统?
    Docker部署可能遇到的问题
    Python编程基础:函数的使用
    java锁
    c++中的模板(7) -- 模板与静态成员
    并发与多线程(5) 条件变量 condition_variable
  • 原文地址:https://blog.csdn.net/yiyeguzhou100/article/details/128167483
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号