我们结束 PCI 的讨论, 通过快速看一下系统如何处理在市场上的多种 PCI 控制器. 这只 是一个信息性的小节, 打算来展示给好奇的读者, 内核的面向对象分布如何向下扩展到最 低层.

用来实现硬件抽象的机制是通常的包含方法的结构. 它是一个很强功能的技术, 只添加最 小的解引用一个指针的开销到正常的函数调用开销当中. 在 PCI 管理的情况下, 唯一的 硬件相关的操作是读和写配置寄存器的那些, 因为在 PCI 世界中所有其他的都通过直接 读和写 I/O 和内存地址空间来完成, 并且那些是在 CPU 的直接控制之下.

因此, 配置寄存器存取的相关的结构只包含 2 个成员:

struct pci_ops

{

int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val); int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);

};

这个结构定义在 并且被 drivers/pci/pci.c 使用, 这里定义了实际的公 共函数.

作用于 PCI 配置空间的这 2 个函数有更大的开销, 比解引用一个指针; 由于代码的面向 对象特性, 它们使用层叠指针, 但是操作中开销不是一个问题, 这些操作很少被进行并且 从不处于速度-关键的路径中. pci_read_config_byte(dev, where, val)的实际实现, 例 如, 扩展为:

dev->bus->ops->read(bus, devfn, where, 8, val);

系统中各种 PCI 总线在系统启动时被探测, 并且此时 struct pci_bus 项被创建并且和 它们的特性所关联, 包括 ops 字节.

通过"硬件操作"数据结构来实现硬件抽象在 Linux 内核中是典型的. 一个重要的例子是 struct alpha_machine_vector 数据结构. 它定义于 和负责任 何可能的跨不同基于 Alpha 的计算机的改变.

[40] 一些体系也显示 PCI 域信息在 /proc/pci 和 /proc/bus/pci 文件.

[41] 实际上, 那个配置不限定在系统启动时; 可热插拔的设备, 例如, 在启动时不可用并且

相反在之后出现. 这里的要点是设备启动必须不改变 I/O 或者内存区的地址.

[42]

你将在设备自己的硬件手册里发现它的 ID. 在文件 pci.ids 中包含一个列表, 这个文 件是 pciutils 软件包和内核代码的一部分; 它不假装是完整的, 只是列出最知名的供应 商和设备. 这个文件的内核版本将来不会被包含在内核系列中.

linux 硬件抽象,Linux 内核硬件抽象相关推荐

  1. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  2. Linux驱动无硬件设备,Linux设备驱动与硬件通信

    Linux物理设备驱动,主要有几种类型,如:IO类.内存类.总线类.IO类我们平时接触的最多,其主要特点是,通过IO设备的寄存器操作硬件,具体需要去查看硬件手册. 1. IO端口和IO内存 在硬件层, ...

  3. linux怎样收集系统信息,Linux下收集系统和硬件信息的10个实用命令

    [51CTO.com快译]知道Linux系统在什么样的硬件部件上运行始终是个好的做法,这可以帮助你在系统上安装程序包和驱动程序时,处理兼容问题. 1.如何查看Linux系统的信息 如果仅仅想知道系统名 ...

  4. linux 设备直通,ProxmoxVE 开启硬件直通

    默认ProxmoxVE 只能支持硬盘.CPU型号直通.其他PCI硬件 或者 核心显卡的直通,还需要开启IOMMU分组功能 操作PCI直通提示: No IOMMU detected, please ac ...

  5. 5.计算机发展个人理解-电路终究是电路 软件如何控制硬件 代码如何操作硬件 硬件是怎么执行代码 代码如何执行 软件与硬件如何交互 计算机思维 抽象 封装 规范 屏蔽 协议分层...

    计算机只是逻辑电路 除了电路还是电路 计算机就是一堆逻辑电路 他并不知道你到底想要干什么,他也不会理解什么是文件,什么是进程 通电的瞬间,就好像你打开开关,灯泡发光一样 所有的一切都是通过通电来启动的 ...

  6. linux同步硬件和系统时钟,liunx系统下时钟不同步会出现问题 怎么同步Linux 的系统时钟和硬件时钟?...

    linux的系统时钟在很多地方都要用到,要是不准,就会出现一些奇怪的问题: 在linux中,用于时钟查看和设置的命令主要有date.hwclock和clock.linux时钟分为系统时钟(system ...

  7. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

  8. Linux报文硬件时间戳,linux下修改时间戳

    Linux下touch是一个非常有用的命令. touch语法结构如下: touch [-acfm][-d ][-r ][-t ][--help]   [--version][文件或目录...] 或 t ...

  9. linux oracle pam,Linux下安装Oracle11g软、硬件环境检测和修改

    Linux下安装Oracle 11g 软.硬件环境检测和修改 Linux安装Oracle 11G 系统硬件要求: 1. 内存::必须高于1G的物理内存 检查内存大小:grep MemTotal /pr ...

  10. Linux教程——安装Linux系统对硬件有什么要求?

    很多初学者在安装 Linux 系统时,都对自己的电脑配置存在质疑,担心其是否能够满足安装 Linux 的要求.下面就从 CPU.内存.硬盘.显卡等这些方面,详细介绍一下安装 Linux 系统的最低配置 ...

最新文章

  1. 添加Soap头来增加Web Service的安全性
  2. TCC两阶段补偿方案
  3. 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...
  4. i标签content属性输入空白
  5. linux中pri=100,浅析Linux中PRI和NI的关系
  6. 支持向量机回归_机器学习系列17:支持向量机
  7. python运行脚本被杀死_Python脚本被杀死
  8. Bash脚本15分钟进阶教程-转
  9. 3.Magento的布局(Layout),块(Block)和模板(Template)
  10. docker设置不同网络和迁移到指定网络
  11. Nginx资源合并优化模块nginx-http-concat
  12. 混响延迟插件9个合集 – ValhallaDSP Bundle 2020 WiN 免安装版
  13. GHOST恢复盘.维护盘关键词
  14. codevs 1044 拦截导弹
  15. 路飞项目整体路程(六)
  16. css 实现心形加载动画
  17. MySQL结课体会,听课心得体会小结
  18. 医用电气设备中关于电源开关的符号使用要求探讨
  19. 美团酒店:如何收割新一代90后住宿需求? | 一点财经
  20. 曾经写的俄罗斯方块源码 2021-06-13

热门文章

  1. 安装php出现 “make: *** [ext/gd/libgd/gd_jpeg.lo] Error ”
  2. 分段路由SR应用场景—Vecloud
  3. xpath定位的一些方法
  4. PAT-1124. Raffle for Weibo Followers (20)
  5. bzoj 4010 菜肴制作
  6. Weblogic java.lang.OutOfMemoryError: PermGen space
  7. NSObject中的常用方法
  8. spring mvc 文件上传 form表单
  9. 你的灯亮着吗--随笔1
  10. Eclipse生成JavaDoc时指定字符集, 避免页面乱码