Do que eu posso determinar o formato de 0x ???? 0004 comunica algumas informações adicionais. O bit 2 indica que o BAR é um endereço 1 = 64 bits, 0 = 32 bits, o bit 3 indica que a região da memória é 1 = pré-cabível, 0 = não pré-cabível.
Eu tenho um aplicativo de espaço do usuário que eu uso para gravar nos registradores de um dispositivo pci. Leva o endereço de memória de base do dispositivo como um argumento. Em vez de procurar por lspci
em cada plataforma, eu queria escrever um script bash para usar o ID do fornecedor / dispositivo para procurar o endereço base e chamar o aplicativo.
Vamos usar um controlador de rede Intel com o ID de dispositivo '0891' como exemplo. Isso está em uma caixa do Ubuntu, mas eu preciso que ele funcione em diferentes distribuições Linux.
Pensei em apenas analisar a saída de lspci
com algo assim:
lspci -vn | grep -A 3 0891 | grep Memory | awk '{print $3}'
que produz:
f0500000
Mas estou interessado em obter o endereço base de algum lugar no sistema de arquivos, em vez de confiar em outro aplicativo, então tentei:
cat /proc/bus/pci/devices | grep 0891 | awk '{print $4}'
Isso produz:
f0500004
Por que o segundo valor é compensado por 4 bytes?
Pergunta bônus: Onde posso obter endereços de memória base do dispositivo PCI que funcionarão em distribuições sem depender de outros aplicativos, como o lspci?
Do que eu posso determinar o formato de 0x ???? 0004 comunica algumas informações adicionais. O bit 2 indica que o BAR é um endereço 1 = 64 bits, 0 = 32 bits, o bit 3 indica que a região da memória é 1 = pré-cabível, 0 = não pré-cabível.