AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 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

Como o Linux sabe como e quais drivers instalar em uma nova instalação

  • 772

Gostaria de saber como o Linux, como o Ubuntu, "sabe" como e quais drivers instalar ao instalá-lo do zero. Por exemplo, compro um computador novo sem nenhum sistema e instalo o Ubuntu. Dentro do meu PC eu tenho uma GPU, HDDs, etc., também alguns periféricos, como mouse, teclado, etc. " quais drivers instalar/baixar e como ele faz isso?

linux ubuntu
  • 2 2 respostas
  • 1809 Views

2 respostas

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

    (Baseado na cópia armazenada em cache do Google de http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html de Petter Reinholdtsen.)

    No hardware, existem certos identificadores de dispositivo padrão que podem ser acessados ​​desde que você conheça o método de acesso padrão para esse barramento de E/S ou subsistema específico, sem ter nenhum conhecimento adicional sobre o dispositivo real. No Linux, esses identificadores são usados ​​para construir cadeias de modalias , que são usadas para encontrar o driver correto para cada dispositivo.

    O código-fonte de cada módulo de driver pode incluir MODULE_DEVICE_TABLEestruturas, que são usadas pelo depmodcomando para criar entradas curinga de alias de módulo que corresponderão às cadeias de modalias do hardware suportado por esse módulo específico.

    Quando o kernel detecta uma peça de hardware sem driver correspondente carregado ainda, ele criará uma string de modalias a partir dos identificadores do hardware e a usará para solicitar que um módulo seja carregado automaticamente. O modprobecomando usará o /lib/modules/$(uname -r)/modules.alias[.bin]arquivo criado por depmodpara ver se existe um módulo correspondente. Se isso acontecer, esse módulo será carregado e poderá testar o hardware para obter mais detalhes, se necessário.

    Por exemplo, eu tenho uma placa de TV 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]
    

    Isso resulta em uma string de modalias como esta:

    pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00
    

    O cx23885módulo tem esses aliases baseados MODULE_DEVICE_TABLEem seu código-fonte:

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

    Quando o kernel detecta a placa, ele efetivamente executa o modprobe pci:v000014F1d00008852sv00000070sd00006A28bc04sc00i00comando. O segundo alias do cx23885módulo corresponde e, portanto, esse módulo é carregado.

    Dispositivos de barramento PCI/PCI-X/PCIe

    Este é o "subtipo PCI". Ele usa strings de modalias assim:

    pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
    

    Isso pode ser decodificado da seguinte forma:

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

    Com lspci -nn, você pode ver os IDs de classe, subclasse, fornecedor e dispositivo. Se você adicionar a -vopção, também poderá ver os IDs do subvendor:subdispositivo.

    Dispositivos USB

    Com dispositivos USB, as strings de modalias ficam assim:

    usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
    

    Isso descompacta para:

    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)
    

    Com o lsusbcomando, você pode ver os IDs do fornecedor e do produto. Se você usar a -vopção, poderá ver os outros IDs também.

    Dispositivos ACPI

    Estes usam os identificadores ACPI PNP, prefixados acpi:e separados por dois pontos:

    acpi:IBM0071:PNP0511:
    

    Dispositivos DMI

    Isso pode ser uma string de modalias muito longa:

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

    Isso descompacta para:

    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)
    

    Dispositivos SerIO, ou seja, principalmente mouses PS/2

    A string de modalias ficará assim:

    serio:ty01pr00id00ex00
    

    Os valores aqui são:

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

    Outros tipos de barramento/dispositivo

    Existem muitos outros tipos de barramento reconhecidos pelo kernel do Linux. Estudar o conteúdo do arquivo fonte do kernel file2alias.c pode ser útil para decifrar o significado dos componentes de cada tipo de string de modalias.

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

    Todos os periféricos se identificam principalmente com IDs exclusivos. Alguns IDs são para interfaces genéricas (HDD/mouse, etc). O Linux tem a maioria dos drivers embutidos, e os drivers genéricos têm listas de compatibilidade para IDs que suportam um conjunto limitado de recursos. Fica mais complicado, mas dmesg, lscpu, hwinfo, lshw, dmidecode, lspci, etc.

    • 3

relate perguntas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • O OpenVPN auto-compilado não inicia a partir do systemd

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve