Os dispositivos PCIe são projetados para uso em multi-plataforma e arquiteturas?

2

Alguns dispositivos PCIe contêm "PCI Expansion ROM" ou "PCI Option ROM", que armazenam programas para inicializar os dispositivos.

Agora, digamos que eu tenha um controlador RAID PCIe, que geralmente é usado em máquinas x86. Agora, se eu conectá-lo em uma máquina ARM, o dispositivo PCIe falharia ao inicializar? Em outras palavras, a maioria dos dispositivos PCIe é x86?

    
por Kong Chun Ho 06.08.2018 / 20:53

2 respostas

6

Aqui estão os problemas com ROMs de opção PCI na arquitetura ARM:

  • Uma opção ROM gravada no assembly x86 não será compreensível por uma CPU ARM.
  • As ROMs opcionais que devem ser executadas por BIOS do PC (como ROMs começam com 0x55AA e têm alguns bytes para soma de verificação e informações adicionais) assumirão detalhes de baixo nível da arquitetura do PC, como hardware VGA, CPU Intel I / Portas O, etc.
  • Todo o conceito do BIOS estava strongmente ligado à CPU do x86 e à arquitetura do PC e nunca foi usado em nenhum sistema ARM.

Agora ...

  • UEFI, o sucessor de BIOSes deve ser usado em CPUs diferentes de x86.

  • A solução para os problemas acima foi código de bytes EFI - um bytecode que seria interpretado por um tempo de execução na UEFI, tornando o código independente da CPU.

  • Sistemas ARM usando UEFI são relativamente novos (o Surface RT pode até ser o único sistema desse tipo). A maioria dos sistemas ARM usa CFE, U-Boot ou outro firmware de inicialização que não funciona como BIOS de PC.

Now, if I plug it in a ARM machine, would the PCIe device failed to initialize?

Você nem teria uma chance a menos que o sistema ARM estivesse usando o UEFI. Se fosse, seu sistema provavelmente iria travar na inicialização. O EBC não é amplamente usado no firmware da ROM de inicialização.

Embora a ROM de inicialização não funcione, um sistema operacional que inicializa mais tarde ainda reconheceria e seria capaz de usar o hardware muito bem.

O que faz uma ROM de inicialização?

O antigo BIOS pré-UEFI implementou uma API através do mecanismo de interrupção x86. Seu programa teria que configurar vários registradores x86 como parâmetros e depois emitir uma instrução x86 INT .

INT faz com que a CPU x86 procure um endereço em uma tabela e, em seguida, transfere o controle para ela (isso é chamado de interrupção de software - o hardware pode causar isso ao falar com um controlador de interrupção também conectado à CPU).

Antes de processar as opções de ROM, o BIOS preenche esta tabela com vários endereços que retornam ao BIOS e executam funções da API.

O MS-DOS usa a tabela extensivamente, confiando no BIOS para sua função original - B I entrada / O utput S sistema. Outros sistemas operacionais não usam chamadas de BIOS depois de controlarem, eles usam seus próprios drivers e mecanismos para ativar o hardware.

Como essa tabela de interrupções está na RAM, ela pode ser modificada. As ROMs opcionais podem "enganchar" na tabela de interrupções - sobrescrevendo o endereço de uma interrupção específica para algo na ROM - e fazer com que as chamadas da API do BIOS passem para a opção ROM primeiro.

Uma chamada de API do BIOS que o BIOS usa por si só é 13h - essa chamada lê um setor de um dispositivo de disco. É necessário para carregar setor 0 fora de um disco rígido para inicializar um sistema operacional (mesmo MS-DOS).

O BIOS sabe como falar com disquetes e dispositivos IDE, mas nada mais. Uma placa SCSI teria uma opção de ROM que iria reescrever ou "enganchar" 13h - e que tornou possível a inicialização de uma unidade SCSI. Se o sistema operacional for o MS-DOS, o MS-DOS poderá funcionar com a unidade SCSI, já que usaria 13h para operações de disco.

A inicialização via rede é outra situação em que as ROMs opcionais são usadas.

If so, is it possible that the drivers could be designed to take care of this instead?

Sim, e eles fazem. As ROMs de opções do BIOS realmente suportam apenas um sistema operacional e, opcionalmente, um menu de configuração (o "Pressione Ctrl-A para entrar na configuração RAID" é da Option ROM e você o vê no ponto em que o BIOS chama seu código de inicialização).

IIRC Linux takes care of enumerating devices again, and will pretty much ignore information from the x86 BIOS

O Windows também faz isso. O BIOS x86 (e o modo real x86) ficou suspenso, desde que fosse compatível com o MS-DOS.

    
por 06.08.2018 / 21:50
1

A maioria dos dispositivos PCIe que possuem firmware on-board são específicos do x86.
O firmware integrado foi projetado para funcionar em conjunto com um ambiente compatível com Intel.

Existem dispositivos feitos para outras arquiteturas. Principalmente GPU, armazenamento / raid e placas de rede. Alguns deles até permitem que o firmware mude de uma arquitetura para outra. Outros são dual-firmware e podem alternar entre as arquiteturas conforme necessário. Eu vi até mesmo alguns controladores RAID que poderiam ser carregados (no momento da inicialização do ambiente UEFI) com o firmware apropriado para a arquitetura em que ele foi colocado. A maioria deles é de grau de data center e é muito cara. Não é algo que o usuário médio jamais encontrará na natureza.

Para dispositivos sem firmware integrado (ou melhor dito: firmware on-board que não interage com o sistema host) é possível que eles funcionem em qualquer arquitetura que tenha drivers para eles.

    
por 06.08.2018 / 21:37