Ubuntu make가 실패했습니다. 해당 파일이나 디렉터리가 없습니다. /lib/modules/3.4.0/build

Ubuntu make가 실패했습니다. 해당 파일이나 디렉터리가 없습니다. /lib/modules/3.4.0/build

ChrUbuntu에서 3.xx 커널용 CP210x 드라이버를 빌드하려고 합니다.

빌드 지침: 우분투:

  1. make(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

나는 다음과 같이 시작했습니다 apt-get install build-essential:

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

하지만 위치가 분명히 존재하기 때문에 이 오류로 인해 혼란스러워졌습니다.

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

이 문제를 어떻게 해결할 수 있나요?

답변1

이 커널 모듈을 컴파일하는 단계를 알아보세요. 이것버전웹 사이트상에서,silabs.com최신 커널(3.4+)에서 작동하기에는 너무 오래된 것 같습니다.

VCP 드라이버 소스에서 사용할 수 있는 것을 사용하여 cp210x.c특정 버전의 커널에 대해 kernel.org에서 찾은 파일의 업데이트된 버전을 컴파일 할 수 있었습니다.Makefile

커널 버전에 맞는 cp210x 빌드

커널 기준 설정

먼저 코어의 메이저 및 마이너 번호(예: 3.4, 3.5 등)를 적어 두세요.

$ uname -r
3.5.0-19-generic

그런데 저는 Ubuntu 12.10을 사용하고 있습니다.

$ lsb_release -r
Release:    12.10

커널 버전에 적합한 커널 헤더와 빌드 도구를 설치합니다.

sudo apt-get install linux-headers-$(uname -r) build-essential

silabs.com에서 VCP 번들 받기

이제 모든 작업을 수행할 수 있는 작은 작업 공간을 마련하세요.

mkdir -p $HOME/cp210x && cd $HOME/cp210x

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

kernel.org cp210x.c 받기

이제 커널에 적합한 cp210x.c 버전을 다운로드하세요.

$ 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

노트:당신은 할 수여기에서 다양한 버전의 커널을 찾아보세요..

엮다

이제 다음 명령을 사용하여 컴파일합니다 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'

배포

이제 기존 cp210x.ko커널을 ​​다른 곳으로 옮기십시오.

sudo mv /lib/modules/`uname -r`/kernel/drivers/usb/serial/cp210x.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial/cp210x.ko.orig

이제 새로 빌드된 커널 모듈을 cp210x.ko해당 위치에 복사합니다.

sudo cp cp210x.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial/cp210x.ko

이제 이전 cp210x.ko커널 모듈이 로드되지 않았는지 확인하세요.

$ lsmod | grep cp210x
$

그렇다면 제거하십시오.

sudo rmmod cp210x

이제 새 모듈을 로드해 보겠습니다 cp210x.ko.

sudo modprobe cp210x

시험

올바르게 로드되는지 확인합니다.

$ lsmod |grep cp210x
cp210x                 21822  0 
usbserial              42355  1 cp210x

또한 dmesg문제가 있는지 확인하십시오.

$ 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

usbserial 커널 모듈 컴파일

OP는 usbserial.ko 또한 응용 프로그램이 cp210x 커널 모듈을 사용하기 위해 필요하기 때문에 모듈 컴파일이 어떻게 수행되는지 물었습니다. 다음은 이러한 지침입니다.

먼저 사용 중인 커널 버전을 확인하세요.

uname -r
3.5.0-19-generic

따라서 3.5.0을 사용하고 다음으로 커널 소스를 설치합니다.

sudo apt-get install linux-source-3.5.0

이제 직접 작업 공간을 만들어 보겠습니다.

mkdir -p $HOME/src && cd $HOME/src

커널 소스를 작업 공간으로 추출합니다.

tar jxvf /usr/src/linux-source-3.5.0.tar.bz2

이제 컴파일해 봅시다 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'

usbserial.ko빌드되었는지 확인하십시오 .

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

이제 설치, 로드 및 테스트해 보겠습니다.

# 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

인용하다

답변2

코멘트로서, 이 훌륭하고 매우 상세한 레시피는 내 ARM 크롬북에서 거의 작동합니다. 하지만 나는 이 줄을 바꿔야 했습니다:

$ 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

이와 관련하여:

$ 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

즉, "linux-3.5.y"를 "linux-3.4.y"로 변경해야 합니다. 3.5.y가 작동하지 않습니다.

답변3

나는 우분투 12.04에서도 같은 문제를 겪었고 지금은 잘 문서화된 이 드라이버를 사용하고 있습니다. 구성 스크립트, udev 규칙 등도 있습니다.

https://github.com/RishiGupta12/serial-communication-manager/tree/master/drivers/cp210x-silicon-labs

관련 정보