社区
Linux_Kernel
帖子详情
请问大家:在LINUX环境下,如何获得PCI设备的配置空间的地址?
xp4105
2007-10-08 05:21:22
现在有个PCI设备,比如说网卡,现在需要知道配置空间的6个基地址寄存器的值分别是多少?
怎么实现呢?
我查了下,似乎没有直接的函数啊。。。
...全文
762
13
打赏
收藏
请问大家:在LINUX环境下,如何获得PCI设备的配置空间的地址?
现在有个PCI设备,比如说网卡,现在需要知道配置空间的6个基地址寄存器的值分别是多少? 怎么实现呢? 我查了下,似乎没有直接的函数啊。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tkit
2007-10-14
打赏
举报
回复
如果你想写驱动的话,用户空间的信息没有啥意思,你可以随便在内核里面找个PCI驱动的初始化函数,看看一个典型的PCI设备初始化需要调用什么接口。基本上,现在内核里的PCI抽象已经非常完备了,一般在驱动加载之前,内核已经为存在的PCI设备创建相应的pci_dev结构,你需要做的就是得到这个结构,然后或者从dev->resources或者是pci_read_config_***来得到BAR的信息
xp4105
2007-10-12
打赏
举报
回复
谢谢楼上的兄弟
zhang_jiang
2007-10-12
打赏
举报
回复
很多pci配置空间的内容在驱动.probe被调用的时候已经由内核读到pci_dev的结构中了,
另外,有sysfs的话,读sysfs下设备对应目录中的config文件就可得到所有内容
hefuhua
2007-10-10
打赏
举报
回复
struct cp_private *cp
都是函数体内局部变量..
1.局部定义,再通过cp = netdev_priv(dev);
2.函数参数
xp4105
2007-10-10
打赏
举报
回复
在8139cp.c中,大量出现cp这个结构,比如,#define cpr8(reg) readb(cp->regs + (reg)),我找了半天没找到定义在哪里了?不知道cp是个什么?它里面有哪些内容? 谢谢拉
xp4105
2007-10-09
打赏
举报
回复
谢谢上面2位带头大哥指点:)
redhgg2
2007-10-09
打赏
举报
回复
0XCF8 0XCFC 2个IO端口的操作 具体的去读PCI的规格说明书 不难的
hefuhua
2007-10-08
打赏
举报
回复
如果要做pci驱动,首先你得确定你硬件是好的并且能在你的linux系统下找到,上面命令就是确人你的pci硬件一些命令和参数,先看看Linux Device Drivers 3的pci那章..
可以参考网卡驱动的8139cp的驱动,应该在内核源码有8139cp.c的文件..
xp4105
2007-10-08
打赏
举报
回复
什么意思?
没懂。。。
举个例子? 呵呵 或者有什么例子代码? :)
hefuhua
2007-10-08
打赏
举报
回复
刚才我scim智能拼音不能用了修了下:)
你首先得用这
lspci -v
找到你的pci设备
cat /proc/iomem
或者
cat /proc/ioports
找到你的设备对于的io口或者io口内存映射才行
xp4105
2007-10-08
打赏
举报
回复
大哥,真是谢谢您,每次我问问题,您总是热心回答。
我这里这个PCI设备,我要做个驱动,要求在驱动中读出配置空间的6个基地址寄存器的值,怎么来写这代码呢?
我不知道如何下手,请大哥帮忙看看。
hefuhua
2007-10-08
打赏
举报
回复
我博客
http://www.smth.edu.cn/pc/pccon.php?id=6063&nid=144037&order=&tid=0
hefuhua
2007-10-08
打赏
举报
回复
lspci -v
...
02:0d.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
Subsystem: Micro-Star International Co., Ltd. Unknown device 791c
Flags: bus master, medium devsel, latency 32, IRQ 17
I/O ports at d000 [size=256]
Memory at fa010000 (32-bit, non-prefetchable) [size=256]
[virtual] Expansion ROM at 50000000 [disabled] [size=64K]
Capabilities: <access denied>
cd /sys/bus/pci/devices/0000:02:0d.0
cat resource
Linux
编程从入门到精通
linux
内核编程 目 录 雷蒙序 简介
Linux
文档工程小组“公告” 译者序 第一部分
Linux
内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5
地址
空间
9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作系统 11 1.2.3 内核数据结构 13 第2章 内存管理 15 2.1 虚拟内存抽象模型 15 2.1.1 请求调页 17 2.1.2 交换 17 2.1.3 共享虚拟内存 18 2.1.4 物理寻址模式和虚拟寻址模式 18 2.1.5 访问控制 18 2.2 高速缓存 19 2.3
Linux
页表 20 2.4 页分配和回收 21 2.4.1 页分配 22 2.4.2 页回收 22 2.5 内存映射 22 2.6 请求调页 23 2.7
Linux
页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页 26 2.8.3 换出和淘汰页 27 2.9 交换缓存 27 2.10 页换入 28 第3章 进程 29 3.1
Linux
进程 29 3.2 标识符 31 3.3 调度 32 3.4 文件 34 3.5 虚拟内存 35 3.6 创建进程 36 3.7 时间和定时器 37 3.8 执行程序 38 3.8.1 ELF 39 3.8.2 脚本文件 40 第4章 进程间通信机制 41 4.1 信号机制 41 4.2 管道 42 4.3 套接字 44 4.3.1 System V的进程间通信机制 44 4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章
PC
I 49 5.1
PC
I的
地址
空间
49 5.2
PC
I
配置
头 50 5.3
PC
I的I/O和存储
地址
空间
51 5.4
PC
I-ISA桥 51 5.5
PC
I-
PC
I 桥 51 5.5.1
PC
I-
PC
I桥:
PC
I I/O和存储
地址
空间
的窗口 51 5.5.2
PC
I-
PC
I桥:
PC
I
配置
周期和
PC
I 总线编号 52 5.6
Linux
PC
I初始化 53 5.6.1
Linux
内核
PC
I数据结构 53 5.6.2
PC
I
设备
驱动程序 53 5.6.3
PC
I的BIOS函数 56 5.6.4
PC
I修正过程 57 第6章 中断处理与
设备
驱动程序 60 6.1 中断与中断处理 60 6.1.1 可编程中断控制器 61 6.1.2 初始化中断处理数据结构 61 6.1.3 中断处理 62 6.2
设备
驱动程序 63 6.2.1 测试与中断 64 6.2.2 直接存储器访问(DMA) 65 6.2.3 存储器 66 6.2.4
设备
驱动程序与内核的接口 66 6.2.5 硬盘 69 6.2.6 网络
设备
74 第7章 文件系统 77 7.1 第二个扩展文件系统EXT2 78 7.1.1 EXT2系统的inode节点 79 7.1.2 EXT2系统的超级块 80 7.1.3 EXT2系统的组描述符 80 7.1.4 EXT2系统的目录 81 7.1.5 在EXT2文件系统中查找文件 81 7.1.6 在EXT2文件系统中改变文件 的大小 82 7.2 虚拟文件系统 83 7.2.1 VFS文件系统的超级块 84 7.2.2 VFS文件系统的inode节点 84 7.2.3 注册文件系统 85 7.2.4 装配文件系统 85 7.2.5 在虚拟文件系统中查找文件 87 7.2.6 卸载文件系统 87 7.2.7 VFS文件系统的inode缓存 87 7.2.8 目录缓存 88 7.3 缓冲区缓存 88 7.3.1 bdflush内核守护进程 90 7.3.2 update进程 90 7.4 /proc文件系统 91 7.5 特殊
设备
文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2
Linux
中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定
地址
99 8.4.3 建立INET BSD Socket连接 99 8.4.4 INET BSD Socket侦听 100 8.4.5 接受连接请求 100 8.5 IP层 100 8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6
地址
解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务队列 108 9.1.3 定时器 109 9.1.4 等待队列 110 9.1.5 自旋锁 110 9.1.6 信号量 110 9.2 模块 111 9.2.1 模块载入 112 9.2.2 模块卸载 113 第10章 处理器 115 10.1 X86 115 10.2 ARM 115 10.3 Alpha AXP处理器 115 第11章
Linux
内核源代码 117 11.1 怎样得到
Linux
内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章
Linux
数据结构 120 附录A 有用的Web和FTP站点 138 附录B 词汇表 139 第二部分
Linux
内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符
设备
文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把
设备
文件用于输入 170 第6章 启动参数 182 第7章 系统调用 185 第8章 阻塞处理 190 第9章 替换printk 199 第10章 任务调度 202 第11章 中断处理程序 207 第12章 对称多处理 211 第13章 常见错误 212 附录A 2.0和2.2之间的差异 213 附录B 其他资源 214 附录C 给出你的评价 215 第三部分
Linux
程序员指南 第1章
Linux
操作系统 219 第2章
Linux
内核 220 第3章
Linux
libc包 221 第4章 系统调用 222 第5章 “瑞士军刀”:ioctl 223 第6章
Linux
进程间通信 224 6.1 介绍 224 6.2 半双工Unix管道 224 6.2.1 基本概念 224 6.2.2 用C语言创建管道 225 6.2.3 简便方法 229 6.2.4 管道的原子操作 233 6.2.5 关于半双工管道需要注意的几个 问题 233 6.3 命名管道 234 6.3.1 基本概念 234 6.3.2 创建FIFO 234 6.3.3 FIFO操作 235 6.3.4 FIFO上的阻塞动作 236 6.3.5 SIGPIPE信号 237 6.4 系统V I
PC
237 6.4.1 基本概念 237 6.4.2 消息队列 239 6.4.3 信号量 251 6.4.4 semtool:交互式信号量操作 程序 260 6.4.5 共享内存 267 第7章 声音编程 274 7.1 内部扬声器编程 274 7.2 声卡编程 274 第8章 字符单元图形 276 8.1 libc中的I/O函数 277 8.1.1 格式化输出 277 8.1.2 格式化输入 278 8.2 termcap库 278 8.2.1 前言 278 8.2.2
获得
终端描述 279 8.2.3 查看终端描述 279 8.2.4 termcap权能 280 8.3 Ncurses简介 280 8.4 初始化 282 8.5 窗口 283 8.6 输出 284 8.6.1 格式化输出 285 8.6.2 插入字符/行 286 8.6.3 删除字符/行 286 8.6.4 方框和直线 287 8.6.5 背景字符 287 8.7 输入 288 8.8 选项 289 8.8.1 输出选项 289 8.8.2 输入选项 290 8.8.3 终端属性 291 8.8.4 使用选项 291 8.9 更新终端 292 8.10 视频属性与颜色 293 8.11 光标和屏幕坐标 294 8.12 滚动 294 8.13 小键盘 295 8.14 软标签 295 8.15 杂项 295 8.16 低级访问 296 8.17 屏幕转储 296 8.18 Termcap模拟 296 8.19 Terminfo函数 296 8.20 调试函数 297 8.21 Terminfo权能 297 8.21.1 布尔型权能 297 8.21.2 数值型权能 298 8.21.3 字符串型权能 299 8.22 [N]Curses函数概述 306 第9章 I/O端口编程 307 9.1 鼠标编程 307 9.2 调制解调器编程 308 9.3 打印机编程 308 9.4 游戏杆编程 308 第10章 把应用程序移植到
Linux
上 309 10.1 介绍 309 10.2 信号处理 309 10.2.1 SVR4、BSD和POSIX.1下 的信号 310 10.2.2
Linux
信号选项 310 10.2.3
Linux
下的信号 310 10.2.4
Linux
支持的信号 311 10.3 终端I/O 311 10.4 进程信息和控制 311 10.4.1 kvm过程 312 10.4.2 ptrace和/proc文件系统 312 10.4.3
Linux
下的进程控制 312 10.5 可移植条件编译 313 10.6 补充说明 314 附录 以字母顺序排列的系统调用 315 第四部分
Linux
内核概念系统结构 摘要 323 前言 324 第1章 系统结构 325 1.1 系统概述 325 1.2 内核的目标 325 1.3 内核结构的概述 325 1.4 支持多个开发人员 327 1.5 系统数据结构 328 1.5.1 任务列表 328 1.5.2 内存映射 328 1.5.3 索引节点 328 1.5.4 数据连接 329 第2章 子系统的系统结构 330 2.1 进程调度程序系统结构 330 2.1.1 目标 330 2.1.2 模块 330 2.1.3 数据表达 331 2.1.4 依赖性、数据流和控制流 331 2.2 内存管理程序系统结构 331 2.2.1 目标 331 2.2.2 模块 331 2.2.3 数据表示 331 2.2.4 数据流、控制流和依赖性 332 2.3 虚拟文件系统系统结构 333 2.3.1 目标 333 2.3.2 模块 333 2.3.3 数据表示 333 2.3.4 数据流、控制流和依赖性 334 2.4 网络接口系统结构 334 2.4.1 目标 334 2.4.2 模块 334 2.4.3 数据表示 335 2.4.4 数据流、控制流和依赖性 335 2.5 进程间通信系统结构 335 第3章 结论 336 附录A 术语定义 337 附录B 参考文献 338 第五部分
Linux
内核具体系统结构 摘要 341 第1章 前言 342 1.1 目标 342 1.2
Linux
介绍 342 1.3 软件系统结构的背景知识 342 1.4 方法与途径 343 1.5 适用本书的读者 344 1.6 本部分的章节安排 344 第2章 系统结构 345 第3章 子系统结构 346 3.1 进程调度程序 346 3.1.1 目标 346 3.1.2 外部接口 346 3.1.3 子系统描述 346 3.1.4 数据结构 347 3.1.5 子系统结构 348 3.1.6 子系统依赖性 348 3.2 内存管理程序 348 3.2.1 目标 348 3.2.2 外部接口 349 3.2.3 子系统描述 349 3.2.4 数据结构 350 3.2.5 子系统结构 350 3.2.6 子系统依赖性 351 3.3 虚拟文件系统 352 3.3.1 目标 352 3.3.2 外部接口 352 3.3.3 子系统描述 353 3.3.4
设备
驱动程序 353 3.3.5 逻辑文件系统 354 3.3.6 模块 354 3.3.7 数据结构 355 3.3.8 子系统结构 355 3.3.9 子系统依赖性 355 3.4 进程间通信 355 3.4.1 目标 355 3.4.2 外部接口 357 3.4.3 子系统描述 357 3.4.4 数据结构 358 3.4.5 子系统结构 359 3.4.6 子系统依赖性 359 3.5 网络接口 360 3.5.1 目标 360 3.5.2 外部接口 361 3.5.3 子系统描述 361 3.5.4 数据结构 362 3.5.5 子系统结构 363 3.5.6 子系统依赖性 363 第4章 结论 365 附录A 术语定义 366 附录B 参考文献 368 第六部分 附 录 附录A
Linux
文档工程拷贝许可证 372 附录B GNU通用公共许可证 374
Linux
PC
I/
PC
I-E
设备
配置
空间
读取与修改
Linux
PC
I/
PC
I-E
设备
配置
空间
读取与修改1 前言
PC
I和
PC
I Express,是计算机常使用的一种高速总线。操作系统中的
PC
I/
PC
I-E
设备
驱动以及操作系统内核,都需要访问
PC
I及
PC
I-E
配置
空间
。
PC
I/
PC
I-E
设备
的正常运行,离不开
PC
I/
PC
I-E
配置
空间
。通过读写
PC
I/
PC
I-E
配置
空间
,可以更改
设备
运行参数,优化
设备
运行。本文介绍用户
空间
可以读取、修改、扫描
PC
I
linux
写
pc
i
配置
空间
,[转载]应用程序中
pc
i
配置
空间
读写
应用程序中
pc
i
配置
空间
读写~~~~~~~~~~~~~~~~~~~~~~~1. 概述主要讲述在
linux
操作系统中应用程序如何读写
pc
i
配置
空间
。2. 基本原理对于
pc
i
设备
,由cpu通过一个统一的入口
地址
向
pc
i总桥发出命令,再由相应的
pc
i桥间接地完成具体的读写操作。对于X86结构,
pc
i总线的设计者在I/O
地址
空间
保留了8个字节用于这个操作:0xcf8-0xcff。这8个字节分成两个32位的...
linux
如何禁止
pc
i
设备
,怎么让
linux
重新枚举
pc
i
设备
在
Linux
下,ls
pc
i可以枚举所有
PC
I
设备
。它是通过读取
PC
I
配置
空间
(
PC
I Configuration Space)信息来实现
PC
I
设备
的枚举的。这里,我通过两种方式来简单的模拟一下ls
pc
i的功能。一种是通过
PC
I总线的CF8和CFC端口来枚举(参考
PC
I总线规范);另一种是利用proc filesystem。方法一:这种方法需要对端口进行操作,在
Linux
下,普通应用程序没有权限读写...
Linux
PC
I总线-
PC
I
空间
Linux
PC
I总线-
PC
I
空间
介绍
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章