O Ubuntu faz uma falha com nenhum arquivo ou diretório /lib/modules/3.4.0/build

4

Eu estou tentando construir o driver CP210x para o kernel 3.x.x no ChrUbuntu.

Instruções de compilação: Ubuntu:

  1. make (seu driver cp210x)
  2. cp cp210x.ko /lib/modules/<kernel-version>/kernel/drivers/usb/serial
  3. insmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.ko
  4. insmod cp210x.ko

Eu comecei com apt-get install build-essential então:

root@ChrUbuntu:~/Documents/# make
make -C /lib/modules/3.4.0/build M=/home/me/Documents/Linux_3.x.x_VCP_Driver_Source modules
make: *** /lib/modules/3.4.0/build: No such file or directory.  Stop.
make: *** [all] Error 2

Mas estou confuso com o erro porque o local aparentemente existe:

root@ChrUbuntu:/lib/modules/3.4.0# ls -la
total 820
lrwxrwxrwx  1 root root    105 Feb  8 17:01 build -> /build/x86-mario/tmp/portage/sys-kernel/chromeos-kernel-3.4-r996/work/chromeos-kernel-3.4/build/x86-mario

Como posso resolver isso?

    
por MountainX 12.05.2013 / 22:17

3 respostas

9

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

Referências

por 13.05.2013 / 03:50
0

Assim como um comentário, esta receita excelente e muito detalhada quase funcionou no meu chromebook ARM. Mas eu tive que mudar essa linha:

$ 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

Para isso:

$ wget https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/plain/drivers/usb/serial/cp210x.c?h=linux-3.4.y -O cp210x.c

Ou seja, eu tive que mudar "linux-3.5.y" para "linux-3.4.y"; com 3.5.y não funcionou.

    
por 16.09.2013 / 23:36
0

Eu encontrei o mesmo problema no Ubuntu 12.04 e agora usando este driver que está strongmente documentado. Além disso, scripts de configuração, regras do udev, etc. também estão lá.

link

    
por 31.03.2016 / 07:56