Я пытаюсь построить драйвер CP210x для ядра 3.xx на ChrUbuntu.
Инструкции по сборке: 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
Как я могу это решить?
Выяснили шаги для компиляции этого модуля ядра. Версия на веб-сайте silabs.com, по-видимому, слишком стар, чтобы использоваться с более новыми ядрами (3.4+).
Я смог скомпилировать более новую версию файла cp210x.c
, которую я нашел на kernel.org для моей конкретной версии ядра, используя Makefile
предоставленный в источнике драйверов VCP.
Прежде всего обратите внимание на свои основные и второстепенные номера для вашего ядра (например, 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
Теперь сделайте себе небольшую рабочую область для всего этого:
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
Теперь загрузите соответствующую версию 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
ядра 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.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
Так же, как комментарий, этот отличный и очень подробный рецепт почти сработал на моей хромовой книге 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 это не сработало.
Я столкнулся с той же проблемой в ubuntu 12.04 и теперь с помощью этого драйвера, который сильно документирован. Кроме того, существуют скрипты конфигурации, правила udev и т. Д.
https://github.com/RishiGupta12/serial-communication-manager/tree/master/drivers/cp210x-silicon-labs