Como posso carregar um módulo em tempo de execução?

4

Eu apenas compilei o módulo qcserial , que é um módulo de driver para um modem USB Gobi. Agora eu tenho algumas perguntas.

  1. Agora eu tenho dois arquivos: drivers/usb/serial/qcserial.ko e drivers/usb/serial/qcserial.o qual deles é o driver correto?
  2. Além disso, pelo que entendi, será necessário entrar em /lib/modules/3.11.6/kernel/drivers/ , mas como eu sei de quais subdiretórios daqui em diante?
  3. Devo apenas copiar os arquivos e, em seguida, carregar com modprobe qcserial ?

O que tentei até agora:

root@ariag25:~# mkdir /lib/modules/3.11.6/kernel/drivers/usb/serial
root@ariag25:~# cp drivers/usb/serial/qcserial.ko /lib/modules/3.11.6/kernel/drivers/usb/serial/
root@ariag25:~# ls -l /lib/modules/3.11.6/kernel/drivers/usb/serial
total 20
-rw-r--r-- 1 root root 17921 Jan  1 18:30 qcserial.ko
root@ariag25:~# modprobe qcserial
FATAL: Module qcserial not found.
root@ariag25:~# 

O que estou perdendo? Eu também preciso copiar o arquivo .o ?

De onde eu compilei, eu tenho:

ls -l drivers/usb/serial/qc*
-rw-r--r-- 1 reg reg  3776 Oct 18 18:24 drivers/usb/serial/qcaux.c
-rw-r--r-- 1 reg reg  3212 Dec 28 10:14 drivers/usb/serial/qcaux.o
-rw-r--r-- 1 reg reg 12577 Oct 18 18:24 drivers/usb/serial/qcserial.c
-rw-r--r-- 1 reg reg 17921 Dec 28 10:44 drivers/usb/serial/qcserial.ko
-rw-r--r-- 1 reg reg  7743 Dec 28 10:44 drivers/usb/serial/qcserial.mod.c
-rw-r--r-- 1 reg reg 11688 Dec 28 10:44 drivers/usb/serial/qcserial.mod.o
-rw-r--r-- 1 reg reg  6912 Dec 28 10:44 drivers/usb/serial/qcserial.o

editar para a resposta 1

Ok, eu copiei meu linux-3.11.6-arm.tar no /tmp/ do destino. Eu então executei tar -C / -tvf linux-3.11.6-arm.tar para extraí-lo em / , mas depois disso, eu ainda conseguiria

# modprobe qcserial
FATAL: Module qcserial not found.

Eu então me perguntei se o driver já havia sido copiado:

# tar -C / -tvf linux-3.11.6-arm.tar | grep qcserial
-rw-r--r-- root/root     17921 2013-12-28 13:22 lib/modules/3.11.6/kernel/drivers/usb/serial/qcserial.ko

para que fique bem, mas se eu quiser ls , # ls /lib/modules/3.11.6/kernel/drivers/usb/ não há serial diretório dentro de usb/ - por que não? O que aconteceu?

    
por cerr 28.12.2013 / 20:09

2 respostas

1

Você precisará criar um pacote do kernel ( make tar-pkg ). Em seguida, copie-o para o sistema ARM, por exemplo, para /tmp e extraia para / . Você obterá todos os módulos do driver instalados nas pastas corretas, incluindo o modules.dep adequado e outros arquivos necessários para resolver automaticamente as dependências do módulo.

modprobe qcserial deve estar funcionando então.

    
por 28.12.2013 / 20:28
2

Existem dois utilitários para carregar módulos: insmod e modprobe . insmod é um utilitário de baixo nível: ele carrega um arquivo de módulo, fornecido por seu caminho completo. modprobe é um utilitário de alto nível: você passa um nome de módulo e procura o nome desse módulo no banco de dados do módulo, carrega as dependências necessárias e carrega o próprio módulo. Se o módulo não estiver registrado no banco de dados do módulo, modprobe falhará.

Além de copiar o arquivo do módulo, você precisa atualizar o banco de dados do módulo . Execute depmod -a para gerar novamente todo o banco de dados '.

Não importa onde você coloca o arquivo de módulo, desde que esteja em algum lugar abaixo de /lib/modules/3.11.6 (onde 3.11.6 é a versão do seu kernel, conforme retornado por uname -r ). Normalmente, o subdiretório kernel é reservado para os módulos que vêm com o próprio kernel, você deve colocar o seu em outro subdiretório.

    
por 29.12.2013 / 01:39