Escrevendo um Método de Configurar

Este artigo descreve como funciona um método de dispositivo de Configurar. Ele também sugere diretrizes para que os programadores escretem seus próprios métodos de configuração do dispositivo de Configurar.

Sintaxe

cfgDev -l Nome [ -1 -2 ]

Descrição

O método Configurar move um dispositivo de Defined (não disponível para uso no sistema) para Disponível (disponível para uso no sistema). Se o dispositivo tiver um driver, o método Configurar carrega o driver do dispositivo no kernel e descreve as características do dispositivo para o driver. Para um dispositivo intermediário (como um adaptador de barramento SCSI), este método determina quais os dispositivos filhos conectados devem ser configurados e grava seus nomes lógicos na saída padrão.

O método Configurar é invocado por meio do comando de configuração mkdev ou pelo Gerenciador de Configuração. Como o Gerenciador de Configuração executa uma segunda vez na inicialização do sistema de fase 2 e também pode ser invocado repetidamente no tempo de execução, um método de Configurar do dispositivo pode ser invocado para configurar um dispositivo disponível. Esta não é uma condição de erro. No caso de um dispositivo intermediário, o método Configurar verifica a presença de dispositivos filhos. Se o dispositivo não for um dispositivo intermediário, o método simplesmente retorna.

Em geral, o método Configurar obtém todas as informações de que necessita sobre o dispositivo a partir do banco de dados de Configuração. As opções que especificam a fase de inicialização do sistema são usadas para limitar determinadas funções a fases específicas.

Se o dispositivo tiver um dispositivo pai, o pai deve ser configurado primeiro. O método Configurar para um dispositivo falha se o pai não estiver no estado Disponível.

Por convenção, os três primeiros caracteres do nome do método Configurar são cfg. O restante do nome (Dev) pode ser qualquer caractere, sujeito a restrições de nome do sistema operacional do sistema operacional, que identificam o dispositivo ou grupo de dispositivos que utilizam o método.

Sinalizações

Item Descrição
-l Nome Identifica o nome lógico do dispositivo a ser configurado.
-1 Especifica que o dispositivo está sendo configurado na fase 1 do processamento de inicialização do Sistema. Esta opção não pode ser especificada com o-2 bandeira. Se nem o-1 nem o-2 flags são especificados, o método Configure é invocado em tempo de execução.
-2 Especifica que o dispositivo está sendo configurado na fase 2 da inicialização do sistema. Esta opção não pode ser especificada com o-1 bandeira. Se nem o-1 nem o-2 flags são especificados, o método Configure é invocado em tempo de execução.

Manejo De Dados Vitais do Produto de Manejo (VPD)

Os dispositivos que fornecem dados vitais do produto (VPD) são identificados na classe de objeto Dispositivo Predefinido (PdDv) configurando o descritor do sinalizador VPD para TRUE em cada um dos objetos PdDv do dispositivo. O método Configurar deve obter o VPD do dispositivo e armazená-lo na classe de objeto VPD Customizado (CuVPD). Consulte a documentação de hardware adequada para determinar como recuperar o VPD do dispositivo. Em muitos casos, o VPD é obtido a partir do driver de dispositivo usando a subroutine sysconfig .

Depois que o VPD é obtido do dispositivo, o método Configurar consulta a classe de objeto CuVPD para ver se o dispositivo possui VPD de hardware armazenado lá. Nesse caso, o método compara o VPD obtido do dispositivo com aquele da classe de objeto CuVPD . Se o VPD for o mesmo em ambos os casos, não é necessário processamento adicional. Se eles forem diferentes, atualize o VPD na classe de objeto CuVPD para o dispositivo Se não houver VPD na classe de objeto CuVPD para o dispositivo, inclua VPD do dispositivo.

Primeiro, comparando o VPD do dispositivo com aquele na classe de objeto CuVPD , as modificações na classe de objeto CuVPD são reduzidas Isso ocorre porque o VPD de um dispositivo tipicamente não muda. A redução do número de gravações de banco de dados aumenta o desempenho e minimiza possíveis perdas de dados.

Entendendo Erros de Método de Configuração

Para muitos dos erros detectados, o método Configurar sai com o código de saída apropriado. Em outros casos, o método Configurar pode precisar desfazer algumas das operações que executou. Por exemplo, após carregar o driver do dispositivo e definir o dispositivo para o driver, o método Configurar pode encontrar um erro enquanto faz o download do microcódigo. Se isso acontecer, o método irá finalizar o dispositivo a partir do driver usando a sub-rotina sysconfig e descarregar o driver usando a sub-rotina loadext .

O método Configurar não exclui os arquivos especiais ou desatribuir os números principais e menores se eles foram alocados com sucesso e o arquivo especial criado antes do erro foi encontrado. Isso porque o esquema de configuração do sistema operacional permite que os números principais e menores e arquivos especiais sejam mantidos para um dispositivo mesmo que o dispositivo esteja desconfigurado.

Se o dispositivo estiver configurado novamente, o método Configurar reconhecerá que os números principais e menores estão alocados e que os arquivos especiais existem.

No momento em que o método Configurar verifica os dispositivos filhos, ele configurou com sucesso o dispositivo. Erros que ocorrem enquanto a verificação de dispositivos filhos são indicados com o código de saída E_FINDCHILD . O comando mkdev detecta se o método Configurar foi concluído com sucesso. Se necessário, ele exibirá uma mensagem indicando que um erro ocorreu enquanto procurava dispositivos filhos.

Diretrizes para a Escrita de um Método de Configurar

As tarefas a seguir são diretrizes para a escrita de um método de Configurar. Ao escrever para um dispositivo específico, algumas tarefas podem ser omitidas. Por exemplo, se o dispositivo não for um dispositivo intermediário ou não tiver um driver, o método será escrito em conformidade. Um dispositivo também pode ter requisitos especiais não listados nessas tarefas.

O método de Configurar deve:

  1. Validar os parâmetros de entrada. A sinalização de nome lógico -l deve ser fornecida para identificar o dispositivo que deve ser configurado. As bandeiras -1 e -2 não podem ser fornecidas ao mesmo tempo.
  2. Inicialize o Object Data Manager (ODM). Use o subroutine odm_inicializar e bloqueie o banco de dados de Configuração usando a subroutine odm_lock . Veja "Escrevendo um Método Definir" para um exemplo.
  3. Recuperar o objeto Customized Device (CuDv) para o dispositivo a ser configurado. O descritor de Nome do Dispositivo do objeto CuDv deve corresponder ao nome fornecido com o sinalizador de nome lógico -l . Se nenhum objeto for encontrado com o nome especificado, o método sai com um erro.
  4. Recupere o objeto Dispositivo Predefinido (PdDv) para o dispositivo a ser configurado. O descritor de Tipo Exclusivo do objeto PdDv deve corresponder o link ao descritor de classe de objeto PdDv do objeto CuDv do dispositivo.
  5. Obter o descritor de valor do LED do objeto PdDv do dispositivo.. Recupere o descritor de Valor do LED do objeto PdDv do dispositivo e exiba esse valor nos LEDs do sistema usando a sub-rotina setleds se a sinalização -1 ou -2 for especificada. Isto especifica quando o método Configurar executará no tempo de inicialização. Se o sistema pendura durante a configuração no momento da inicialização, o valor de LED exibido indica qual método de Configurar criou o problema.

    Se o dispositivo já estiver configurado (ou seja, o descritor de Estado do Dispositivo do objeto CuDv do dispositivo indica o estado Disponível) e for um dispositivo intermediário, vá para a tarefa de detectar dispositivos filhos. Se o dispositivo estiver configurado mas não for um dispositivo intermediário, o método Configurar sairá sem erro.

    Se o dispositivo estiver no estado Definido, o Método de Configuração deverá verificar o dispositivo pai, verificar a presença de um dispositivo, obter o VPD do dispositivo e atualizar o objeto CuDv do dispositivo

  6. Se o dispositivo tiver um pai, o método Configurar valida a existência do pai e verifica se o pai está no estado Disponível. O método consulta o descritor do Nome Lógico do Dispositivo Pai do objeto CuDv do dispositivo para obter o nome pai. Se o dispositivo não tiver um pai, o descritor será uma string nula.

    Quando o dispositivo tiver um pai, o método de Configuração obterá o objeto CuDv do dispositivo pai e verificará o descritor de Estado do Dispositivo Se o objeto não existir ou não estiver no estado Disponível, o método sai com um erro.

    Outra verificação deve ser feita se um dispositivo pai existir. O método Configurar deve verificar se nenhum outro dispositivo conectado ao mesmo pai (no mesmo local de conexão) foi configurado. Por exemplo, duas impressoras podem ser conectadas com a mesma porta usando uma caixa de comutação. Enquanto cada impressora tem o mesmo pai e conexão, apenas uma pode ser configurada de cada vez.

    O método de Configuração executa essa verificação consultando a classe de objeto CuDv Ele consulta para objetos cujo descritor Estadual de Dispositivo é configurado para o estado Disponível e cujo Nome e Localização Lógica do Dispositivo Pai Onde Conectados em descritores de Dispositivo Pai correspondem àqueles para o dispositivo que está sendo configurado. Se uma correspondência for encontrada, o método sai com um erro.

  7. Confira a presença do dispositivo. Se o dispositivo for uma placa adaptadora e o método Configurar tiver sido invocado no tempo de execução (indicado pela ausência de ambas as sinalizadores -1 e -2 ), o método Configurar deve verificar a presença do cartão do adaptador. Isso é realizado através da leitura de registros POS a partir do cartão. (Os cadastros do PDV são obtidos abrindo e acessando o arquivo especial /dev/bus0 ou /dev/bus1 .) Isso é essencial, pois se o cartão estiver presente, o método Configurar deve chamar a rotina da biblioteca busresolver para designar recursos de barramento para evitar conflito com outras placas adaptadoras no sistema. Se o cartão não estiver presente ou a rotina busresolver falhar a resolução de recursos de barramento, o método sai com um erro.
  8. Determine se o dispositivo tem um driver de dispositivo. O método Configurar obtém o nome do driver de dispositivo do descritor Nome do Driver de Dispositivo do objeto PdDv do dispositivo. Se este descritor for uma string nula, o dispositivo não possui um driver de dispositivo.

    Se o dispositivo tiver um driver de dispositivo, o método Configurar deve:

    1. Carregar o driver do dispositivo usando a subroutine loadext .
    2. Determine o maior número do dispositivo usando a sub-rotina genmajor .
    3. Determine o número menor do dispositivo usando o subroutine getminor ou genmenor ou por sua própria rotina dependente do dispositivo.
    4. Criar arquivos especiais no diretório /dev se eles já não existirem. Arquivos especiais são criados com a subroutine mknod .
    5. Construir a estrutura dependente do dispositivo (DDS). Esta estrutura contém informações descrevendo as características do dispositivo para o driver de dispositivo. As informações são geralmente, mas não necessariamente, obtidas a partir dos atributos do dispositivo no banco de dados de Configuração. Consulte as informações do driver de dispositivo apropriado para determinar o que o driver de dispositivo espera que o DDS pareça. O tópico "Estrutura Dependente de Dispositivo (DDS) Overview" descreve a estrutura DDS.
    6. Use a subroutine sysconfig para passar o DDS para o driver de dispositivo.
    7. Se o código precisa ser baixado para o dispositivo, leia no arquivo necessário e passe o código para o dispositivo através da interface fornecida pelo driver do dispositivo. O arquivo a ser transferido por download pode ser identificado por um objeto Atributo Predefinido (PdAt) ou Atributo Customizado (CuAt). Por convenção, arquivos de microcódigo estão no diretório /etc/microcode (que é um link simbólico para o diretório /usr/lib/microcode ). O software adaptador transferido por download está no diretório /usr/lib/asw .
  9. Obter o dispositivo VPD. Após a conclusão das tarefas relativas ao driver do dispositivo, ou se o dispositivo não possuia um driver de dispositivo, o método de Configurar determinará se ele precisa obter dados vitais do produto (VPD) do dispositivo. O descritor de Sinalizador de VPD do objeto PdDv do dispositivo especifica se ele possui ou não VPD ou não.
  10. Atualize o objeto CuDv . Nesse ponto, se nenhum erro foi encontrado, o dispositivo está configurado. O método Configurar atualizará o descritor Status do Dispositivo do objeto CuDv do dispositivo para indicar que ele está no estado Disponível. Além disso, configure o descritor de Status da Mudança para o SAME se ele estiver configurado atualmente como AUSENTE. Isso pode ocorrer se o dispositivo não foi detectado na inicialização do sistema e está sendo configurado no tempo de execução.
  11. Defina os dispositivos filhos detectados não representados atualmente na classe de objeto CuDv . Para realizar isso, chame o método Definir para cada novo dispositivo infantil. Para cada dispositivo filho detectado já definido na classe de objeto CuDv , o método Configurar examina o descritor de Sinalização de status de mudança do CuDv do dispositivo filho para ver se ele precisa ser atualizado Se o valor do descritor for DONT_CARE, nada precisa ser feito. Se tiver qualquer outro valor, ele deverá ser configurado como SAME e o objeto CuDv do dispositivo filho deverá ser atualizado. O Descritor de Mudar Status de Status é usado pelo sistema para indicar alterações de configuração.

    Se o dispositivo for um dispositivo intermediário, mas não puder detectar dispositivos filhos conectados, consulte a classe de objeto CuDv sobre essas informações. O valor do descritor de Flag Status da Mudança para esses dispositivos filhos deve ser DONT_CARE porque o dispositivo pai não pode detectá-los. Às vezes, um dispositivo infantil tem um atributo especificando para o método Configurar se o dispositivo filho deve ser configurado. O atributo autoconfig de dispositivos TTY é um exemplo desse tipo de atributo.

    Independentemente de os dispositivos filhos serem detectáveis, o método Configurar irá escrever os nomes lógicos do dispositivo dos dispositivos filhos para serem configurados para a saída padrão, separados por caracteres de espaço. Se o método foi invocado pelo Gerenciador de Configuração, o Gerente invoca o método Configurar para cada um dos nomes de dispositivos filhos gravados na saída padrão.

  12. Feche todas as classes de objetos e finalize o ODM. Feche todas as classes de objetos e finalize o ODM Se não houver erros, use um código 0 (zero) para sair.

Arquivos

Item Descrição
/dev/bus0 Contém registros POS.
/dev/bus1 Contém registros POS.
/etc/microcode diretório Contém arquivos de microcódigo. Um link simbólico para o diretório /usr/lib/microcode .
/usr/lib/asw diretório Contém software de adaptador baixado.