Ubuntu

Ubuntu make 失敗,沒有這樣的文件或目錄 /lib/modules/3.4.0/build

  • March 31, 2016

我正在嘗試在 ChrUbuntu 上為 3.xx 核心建構 CP210x 驅動程序。

建構說明:Ubuntu:

  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

我該如何解決這個問題?

想出了編譯這個核心模組的步驟。網站上的版本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

參考

引用自:https://unix.stackexchange.com/questions/75558