Eu estou tentando compilar módulos do kernel carregáveis (arquivos .ko) para suportar diferentes sintonizadores USB DVB em um sistema embarcado Linux (um QNAP NAS especificamente) com kernel 4.2.8 . Este sistema não tem o udev (ou melhor, ele tem, mas basicamente você não pode tocá-lo) então eu preciso construir os módulos do kernel e então insmod eles um após o outro.
Eu consegui construir os arquivos .ko que carregam corretamente, mas eu preciso saber quais módulos são necessários para um sintonizador de DVB específico sem ter em mãos.
Com alguns dispositivos é fácil, por exemplo, Hauppauge 2040:7070
, que usa dvb-usb-dib0700.ko
, posso examinar as dependências do módulo:
[~] # modinfo dvb-usb-dib0700.ko | grep depends
depends: dib7000m,dib9000,dibx000_common,dvb-usb,dib0090,dib0070,dib3000mc,rc-core
e eu posso insmod todos os diferentes frontends como dib7000m.ko
, etc. e o sintonizador é perfeitamente detectado (reportado por dmesg ) com o nó / dev / dvb criado em conformidade.
Alguns outros dispositivos, ao contrário, são mais difíceis e isso levanta minha dúvida. Considere por exemplo o Pinnacle PCTV DVB-S2 2013:024c
: o log dmesg relatado em sua página LinuxTV sugere que pode usar em28xx , a8293 e TDA10071 mas modinfo não ajuda neste caso:
# modinfo em28xx-dvb.ko | grep depends
depends: em28xx
# modinfo em28xx.ko | grep depends
depends:
Como você pode ver, não há referências aqui para os frontends a8293 e TDA10071 (que existem no kernel 4.2.8 como módulos carregáveis do kernel), então como posso saber sem ter o dispositivo phisical quais sintonizadores e frontends do kernel ele necessidades?
Estou perguntando porque um amigo com aquele sintonizador tentou insmod dvb-frontends/a8293.ko
e dvb-frontends/tda10071.ko
mas ainda o dmesg não diz Carregado com sucesso em28xx-dvb e nenhum / dev / O dvb é criado, então acho que outro módulo do kernel está faltando. Mas qual módulo? Os módulos do kernel também mudam com as versões do kernel, então a página do LinuxTV pode não estar correta para o nosso kernel 4.2.8.
Ao conectar um sintonizador USB a uma máquina virtual Debian, o sistema carrega automaticamente os módulos do kernel necessários para sintonizadores e frontends usando udev . Onde o sistema operacional encontra essas informações sobre o sintonizador? Se for codificado em algum lugar, posso extraí-lo para entender quais são os módulos de kernel corretos para um sintonizador por sua ID de lsusb? Eu gostaria de replicar no sistema embarcado o procedimento exato que o Debian faz.
EDITAR:
Ao continuar a pesquisar na net, descobri que udev pode usar modalias para corresponder aos módulos do kernel disponíveis e ver se são necessários. Mas mesmo se eu tiver o sintonizador anexado no sistema embarcado (que não usa o udev) como posso "inspecionar" os diferentes aliases do i2c?
Tags kernel-modules dvb