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 / 704828
Accepted
Chan Kim
Chan Kim
Asked: 2022-06-03 21:24:41 +0800 CST2022-06-03 21:24:41 +0800 CST 2022-06-03 21:24:41 +0800 CST

Enumeração PCI no sistema ARM linux, é feita pelo BIOS ou linux? E se eu não fizer nada para PCIe antes do início do Linux?

  • 772

Eu li em algum lugar que a enumeração PCI (encontrando o barramento e o dispositivo, funções) é feita pelo BIOS no sistema x86. (Hoje eu vi novamente em um documento da web coreano: https://melonicedlatte.com/computerarchitecture/2019/11/27 /234300.html ). Então e o sistema baseado em arm64? Eu encontrei em https://patchwork.kernel.org/project/linux-pci/patch/[email protected]/ arm64 usa UEFI para inicialização de PCIe e também encontrei u -boot suporta PCIe para arm64. Então, se eu não usar o firmware UEFI e usar o u-boot e não fizer nada sobre o PCIe durante o u-boot, o sistema operacional (linux) fará a enumeração? (é claro que eu configuro o linux para PCI e meu controlador PCIe).

pci
  • 1 1 respostas
  • 351 Views

1 respostas

  • Voted
  1. Best Answer
    Marcus Müller
    2022-06-04T00:45:16+08:002022-06-04T00:45:16+08:00

    Muito para descompactar aqui:

    Enumeração PCI

    PCI não é o mesmo que PCIe. O resto da pergunta é sobre PCIe, então vou assumir que se trata de PCIe, não PCI.

    PCIe estritamente falando não tem enumeração. Porque não é um barramento, mas uma rede de links ponto a ponto, com pontes (em uma rede de computadores, você chamaria esses switches de rede ). Em nenhum ponto qualquer ponto da rede precisa conhecer a rede completa para funcionar per se. Não há ônibus , portanto não há enumeração de ônibus .

    Haverá a necessidade de que o sistema operacional saiba quais dispositivos estão lá. Isso é possível consultando o complexo raiz para todos os dispositivos conectados a jusante, e cada um deles é uma ponte para todos os dispositivos conectados a jusante.

    Tudo isso pode ser feito pelo sistema operacional, pode (ao contrário do PCI, normalmente) ser feito a qualquer momento sem danos e, portanto, o próprio sistema operacional faz isso. O que ele faz é, na verdade, configurar o hardware encontrado, fornecer regiões mapeadas em memória e assim por diante. O Linux fará esse tipo de enumeração.

    Existe uma exceção: dispositivos necessários para inicializar (ou seja, interfaces de rede, NVMe, controladores gráficos...), que o firmware precisa até mesmo para executar o sistema operacional. Obviamente, estes precisam ser encontrados primeiro. Portanto: o firmware da sua placa também pode fazer isso .

    Isso não tem nada a ver com a arquitetura da sua CPU - só precisa ser feito, não importa se você está no x86 ou no braço. Em alguns dispositivos, o que geralmente chamamos de "incorporados", você pode escrever ou configurar seu firmware para que ele não precise tentar descobrir quais dispositivos estão onde. Ele ainda precisa conversar e configurar os dispositivos. Então, mesma história: enumeração "não-rede completa", mas uma enumeração dos dispositivos pré-configurados.

    é feito pelo BIOS no sistema x86

    "BIOS" é uma API para o firmware do seu sistema. O firmware real pode fazer alguma inicialização, mas a parte "BIOS" é anterior ao PCIe; não está envolvido com isso.

    "UEFI" é apenas mais uma API. Mais moderno.

    arm64 usa UEFI para inicialização PCIe

    O que exatamente é "inicialização PCIe"? Você precisa ser muito preciso aqui.

    Novamente, o ARM64 não tem nada a ver com o fato de você ter PCIe ou como seu firmware irá interagir com o PCIe. Simplesmente coisas diferentes. Você pode ter uma arquitetura de computador e firmware muito parecido com um PC com um ARM, ou PowerPC ou… CPU, e você pode ter uma arquitetura muito diferente de PC com x86 dentro.

    Além disso, UEFI pode ser qualquer coisa ; o nome diz literalmente "interface de firmware extensível". Existem módulos UEFI que oferecem um servidor web completo! É claro que eles precisam de outros módulos UEFI para oferecer uma pilha TCP/IP, e eles precisam de um driver de interface de rede, e isso precisará fazer um pouco de enumeração PCIe para encontrar e conversar com a interface de rede.
    No entanto, você também pode criar um UEFI que não contenha essas coisas e, portanto, não precisará fazer a enumeração PCIe.

    MAS: de alguma forma, em algum lugar, você precisará carregar seu software bootloader/sistema operacional. Em muitos computadores, o dispositivo de armazenamento que o contém só é acessível via PCIe. Então, algum tipo de configuração precisa acontecer.

    Em outros, por exemplo, x86 SoC embutido ou algum ARM SoC, o bootloader está em alguns eMMC e isso é mais ou menos diretamente conectado à CPU. Tudo depende do design do seu computador!

    A arquitetura da CPU tem pouco a ver com o design da interface periférica. Estas são simplesmente coisas separadas.

    Por exemplo, o Playstation 4 é x86 e tem PCIe, mas não é um PC e não tenta ter BIOS, o hardware não tem timer compatível com PC ou controlador de interrupção.

    Então, se eu não usar o firmware UEFI e usar o u-boot a

    Como o nome UEF Interface sugere, UEFI é apenas a API de software que seu firmware oferece (ou não oferece). Isso tem pouco a ver com o que faz internamente ao hardware.

    • 0

relate perguntas

  • É possível conectar o adaptador sem fio Mini PCIe ao laptop por ExressCard?

  • Qual é a relação entre o relógio da NIC e o barramento PCIe 2.0?

  • Como posso consultar o PCI MaxPayloadSize que foi negociado na inicialização?

  • lsusb lista dispositivos em diferentes controladores PCI no mesmo hub USB

  • Configurando uma placa serial PCIe que não parece possuir portas de E/S

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