手撕烂笔头-pcie驱动读取与内存访问方式的相似性与独特性

PCIe驱动使得CPU能通过内存地址直接读写PCIE设备,这依赖于CPU和PCIE控制器之间的地址空间映射,由BAR寄存器配置。文章探讨了PCIe的ram-like访问接口模式以及PCIE总线上的物理层协议,提及可能类似CSMA/CD或CSMA/CA的冲突管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

pcie驱动读取模型:

cpu--pcie控制器--pcie设备

 

内存访问控制逻辑是指定一个内存地址 赋值或者左值 一句话搞定读写

pcie也实现类似方式, cpu和pcie控制器通过一个内存地址进行读写pcie设备

 

为了达到这个效果需要pcie驱动帮忙,cpu访存是cpu的地址空间 pcie控制器是pcie地址空间 序号映射,映射方式是pcie 配置空间的bar寄存器指定空间大小 然后告诉cpu cpu预留CPU空间给设备,映射之后cpu访存就能访问到pcie设备

 

这里的核心是pcie视图达到ram-like的访问接口模式,编入cpu访存空间 在用户层简单化。

当然pcie内部总线上协议还是传输deviceid vendoeid 以及reg进行访问

另外pcie总线上的物理层协议有待研究是类似于以太网的冲突检测还是类似wifi的冲突避免机制还是其他

 

ps:

CSMA/CD(Carrier Sense Multiple Access/collision detection,带有冲突检测的载波侦听多路存取)

CSMA/CA(Carrier Sense Multiple Access with Collision Avoid,即带有冲突避免的载波侦听多路访问

 

 

### 实现 RT-Thread 操作系统的概述 RT-Thread 是一个开源的实时操作系统 (RTOS),具有高度可扩展性模块化设计。要从头开始理解实现 RT-Thread,可以从以下几个方面入: #### 1. 理解基本概念 为了更好地掌握 RT-Thread 的工作原理,建议先熟悉一些基础的概念技术,比如多任务调度、中断管理、内存管理同步机制等。 #### 2. 获取源码并研究其结构 通过命令 `git clone https://gitee.com/RT-Thread/rt-thread.git` 可以获取最新的 RT-Thread 源代码仓库[^4]。下载完成后,仔细阅读项目中的文档注释有助于理解各个组件的功能及其相互关系。 #### 3. 配置编译环境 按照官方指南完成开发环境的设置是非常重要的一步。这通常涉及到安装必要的工具链(如 MDK)、版本控制系统(Git),以及其他辅助软件或库文件[^2]。确保所有的依赖项都已正确安装之后再继续下一步操作。 #### 4. 探索核心功能——时钟节拍时序控制 任何操作系统都需要有一个稳定的时钟信号作为计时依据,在 RT-Thread 中这个角色由时钟节拍承担。它决定了系统内部各种基于时间的操作精度,例如线程切换的时间间隔就是依靠此参数设定而来。具体来说,可以通过修改宏定义 `RT_TICK_PER_SECOND` 来改变默认每秒产生的脉冲次数,默认情况下该值被设为 1000 Hz 即每隔 1 ms 发生一次中断请求[^3]。 ```c #define RT_TICK_PER_SECOND 1000 ``` #### 5. 学习高级特性应用编程接口(APIs) 除了上述提到的基础部分外,还应该关注其他重要特性的学习,像线程间通信方式(消息队列、邮箱等)、设备驱动框架以及图形界面支持等等。这些都可以帮助开发者更灵活地利用 RT-Thread 构建复杂的应用程序。 #### 6. 动实践 理论知识固然重要,但是真正掌握一门技术还需要大量的实战经验积累。可以尝试编写简单的测试案例来验证所学的知识点;也可以参社区贡献代码或者解决他人遇到的问题从而加深对整个生态的理解程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值