Raspberry Pi — различия между версиями

Материал из CADR
Перейти к: навигация, поиск
(Тестирование: Переименовал, добавил подраздел про boost)
(Добавил раздел "Troubleshooting")
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
= Raspberry Pi =
 
 
Информация о нашем экземпляре Raspberry Pi:
 
Информация о нашем экземпляре Raspberry Pi:
  
Строка 6: Строка 5:
 
  $ cat /etc/debian_version  
 
  $ cat /etc/debian_version  
 
  7.8
 
  7.8
 +
 +
== Networking ==
 +
=== Wi-Fi ===
 +
Настройка Wi-Fi для подключения к скрытой точке доступа -- пример <code>/etc/network/interfaces</code>:
 +
<pre>
 +
auto lo
 +
 +
iface lo inet loopback
 +
iface eth0 inet dhcp
 +
 +
auto wlan0
 +
allow-hotplug wlan0
 +
iface wlan0 inet dhcp
 +
wpa-scan-ssid 1
 +
wpa-ap-scan 1
 +
wpa-key-mgmt WPA-PSK
 +
wpa-proto RSN WPA
 +
wpa-pairwise CCMP TKIP
 +
wpa-ssid "<SSID>"
 +
wpa-psk "<PASSWORD>"
 +
</pre>
 +
 +
Следует обратить внимание на опцию <b>wpa-scan-ssid</b>, так как выставление её в 1 необходимо для подключения к скрытой точке доступа.
 +
 +
Описание опций можно найти, к примеру, здесь: http://www.cs.upc.edu/lclsi/Manuales/wireless/files/wpa_supplicant.conf
  
 
== distcc ==
 
== distcc ==
Строка 75: Строка 99:
  
 
==== boost ====
 
==== boost ====
В репозиториях Raspbian (Debian) 7.8 версия самая новая версия библиотеки [http://www.boost.org/ boost] -- 1.50.  Однако для сборки некоторых программ требуется более новая версия boost (к примеру, фреймворк [[Участник:Avp/iotivity|IoTivity]] требует boost 1.55).  Здесь мы рассмотрим сборку boost 1.55 на Raspberry Pi, с использованием <code>distcc</code> для ускорения процесса.
+
В репозиториях Raspbian (Debian) 7.8 самая новая версия библиотеки [http://www.boost.org/ boost] -- 1.50.  Однако для сборки некоторых программ требуется более новая версия boost (к примеру, фреймворк [[Участник:Avp/iotivity|IoTivity]] требует boost 1.55).  Здесь мы рассмотрим сборку boost 1.55 на Raspberry Pi, с использованием <code>distcc</code> для ускорения процесса.
  
 
Скачиваем и распаковываем исходники библиотеки:
 
Скачиваем и распаковываем исходники библиотеки:
Строка 94: Строка 118:
  
 
=== distccmon ===
 
=== distccmon ===
distccmon позволяет отслеживать статус компиляции -- при запуске на машине, которая компилирует что-либо через <code>distcc</code>, она показывает, какие файлы в данный момент обрабатываются и на каком хосте.  Утилита идёт в двух ипостасях -- консольная <code>distccmon-text</code> и графическая <code>distccmon-text</code> (которая ставится отдельно.)
+
distccmon позволяет отслеживать статус компиляции -- при запуске на машине, которая компилирует что-либо через <code>distcc</code>, она показывает, какие файлы в данный момент обрабатываются и на каком хосте.  Утилита идёт в двух ипостасях -- консольная <code>distccmon-text</code> и графическая <code>distccmon-gnome</code> (которая ставится отдельно.)
  
 
Пример запуска <code>distccmon-text</code>:
 
Пример запуска <code>distccmon-text</code>:
Строка 104: Строка 128:
  
 
   DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --log-level debug --log-file=/var/log/$NAME.log --daemon"
 
   DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --log-level debug --log-file=/var/log/$NAME.log --daemon"
 +
 +
== Troubleshooting ==
 +
=== HDMI-монитор не подключается при первом старте ===
 +
==== Симптомы ====
 +
Монитор подключен, но при первом старте (к примеру, после включения электричества в хакерспейсе), на мониторе надпись "No signal".
 +
==== Решение ====
 +
* https://raspberrypi.stackexchange.com/a/4735
  
 
== Сноски ==
 
== Сноски ==
Строка 111: Строка 142:
 
* [http://www.openframeworks.cc/setup/raspberrypi/Raspberry-Pi-DISTCC-guide.html Статья по настройке распределённой компиляции с distcc для Raspberry Pi] (на английском)
 
* [http://www.openframeworks.cc/setup/raspberrypi/Raspberry-Pi-DISTCC-guide.html Статья по настройке распределённой компиляции с distcc для Raspberry Pi] (на английском)
 
* [http://habrahabr.ru/post/111324/ Использование, настройка и тестирование distcc и ccache]
 
* [http://habrahabr.ru/post/111324/ Использование, настройка и тестирование distcc и ccache]
 +
 +
[[Категория:База знаний]]

Версия 11:23, 14 мая 2016

Информация о нашем экземпляре Raspberry Pi:

$ uname -a
Linux puffin 3.2.0-4-rpi #1 Debian 3.2.51-1+rpi1 armv6l GNU/Linux
$ cat /etc/debian_version 
7.8

Networking

Wi-Fi

Настройка Wi-Fi для подключения к скрытой точке доступа -- пример /etc/network/interfaces:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-scan-ssid 1
wpa-ap-scan 1
wpa-key-mgmt WPA-PSK
wpa-proto RSN WPA
wpa-pairwise CCMP TKIP
wpa-ssid "<SSID>"
wpa-psk "<PASSWORD>"

Следует обратить внимание на опцию wpa-scan-ssid, так как выставление её в 1 необходимо для подключения к скрытой точке доступа.

Описание опций можно найти, к примеру, здесь: http://www.cs.upc.edu/lclsi/Manuales/wireless/files/wpa_supplicant.conf

distcc

Компиляция на Raspberry Pi чего-либо сложнее "Hello World!" может занимать приличное количество времени, и естественным желанием является ускорение этого процесса. Решением данной проблемы может служить распределённая (кросс)-компиляция для Raspberry Pi, что и будет рассмотрено далее.

Сервер

Здесь мы рассмотрим настройку distccd на машинах, которые будут помогать нашему Raspberry Pi в нелёгкой задаче компиляции.

Во-первых, ставим distccd:

$ apt-get install distcc

Клонируем набор утилит (англ. toolchain)[1]:

$ git clone --depth=1 https://github.com/raspberrypi/tools.git rpi-tools
$ sudo mv rpi-tools /opt/

Тогда путь к toolchain'у будет следующий:

/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

Теперь указываем distccd путь к утилитам. Меняем /etc/init.d/distcc:

RPI_BIN_PATH=/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:$RPI_BIN_PATH

Правим настройки distccd в файле /etc/default/distcc:

STARTDISTCC="true"
ALLOWEDNETS="172.16.1.0/16"
LISTENER="0.0.0.0"
JOBS="2"

Перезапускаем сервис:

 $ sudo service distcc restart

Клиент (Raspberry Pi)

Клиентом выступает наш Raspberry Pi.

Ставим distcc:

$ apt-get install distcc

Добавляем хосты-помощники (на которых запущен distccd) в файл /etc/distcc/hosts, убираем (комментируем) +zeroconf:

#+zeroconf
localhost,lzo,cpp penguin,lzo,cpp pelican,lzo,cpp

Сборка с использованием distcc

htop

Тестирование распределённой сборки будем делать на утилите htop:

$ wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz
$ tar -zxf htop-1.0.3.tar.gz
$ cd htop-1.0.3

Ставим необходимые библиотеки для сборки:

$ sudo apt-get install libncurses5-dev

Указываем путь к компиляторам:

$ export CXX=/usr/lib/distcc/arm-linux-gnueabihf-g++ CC=/usr/lib/distcc/arm-linux-gnueabihf-gcc

Запускаем компиляцию:

$ ./configure --disable-unicode
$ make -j4

boost

В репозиториях Raspbian (Debian) 7.8 самая новая версия библиотеки boost -- 1.50. Однако для сборки некоторых программ требуется более новая версия boost (к примеру, фреймворк IoTivity требует boost 1.55). Здесь мы рассмотрим сборку boost 1.55 на Raspberry Pi, с использованием distcc для ускорения процесса.

Скачиваем и распаковываем исходники библиотеки:

$ tar -jxf boost_1_55_0.tar.bz2
$ cd boost_1_55_0

Для сборки библиотеки boost с использованием distcc необходимо поменять настройки в файле tools/build/v2/user-config.jam, указав distcc g++ в качестве компилятора:

# Configure specific gcc version, giving alternative name to use.
# using gcc : 3.2 : g++-3.2 ;
using gcc : : distcc g++ ;

Запускаем сборку:

$ ./bootstrap.sh
$ distcc-pump ./b2 -j4

distccmon

distccmon позволяет отслеживать статус компиляции -- при запуске на машине, которая компилирует что-либо через distcc, она показывает, какие файлы в данный момент обрабатываются и на каком хосте. Утилита идёт в двух ипостасях -- консольная distccmon-text и графическая distccmon-gnome (которая ставится отдельно.)

Пример запуска distccmon-text:

$ watch -n1 distccmon-text

Изменение уровня логирования

Для изменения уровня логирования distccd необходимо поменять значение опции --log-level. Это можно сделать в /etc/init.d/distcc:

 DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --log-level debug --log-file=/var/log/$NAME.log --daemon"

Troubleshooting

HDMI-монитор не подключается при первом старте

Симптомы

Монитор подключен, но при первом старте (к примеру, после включения электричества в хакерспейсе), на мониторе надпись "No signal".

Решение

Сноски

  1. Опция --depth=1 предписывает клонировать только последний коммит с брэнча, без клонирования всей истории.

Внешние ссылки