MyTetra Share
Делитесь знаниями!
Программирование Arduino из Linux, gentoo-way, быстрый старт
Время создания: 16.03.2013 21:25
Раздел: Компьютер - Аппаратное обеспечение - Arduino / Atmega8 - Программирование Arduino / Atmega8
Запись: xintrea/mytetra_syncro/master/base/13634547134eq9w9ezhj/text.html на raw.github.com

Бредовая статья без объяснений что и зачем, но пусть будет.



Программирование Arduino из Linux, gentoo-way, быстрый старт


К сожалению, информация, необходимая для подключения Arduino к компьютеру, оказалась разрозненна по разным источникам на разных языках. Как известно, gentoo — это дистрибутив linux с непрерывной разработкой, фактически в нем и понятия такого быть не может, как «дистрибутив». Из-за этого решение проблемы, найденное в интернете, может оказаться неработоспособным просто потому, что на целевой системе другой набор пакетов и настроек.


Кроме того, авторы, как правило, приводят команды и решения специфичные для конкретной системы в конкретный момент времени. Проходит некоторое время, версии продуктов изменяются, меняются некоторые пути и файлы. Данная статься попытка не только консолидировать информацию, но и изложить так, чтобы информация устаревала как можно в меньшей степени, и было легко модифицировать команды под вашу систему. Возможно это будет полезно и в других дистрибутивах.



Для справки, целевая система:


Архитектура amd64, ядро x86_64 3.7.10-gentoo. Установлены стабильные пакеты последних версий. На аукционе ebay куплена плата Arduino Pro Mini 328p 16МГц 5V и USB конвертер к ней на чипе FTDI.



Как установить в ядро поддержку USB конвертера


После подключения конвертера к USB порту видим следующее:


# tail /var/log/messages

my-pc kernel: usb 6-1: new full-speed USB device number 2 using uhci_hcd

my-pc kernel: usb 6-1: New USB device found, idVendor=0403, idProduct=6001

my-pc kernel: usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

my-pc kernel: usb 6-1: Product: FT232R USB UART

my-pc kernel: usb 6-1: Manufacturer: FTDI

my-pc kernel: usb 6-1: SerialNumber: A900eYdz


Для этого конвертера нужен драйвер ftdi_sio. Я предпочитаю не добавлять в ядро то, что не нужно при загрузке системы, а компилировать в виде модуля. Genkernel я не использую, а вы можете компилировать ядро удобным для вас способом. Поддержка ftdi включается следующим образом:


Device Drivers --->

[*] USB support --->

<M> USB Serial Converter support --->

<M> USB FTDI Single Port Serial Driver


Мы не будем компилировать все ядро, скомпилируем только модуль и загрузим его:


# make && make modules_install

# modprobe ftdi_sio


Проверим что получилось:


#tail -f /var/log/messages

my-pc kernel: usbcore: registered new interface driver usbserial

my-pc kernel: usbcore: registered new interface driver usbserial_generic

my-pc kernel: usbserial: USB Serial support registered for generic

my-pc kernel: usbcore: registered new interface driver ftdi_sio

my-pc kernel: usbserial: USB Serial support registered for FTDI USB Serial Device

my-pc kernel: ftdi_sio 6-1:1.0: FTDI USB Serial Device converter detected

my-pc kernel: usb 6-1: Detected FT232RL

my-pc kernel: usb 6-1: Number of endpoints 2

my-pc kernel: usb 6-1: Endpoint 1 MaxPacketSize 64

my-pc kernel: usb 6-1: Endpoint 2 MaxPacketSize 64

my-pc kernel: usb 6-1: Setting MaxPacketSize 64

my-pc kernel: usb 6-1: FTDI USB Serial Device converter now attached to ttyUSB0


У нас появился интерфейс:


# ls -l /dev/ttyUSB0

crw-rw---- 1 root uucp, 0 марта 9 13:04 /dev/ttyUSB0


Обратите внимание на права. Необходимо добавить вашего пользователя в группу uucp:


# usermod -aG uucp <user>


Если вы используете другой конвертер, то добавьте в ядро его поддержку, в остальном все должно быть аналогично.



Установка или обновление пакета rxtx


Далее нужно установить пакет с rxtx:


# emerge dev-java/rxtx


Особенности 64-битных систем:


В момент написания статьи стабильная версия пакета dev-java/rxtx-2.1.7.2-r3, но прошивка Arduino с ней работать не будет, необходимо поставить dev-java/rxtx-2.2_pre2. Вероятно когда появится новая стабильная версия проблема будет устранена.


# echo =dev-java/rxtx-2.2_pre2 ~amd64 >> /etc/portage/package.keywords


Установка:


# emerge =dev-java/rxtx-2.2_pre2



Установка виртуальной машины JAVA


Можно использовать SDK или JRE, если не знаете, нужен ли вам SDK, то он вам не нужен, и выбирайте sun-jre-bin:


# emerge dev-java/sun-jdk


или


# emerge dev-java/sun-jre-bin


Из-за лицензионных ограничений вам придется вручную скачать соответствующий исходный файл и скопировать его в /usr/portage/distfiles. Кроме того, VM распространяется под отдельной лицензией, поэтому ее небходимо добавить в файл make.conf:


ACCEPT_LICENSE="Oracle-BCLA-JavaSE"


Убедитесь, что нужная VM выбрана:


# eselect java-vm list

Available Java Virtual Machines:

[1] sun-jre-bin-1.6 system-vm


Установка окружения toolchain для компиляции


# emerge sys-devel/crossdev app-portage/layman


Добавьте в файл /etc/make.conf строку, если ее еще нет, и создайте каталог:


# echo source /var/lib/layman/make.conf >> /etc/make.conf

# mkdir -pv /usr/local/portage


Компилируем toolchain, опции по умолчанию соответствуют stage4 и использованию стабильных пакетов:


# crossdev -t avr


Установка собственно самой IDE для программирования


Постольку нет ни одной стабилизированной версии, то скорее всего она появится не скоро. Поэтому просто устанавливаем последнюю версию. Необходимо разблокировать следующие пакеты, добавив в файл /etc/portage/package.keywords следующие строчки:


dev-embedded/arduino ~amd64

dev-embedded/uisp ~amd64


Можно добавить флаги для установки примеров и документации:


echo dev-embedded/arduino doc examples >> /etc/portage/package.use


Установка:


# emerge arduino



Запускаем Аrduino


Выбираем в меню Сервис -> Плата ваш вариант Arduino и Сервис -> Последовательный порт – порт, который появился после подключения конвертера, обычно это /dev/ttyUSB0. Самый простой скетч Blink уже был загружен в мою плату производителем, поэтому чтобы проверить, как все работает, я его модифицировал: теперь светодиод моргает попеременно короткой и длинной вспышкой:


/*

Blink A Morse code

Turns on an LED on adruino 'Dot - Dash - Pause'

*/

// Pin 13 has an LED connected on most Arduino boards.

int led = 13;


// the setup routine runs once when you press reset:

void setup() {

// initialize the digital pin as an output.

pinMode(led, OUTPUT);

}


void loop() {

digitalWrite(led, HIGH);

delay(200);

digitalWrite(led, LOW);

delay(200);

digitalWrite(led, HIGH);

delay(500);

digitalWrite(led, LOW);

delay(500);

}


Нажимаете галочку «Проверить» и стрелочку «Загрузить» и будет вам счастье. На самом деле может и не будет, потому что необходимо устранить еще некоторые проблемы и об этом ниже.



Проблемы


Если пункт выбора последовательного порта деактивирован, то вам снова нужно вернуться к началу статьи и


проверить поддержку конвертера ядром:


#zgrep FTDI /proc/config.gz

CONFIG_USB_SERIAL_FTDI_SIO=m


наличие модуля в памяти:


# lsmod | grep ftdi


можно попробовать его перезагрузить:


# modprobe -r ftdi_sio

# modprobe ftdi_sio


проверить версию rxtx:


# qlist -ICv rxtx

dev-java/rxtx-2.2_pre2


Если все проверили, попробуйте перезагрузить систему, в одном из случаев мне это помогло.


Если при компиляции выводится ошибка:


/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr5.x: Нет такого файла или каталога

collect2: ошибка: выполнение ld завершилось с кодом возврата 1


причина в том, что пути по которым установлен toolchain не соответствуют путям где его ищет Arduino. Находим сначала где нужный файл:


# find /usr/ -name avr5.x

/usr/lib64/binutils/avr/2.23.1/ldscripts/avr5.x


затем создаем символическую ссылку:


# ln -s /usr/lib64/binutils/avr/2.23.1/ldscripts /usr/avr/lib/ldscripts


Если при компиляции выводится ошибка:


/usr/libexec/gcc/avr/ld: cannot find crtm328p.o: Нет такого файла или каталога

collect2: ошибка: выполнение ld завершилось с кодом возврата 1


Для вашей платы имя файла может быть другим, а решение то-же, необходимо создать соответствующую символическую ссылку. Ищем файл:


# find /usr/ -name crtm328p.o

/usr/avr/lib/avr5/crtm328p.o


создаем ссылку:


# ln -s /usr/avr/lib/avr5/crtm328p.o /usr/avr/lib/



Вместо заключения


Сама плата и способы ее использования меня заинтересовали в контексте построения системы «Умный дом». Сейчас у меня капитальный ремонт квартиры в самом разгаре, и я могу проложить любые кабели, разместить любые коммутационные коробки и т. д.


Использованные источники


playground.arduino.cc/linux/gentoo

forums.gentoo.org/viewtopic-t-907860.html

arduino.cc/en/Tutorial/blink

forums.gentoo.org/viewtopic-t-834097.html

bugs.gentoo.org/show_bug.cgi?id=147155

lpig.wordpress.com/2011/09/28/arduino-and-gentoo/


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования