Descobri os passos para compilar este módulo do kernel. A versão no site, silabs.com é aparentemente muito antigo para ser usado com novos kernels (3.4 +).
Eu consegui compilar uma versão mais nova do arquivo, cp210x.c
, que encontrei no kernel.org para minha versão particular do kernel, usando o Makefile
fornecido na Fonte do Driver VCP.
Construindo o cp210x para sua versão do kernel
baseline seu kernel
Primeiro, anote seus principais e & números menores para o seu kernel que você tem (ou seja, 3.4, 3.5, etc.).
$ uname -r
3.5.0-19-generic
A propósito, estou no Ubuntu 12.10:
$ lsb_release -r
Release: 12.10
Instale os cabeçalhos do kernel & construa ferramentas para sua versão do kernel:
sudo apt-get install linux-headers-$(uname -r) build-essential
Obtenha o pacote VCP em silabs.com
Agora crie uma pequena área de trabalho para tudo isso:
mkdir -p $HOME/cp210x && cd $HOME/cp210x
Baixe a fonte do driver VCP:
wget http://www.silabs.com/Support%20Documents/Software/Linux_3.x.x_VCP_Driver_Source.zip
unzip Linux_3.x.x_VCP_Driver_Source.zip
cd Linux_3.x.x_VCP_Driver_Source
mv cp210x.c cp210x.c_orig
Obtenha o kernel.org cp210x.c
Agora baixe a versão apropriada do cp210x.c para o seu kernel:
$ wget https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/plain/drivers/usb/serial/cp210x.c?h=linux-3.5.y -O cp210x.c
OBSERVAÇÃO: você pode navegar pelos diferentes versões do kernel aqui .
Compile
Agora, compilamos usando make
:
$ make
make -C /lib/modules/3.5.0-19-generic/build M=/home/manny/cp210x/Linux_3.x.x_VCP_Driver_Source modules
make[1]: Entering directory '/usr/src/linux-headers-3.5.0-19-generic'
CC [M] /home/manny/cp210x/Linux_3.x.x_VCP_Driver_Source/cp210x.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/manny/cp210x/Linux_3.x.x_VCP_Driver_Source/cp210x.mod.o
LD [M] /home/manny/cp210x/Linux_3.x.x_VCP_Driver_Source/cp210x.ko
make[1]: Leaving directory '/usr/src/linux-headers-3.5.0-19-generic'
Implantar
Agora, mova qualquer kernel cp210x.ko
preexistente para fora do caminho:
sudo mv /lib/modules/'uname -r'/kernel/drivers/usb/serial/cp210x.ko /lib/modules/'uname -r'/kernel/drivers/usb/serial/cp210x.ko.orig
Agora copie o módulo de kernel recém-criado, cp210x.ko
em seu lugar:
sudo cp cp210x.ko /lib/modules/'uname -r'/kernel/drivers/usb/serial/cp210x.ko
Carregar
Agora, verifique se o módulo do kernel cp210x.ko
anterior não foi carregado:
$ lsmod | grep cp210x
$
Se estiver, descarregue-o:
sudo rmmod cp210x
Agora vamos carregar nosso novo módulo cp210x.ko
:
sudo modprobe cp210x
Teste
Confirme se o conteúdo foi carregado corretamente:
$ lsmod |grep cp210x
cp210x 21822 0
usbserial 42355 1 cp210x
Verifique também dmesg
para quaisquer problemas:
$ dmesg | tail
...
...
[979772.614394] usbcore: registered new interface driver usbserial
[979772.614410] usbcore: registered new interface driver usbserial_generic
[979772.614456] USB Serial support registered for generic
[979772.614461] usbserial: USB Serial Driver core
[979772.614810] usbcore: registered new interface driver cp210x
[979772.614822] USB Serial support registered for cp210x
Compilando o módulo do kernel usbserial
O OP perguntou sobre como realizar a compilação do módulo usbserial.ko
, dado que é necessário pelos aplicativos para fazer uso do módulo do kernel cp210x. Aqui estão essas instruções.
Primeiro, anote qual versão do kernel você está usando:
uname -r
3.5.0-19-generic
Então, estamos usando o 3.5.0 e, em seguida, instalamos a fonte do kernel:
sudo apt-get install linux-source-3.5.0
Agora vamos nos tornar uma área de trabalho:
mkdir -p $HOME/src && cd $HOME/src
Descompacte o código-fonte do kernel em nossa área de trabalho:
tar jxvf /usr/src/linux-source-3.5.0.tar.bz2
Agora vamos compilar usbserial.ko
:
$ cd linux-source-3.5.0/drivers/usb/serial
$ make -C /usr/src/linux-headers-'uname -r' M='pwd' modules
make: Entering directory '/usr/src/linux-headers-3.5.0-19-generic'
CC [M] /root/src/linux-source-3.5.0/drivers/usb/serial/usb-serial.o
...
...
LD [M] /root/src/linux-source-3.5.0/drivers/usb/serial/usbserial.o
...
...
CC /root/src/linux-source-3.5.0/drivers/usb/serial/usbserial.mod.o
LD [M] /root/src/linux-source-3.5.0/drivers/usb/serial/usbserial.ko
...
...
make: Leaving directory '/usr/src/linux-headers-3.5.0-19-generic'
Verifique se usbserial.ko
foi criado:
ls -l |grep usbserial
-rw-r--r-- 1 root root 74822 May 15 09:20 usbserial.ko
-rw-r--r-- 1 root root 4120 May 15 09:20 usbserial.mod.c
-rw-r--r-- 1 root root 8840 May 15 09:20 usbserial.mod.o
-rw-r--r-- 1 root root 74724 May 15 09:20 usbserial.o
Agora vamos instalá-lo, carregá-lo e testá-lo:
# move old driver out of the way
$ mv /lib/modules/'uname -r'/kernel/drivers/usb/serial/usbserial.ko /lib/modules/'uname -r'/kernel/drivers/usb/serial/usbserial.ko.orig
# copy newly built one in
$ cp usbserial.ko /lib/modules/'uname -r'/kernel/drivers/usb/serial/.
# confirm 'usbserial.ko' isn't loaded
$ lsmod | grep usbserial
$
# load it
$ modprobe usbserial
# confirm
$ lsmod |grep usbserial
usbserial 42355 0
# check dmesg log
$ dmesg | tail -4
[1195955.210920] usbcore: registered new interface driver usbserial
[1195955.210970] usbcore: registered new interface driver usbserial_generic
[1195955.211002] USB Serial support registered for generic
[1195955.211069] usbserial: USB Serial Driver core