O Debian não detecta placa PCI serial após a reinicialização

3

Instalei uma placa PCI com duas portas seriais e uma porta paralela. o chipset é MCS9865 . Eu baixei o driver mais recente (V1.0.12) de aqui . Eu corri make e make install . agora as duas portas seriais são /dev/ttyD0 e /dev/ttyD1 . Eu os testei com picocom e está funcionando perfeitamente. O problema é que quando eu reinicio o sistema não há /dev/ttyD0 e /dev/ttyD1 . Eu preciso fazer outro make install . Existe alguma solução?

saída de lspci -v mostra isso:

03:01.0 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 19
    I/O ports at df00 [size=8]
    Memory at fbeff000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefe000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial

03:01.1 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 18
    I/O ports at de00 [size=8]
    Memory at fbefd000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefc000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial

03:01.2 Parallel controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: bus master, medium devsel, latency 32, IRQ 7
    I/O ports at dd00 [size=8]
    I/O ports at dc00 [size=8]
    Memory at fbefb000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefa000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2

make install mostra isso:

cp mcs9865.ko mcs9865-isa.ko /lib/modules/2.6.32-5-amd64/kernel/drivers/serial/
depmod -A
chmod +x mcs9865
cp mcs9865 /etc/init.d/
ln -s /etc/init.d/mcs9865 /etc/rcS.d/S99mcs9865 || true
ln: creating symbolic link '/etc/rcS.d/S99mcs9865': File exists
modprobe mcs9865
modprobe mcs9865-isa

Estou executando o debian 6.0.5 com os pacotes mais atualizados.

    
por Majid Azimi 22.07.2012 / 14:25

2 respostas

6

A maneira como isso funciona normalmente é:

  • O código-fonte do módulo contém chamadas para o MODULE_DEVICE_TABLE macro para declarar uma tabela de identificadores de dispositivo que este módulo suporta.
  • No módulo compilado, os aliases são armazenados como valores de símbolos chamados __mod_alias_NNN , em que o NNN é inteiro. O valor codifica a identificação de barramento para o dispositivo, por ex. pci:v00009710d00009865sv*sd*bc*sc*i* para o dispositivo PCI identificado como fornecedor 0x9710 , dispositivo 0x9865.
    também são armazenados sob o nome __mod_pci_device_table para dispositivos PCI, __mod_usb_device_table para dispositivos USB, etc.
  • O programa depmod cria um mapeamento da tabela de alias __mod_alias_NNN values para o nome do módulo. Esta tabela é armazenada no arquivo modules.alias na raiz do diretório de módulos do kernel, por exemplo. /lib/modules/2.6.32-5-amd64/modules.alias .
    Também cria arquivos como modules.pcimap , modules.usbmap ,…, que são usados pela infraestrutura de hotplug obsoleta que foi incluída novamente no modprobe.
  • Quando o kernel detecta um dispositivo para o qual nenhum driver está presente, ele tenta carregar um módulo chamando o programa indicado pelo kernel.modprobe sysctl , que é /sbin/modprobe por padrão. O kernel passa um argumento para modprobe que indica qual driver é solicitado. Para um dispositivo PCI, esse é um nome como pci:v00009710d00009865sv*sd*bc*sc*i* .
  • modprobe procura por um módulo com o nome dado. Se encontrar um módulo com o nome solicitado (depois de seguir o alias definido em seus arquivos de configuração, que incluem /etc/modprobe.d/*.conf e /lib/modules/$(uname -r)/modules.alias ), ele carrega esse módulo.
    modprobe não carregará um módulo que foi na lista negra de uma diretiva blacklist em seus arquivos de configuração.

Execute lspci -n para ver os IDs PCI do seu dispositivo e verifique a cadeia acima para ver onde algo deu errado.

Às vezes, um driver funciona para um dispositivo que é muito semelhante ao dispositivo para o qual ele é destinado, mas tem um ID de PCI diferente. Nesse caso, é possível que o driver funcione, mas não será carregado automaticamente porque não declara o ID do PCI para o seu dispositivo. Você pode adicionar o alias manualmente em /etc/modprobe/my_aliases.conf .

Você pode forçar um módulo a ser carregado automaticamente no momento da inicialização, adicionando seu nome a /etc/modules .

    
por 23.07.2012 / 01:58
2

Uma solução rápida seria executar após cada reinicialização

modprobe mcs9865
modprobe mcs9865-isa

para mim, parece que os módulos do kernel não são inseridos automaticamente.

existe um script de inicialização, então você pode ter que adicioná-lo ao nível de execução padrão com este

sudo update-rc.d mcs9865 defaults
    
por 22.07.2012 / 18:27