
ChrUbuntuで3.xxカーネル用のCP210xドライバをビルドしようとしています。
ビルドガイドライン:Ubuntu:
make
(cp210xドライバ)cp cp210x.ko /lib/modules/<kernel-version>/kernel/drivers/usb/serial
insmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.ko
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 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 が動作しません。
答え3
私はUbuntu 12.04でも同じ問題を抱えていましたが、今はよく文書化されたこのドライバを使用しています。設定スクリプト、udevルールなどもあります。
https://github.com/RishiGupta12/serial-communication-manager/tree/master/drivers/cp210x-silicon-labs