Evitar que o Windows 7 altere o registro de comando PCI

1

Eu tenho uma placa PCI Compact em um chassi PXI; possui 2 BARs de memória que devem ser acessados através das operações da National Instruments NiVisa. Estou tendo problemas com o Windows 7 alterando o registro de comando na placa durante a sequência de inicialização, para que as barras de memória da placa fiquem inacessíveis. Eu executei um analisador de barramento e observei que o registro de comando do espaço de configuração está definido como um valor desejável (0x0197) após a execução do BIOS.

Gostaria que esse valor persistisse na sequência de inicialização do Windows. Ele permanece o mesmo ao usar o sistema operacional Windows XP, mas não ao executar o Windows 7. Configurei uma máquina de inicialização dupla com o Windows XP e o Windows 7 para garantir que todo o hardware seja o mesmo durante a comparação. Após a seqüência de inicialização do Windows 7, o valor é 0x0194.

Eu posso definir o registrador de comando para 0x197 para obter esses dois últimos bits da maneira que eu quiser dentro do programa que estou usando para falar com o cartão PXI, e isso me permite usar o cartão como desejar, mas não é uma correção estável. Eu recebo erros frequentes ao iniciar novas sessões de comunicação (depois de fechar as sessões antigas) que a alocação de memória não pode ser executada pelas bibliotecas da National Instruments.

  • Existe uma maneira de impedir que o Windows 7 configure a placa PXI?

Parece que já está do jeito que eu quero, depois que o BIOS estiver pronto. Parece que o Windows CE desativa a configuração do cartão com um sinalizador NoConfig registry . Não consegui encontrar um método que funcionasse no Windows 7 ou no Windows XP.

O Windows XP também tenta reconfigurar o espaço de configuração da placa, mas a deixa em um estado utilizável. Opcionalmente, como isso aumentaria meu entendimento, mas provavelmente é tangencial para resolver meu problema, estou interessado em:

  • Qual é a diferença na reconfiguração do Windows 7 que está obtendo um resultado diferente nessa placa do que o Windows XP?
por Atreys 27.06.2011 / 22:59

1 resposta

1

Bem-vindo ao século XXI. Você está executando um sistema operacional Plug and Play.

Não é possível mapear a memória do dispositivo e os registradores de E / S na memória e no espaço de E / S, o que é exatamente o que permitir manualmente a memória e o acesso de E / S no seu dispositivo PCI . Os recursos do dispositivo de mapeamento devem ser feitos em conjunto com o gerenciador Plug and Play do sistema operacional. O Gerenciador de Plug and Play rastreia quais intervalos de endereços de I / O e memória são usados e por quem, e garante que não haja conflitos devido a (digamos) vários dispositivos mapeando os mesmos intervalos de endereços.

O Windows está desabilitando a memória e os ciclos de E / S para o seu dispositivo porque não foi possível atribuir memória e recursos de E / S ao dispositivo como parte da enumeração do barramento Plug and Play e da arbitragem de recursos. (Estou descontando a possibilidade de que o Windows tenha decidido desativá-lo, já que ele deixou o busmastering ativado.) Ou simplesmente não há espaço no mapa de memória física de sua máquina para os recursos que o dispositivo deseja mapear, ou não foi. É possível iniciar o seu dispositivo com uma configuração de recursos atribuída. (Estou descontando a possibilidade de que seu dispositivo esteja simplesmente quebrado e não está relatando seus requisitos de recursos adequadamente no espaço de configuração PCI.)

O último é o mais provável. A causa comum é um dispositivo PCI que não possui um driver de dispositivo. Sem um driver de dispositivo para acionar o dispositivo, não há como o Gerenciador de PAP atribuir uma configuração de recursos ao dispositivo e colocá-lo no estado "iniciado". Estes requerem um driver de dispositivo (função) para responder às IORPs PaP apropriadas. Nesse caso: seu dispositivo precisa de um driver de dispositivo.

O Gerenciador de dispositivos informará o que está acontecendo com seu dispositivo a esse respeito.

    
por 28.06.2011 / 14:57