Установить драйвер для Exar XR17V358 в Linarto Ubuntu 12.04 LTS
У меня есть модуль Freescale iMX6 SMARC и несущая плата. Он пришел от производителя с Ubuntu Linaro 12.04 LTS (ядро 3.0.35). Мне нужно много последовательных портов, поэтому я получил карту PCIe Syba с 8 портами и чипсетом Exar XR17V358. При попытке установить драйвер с веб-сайта Exar я получаю сообщение об ошибке:
make -C /lib/modules/'uname -r'/build SUBDIRS=/home/linaro/Desktop/exar modules
make: *** /lib/modules/3.0.35/build: No such file of directory. Stop
make: *** [build] Error 2
Я предполагаю, что заголовки ядра не установлены, и поэтому он не работает. К сожалению, не представляется, что заголовочные файлы Linux доступны из репозиториев apt по умолчанию.
sudo apt-get install linux-headers-3.0.35
Возвращается:
E: Unable to locate package linux-headers-3.0.35
E: Couldn't find any package by regex 'linux-headers-3.0.35'
Делая некоторые поиски, кажется, что это общая проблема. Я нашел ссылку на архив заголовочных файлов и инструкции для другой платы iMX6 под управлением linaro.
wget http://commondatastorage.googleapis.com/boundarydevices.com/linux-headers-3.0.35-02829-gac24896_4.1.0.tar.gz
tar zxvf linux-headers-3.0.35-02829-gac24896_4.1.0.tar.gz -C /usr
Загрузка прошла успешно, но когда я снова попытался собрать драйвер exar, выглядело то же, что и выше.
Linux-заголовки установлены неправильно.
dpkg -l | grep linux-headers
не возвращает результатов.
Пробовал устанавливать linux-headers-generic, но безрезультатно.
Package linux-headers-generic is not available, but is referred to by
another package. This may mean that the package is missing, has been
obsoleted, or is only available from another source.
Кто-нибудь еще устанавливает драйверы Exar PCIe на Linaro?
Предложения?
2 ответа
Я смог заставить его работать. Вот как я это сделал:
Сначала я получил исходный код ядра от производителя и загрузил его на виртуальную машину Ubuntu 12.04 в папке, которую я назвал ядром на рабочем столе.
Во-вторых, я скачал источник драйвера из exar ( https://www.exar.com/common/content/document.ashx?id=20121) и поместил его в виртуальную машину в папку, которую я назвал exar на рабочем столе.
Затем я кросс-скомпилировал с помощью gcc-arm-linux-gnueabihf в виртуальной машине
sudo apt-get install gcc-arm-linux-gnueabihf
Сделать файл конфигурации для кросс-компиляции
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6_rev_sa01_defconfig
Сборка ядра (необязательный шаг, можно скопировать ядро из образа iMX6)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
Кросс-компиляция драйвера
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /home/ubuntu/Desktop/kernel/ M=/home/ubuntu/Desktop/exar/ modules
Затем я скопировал каталог exar на цель и завершил установку
tar -xzvf exar.tgz
cd exar
cp xr17v35x.ko /lib/modules/3.0.35/kernel/drivers/misc/.
cd /lib/modules/3.0.35/kernel/drivers/misc/.
insmod xr17v35x.ko
Наконец, я проверил, что драйвер был зарегистрирован и что порты были перечислены.
lsmod
ls -l /dev/ttyXR*
порты /dev/ttyXR0 - XR7 были доступны и работоспособны.
После перезагрузки кажется, что драйвер не сохраняется. В качестве патча я добавил скрипт настройки последовательного порта в /etc/rc3.d/S50SerialPortSetup
#! /bin/sh
cd /lib/modules/3.0.35/kernel/drivers/misc/.
insmod xr17v35x.ko
Я также делаю некоторые команды stty для инициализации портов для моего конкретного приложения.
Вам необходимо установить заголовки Linux. В Ubuntu 12.04 никогда не было ядер 3.0.
Запустить в терминале
sudo apt-get install linux-generic
Это установит образ ядра и заголовки 3.2.
Если вы не можете сделать это, вам нужно установить заголовки Ubuntu для вашего ядра.