Mou*_*inX 5 drivers ubuntu make kernel-modules
我正在尝试在 ChrUbuntu 上为 3.xx 内核构建 CP210x 驱动程序。
构建说明: Ubuntu:
make (您的 cp210x 驱动程序)cp cp210x.ko /lib/modules/<kernel-version>/kernel/drivers/usb/serialinsmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.koinsmod 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
Run Code Online (Sandbox Code Playgroud)
但我对错误感到困惑,因为该位置显然存在:
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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
slm*_*slm 10
找出编译这个内核模块的步骤。该版本在网站上,silabs.com显然是太旧与新的内核(3.4+)一起使用。
我能够cp210x.c使用MakefileVCP 驱动程序源中提供的编译我在 kernel.org 上为我的特定内核版本找到的较新版本的文件。
首先记下您拥有的内核的主要和次要编号(即 3.4、3.5 等)。
$ uname -r
3.5.0-19-generic
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在 Ubuntu 12.10 上:
$ lsb_release -r
Release: 12.10
Run Code Online (Sandbox Code Playgroud)
为您的内核版本安装内核头文件和构建工具:
sudo apt-get install linux-headers-$(uname -r) build-essential
Run Code Online (Sandbox Code Playgroud)
现在为这一切做一个小小的工作区:
mkdir -p $HOME/cp210x && cd $HOME/cp210x
Run Code Online (Sandbox Code Playgroud)
下载 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
Run Code Online (Sandbox Code Playgroud)
现在为您的内核下载适当版本的 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
Run Code Online (Sandbox Code Playgroud)
注意:您可以在此处浏览内核的不同版本。
现在我们编译使用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'
Run Code Online (Sandbox Code Playgroud)
现在将任何预先存在的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
Run Code Online (Sandbox Code Playgroud)
现在复制新构建的内核模块,cp210x.ko在它的位置:
sudo cp cp210x.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial/cp210x.ko
Run Code Online (Sandbox Code Playgroud)
现在确保cp210x.ko没有加载以前的内核模块:
$ lsmod | grep cp210x
$
Run Code Online (Sandbox Code Playgroud)
如果是,请卸载它:
sudo rmmod cp210x
Run Code Online (Sandbox Code Playgroud)
现在让我们加载我们的新cp210x.ko模块:
sudo modprobe cp210x
Run Code Online (Sandbox Code Playgroud)
确认它正确加载:
$ lsmod |grep cp210x
cp210x 21822 0
usbserial 42355 1 cp210x
Run Code Online (Sandbox Code Playgroud)
还要检查是否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
Run Code Online (Sandbox Code Playgroud)
usbserial.ko 鉴于应用程序需要使用 cp210x 内核模块,OP 还询问了如何完成模块的编译。这是这些说明。
首先记下您使用的内核版本:
uname -r
3.5.0-19-generic
Run Code Online (Sandbox Code Playgroud)
所以我们使用的是 3.5.0,接下来安装内核源代码:
sudo apt-get install linux-source-3.5.0
Run Code Online (Sandbox Code Playgroud)
现在让我们自己做一个工作区:
mkdir -p $HOME/src && cd $HOME/src
Run Code Online (Sandbox Code Playgroud)
将内核源代码解压到我们的工作区:
tar jxvf /usr/src/linux-source-3.5.0.tar.bz2
Run Code Online (Sandbox Code Playgroud)
现在让我们编译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'
Run Code Online (Sandbox Code Playgroud)
检查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
Run Code Online (Sandbox Code Playgroud)
现在让我们安装它,加载它并测试它:
# 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33479 次 |
| 最近记录: |