web-dev-qa-db-ja.com

Ubuntu makeは、そのようなファイルまたはディレクトリ/lib/modules/3.4.0/buildで失敗します

ChrUbuntuで3.x.xカーネル用の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

どうすればこれを解決できますか?

4
MountainX

このカーネルモジュールをコンパイルする手順を理解しました。 バージョン Webサイト、 silabs.com は古すぎるため、新しいカーネル(3.4以降)では使用できません。

VCP Driver Sourceで提供されているMakefileを使用して、特定のバージョンのカーネル用にkernel.orgで見つけた新しいバージョンのファイルcp210x.cをコンパイルすることができました。

カーネルバージョン用の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

USBカーネルモジュールのコンパイル

OPは、アプリケーションがcp210xカーネルモジュールを使用するために必要な場合に、usbserial.koモジュールのコンパイルを実行する方法についても尋ねました。これらの手順は次のとおりです。

まず、使用しているカーネルのバージョンをメモします。

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

参考文献

10
slm

コメントと同じように、この優れた非常に詳細なレシピは、私のARM Chromebookでほぼ機能しました。しかし、この行を変更する必要がありました。

$ 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では機能しませんでした。

0
Patola

私はubuntu 12.04で同じ問題に遭遇し、今では詳細に記載されているこのドライバを使用しています。さらに、構成スクリプト、udevルールなどもあります。

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

0
samuel05051980