AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 499716
Accepted
jedi
jedi
Asked: 2019-02-10 17:00:36 +0800 CST2019-02-10 17:00:36 +0800 CST 2019-02-10 17:00:36 +0800 CST

Linux 如何知道在新安装中如何安装以及安装哪些驱动程序

  • 772

我想知道Linux(例如我们的Ubuntu)如何“知道”从头开始安装时如何安装以及安装哪些驱动程序。例如,我购买了一台没有任何系统的新计算机并安装了 Ubuntu。在我的 PC 中,我有一个 GPU、HDD 等,还有一些外围设备,如鼠标、键盘等。显然,全新安装没有系统控制和与硬件通信所需的驱动程序,所以 Ubuntu 如何“知道” “要安装/下载哪些驱动程序以及它是如何做到的?

linux ubuntu
  • 2 2 个回答
  • 1809 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2019-02-11T05:38:09+08:002019-02-11T05:38:09+08:00

    (基于Petter Reinholdtsen的http://people.skolelinux.org/pere/blog/Modalias_strings__a_practical_way_to_map__stuff__to_hardware.html的 Google 缓存副本。)

    在硬件中,只要您知道特定 I/O 总线或子系统的标准访问方法,就可以访问某些标准设备标识符,而无需对实际设备有任何进一步的了解。在 Linux 中,这些标识符用于构建模态字符串,然后用于为每个设备找到正确的驱动程序。

    每个驱动程序模块的源代码可以包含MODULE_DEVICE_TABLE结构,depmod命令使用这些结构来创建模块别名通配符条目,该条目将匹配该特定模块支持的硬件的模态字符串。

    当内核检测到一个尚未加载匹配驱动程序的硬件时,它将根据硬件标识符创建一个模态字符串,并使用它来请求自动加载模块。然后该modprobe命令将使用/lib/modules/$(uname -r)/modules.alias[.bin]创建的文件depmod来查看是否存在匹配的模块。如果是这样,则加载该模块并在必要时探测硬件以获取更多详细信息。

    例如,我有一张 DVB 电视卡:

    $ lspci -v -nn -s 07:00.0
    07:00.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX23885 PCI Video and Audio Decoder [14f1:8852] (rev 04)
        Subsystem: Hauppauge computer works Inc. CX23885 PCI Video and Audio Decoder [0070:6a28]
    

    这会产生一个模态别名字符串,如下所示:

    pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00
    

    该模块在其源代码中cx23885具有以下别名:MODULE_DEVICE_TABLE

    # modinfo cx23885
    ...
    alias:          pci:v000014F1d00008880sv*sd*bc*sc*i*
    alias:          pci:v000014F1d00008852sv*sd*bc*sc*i*
    ...
    

    当内核检测到卡时,它会有效地运行modprobe pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00命令。模块的第二个别名cx23885匹配,因此该模块被加载。

    PCI/PCI-X/PCIe 总线设备

    这是“PCI 亚型”。它使用这样的模态字符串:

    pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
    

    这可以解码如下:

    v   00008086  (vendor)
    d   00002770  (device)
    sv  00001028  (subvendor)
    sd  000001AD  (subdevice)
    bc  06        (bus class)
    sc  00        (bus subclass)
    i   00        (interface)
    

    使用lspci -nn,您可以查看类、子类、供应商和设备 ID。如果添加该-v选项,您还可以看到 subvendor:subdevice ID。

    USB 设备

    对于 USB 设备,模态别名字符串如下所示:

    usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
    

    这解压到:

    v    1D6B  (device vendor)
    p    0001  (device product)
    d    0206  (bcddevice)
    dc     09  (device class)
    dsc    00  (device subclass)
    dp     00  (device protocol)
    ic     09  (interface class)
    isc    00  (interface subclass)
    ip     00  (interface protocol)
    

    使用该lsusb命令,您可以查看供应商和产品 ID。如果您使用该-v选项,您也可以看到其他 ID。

    ACPI 设备

    这些使用 ACPI PNP 标识符,以冒号为前缀acpi:并以冒号分隔:

    acpi:IBM0071:PNP0511:
    

    DMI 设备

    这可以是一个很长的模态字符串:

    dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
    

    这解压到:

    bvn  IBM            (BIOS vendor)
    bvr  1UETB6WW(1.66) (BIOS version)
    bd   06/15/2005     (BIOS date)
    svn  IBM            (system vendor)
    pn   2371H4G        (product name)
    pvr  ThinkPadX40    (product version)
    rvn  IBM            (board vendor)
    rn   2371H4G        (board name)
    rvr  NotAvailable   (board version)
    cvn  IBM            (chassis vendor)
    ct   10             (chassis type)
    cvr  NotAvailable   (chassis version)
    

    SerIO 设备,即主要是 PS/2 鼠标

    modalias 字符串将如下所示:

    serio:ty01pr00id00ex00
    

    这里的值是:

    ty  01  (type)
    pr  00  (prototype)
    id  00  (id)
    ex  00  (extra)
    

    其他总线/设备类型

    Linux 内核可识别许多其他总线类型。研究内核源文件file2alias.c的内容可能有助于破译每种模态别名字符串的组成部分的含义。

    • 6
  2. user1133275
    2019-02-10T21:46:41+08:002019-02-10T21:46:41+08:00

    所有外围设备都使用唯一的 ID 来标识自己。一些 ID 用于通用接口(HDD/鼠标等)。Linux 内置了大多数驱动程序,通用驱动程序具有支持有限功能集的 ID 的兼容性列表。它变得更加复杂,但 dmesg、lscpu、hwinfo、lshw、dmidecode、lspci 等会列出 ID

    • 3

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 自编译 OpenVPN 不会从 systemd 启动

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve