Эти инструкции предполагают, что у вас есть работающий кросс-компилятор на ведомом устройстве. Пожалуйста, прочтите Как создать GCC 4.7 toolchain для кросс-компиляции? если нет Также полезно make
установить на мастер.
Монтаж
Во-первых, мы должны установить distcc
. Мы будем использовать готовые пакеты, поставляемые системами управления пакетами операционных систем, но вы можете установить их из исходного кода, если хотите!
Debian
sudo apt-get install distcc
арочный
sudo pacman -S distcc
конфигурация
Slave - Debian / Ubuntu
ТОДО: Это то же самое для Арка? Если нет, то как нам настроить Arch?
Нам нужно настроить параметры в /etc/default/distcc
. В вашем любимом редакторе откройте его как root; Я побежал sudo vim /etc/default/distcc
.
Вам нужно изменить STARTDISTCC
, ALLOWEDNETS
и LISTENER
. Предполагая, что ваш ведущий и ведомый находятся в одной подсети и эта подсеть есть 192.168.0.0/24
, они должны быть установлены на
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Кроме того, вы должны добавить путь к вашему компилятору. Я сделал это, добавив следующую строку
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Примечание . Демон на ведомом устройстве будет работать от имени distccd
пользователя, поэтому убедитесь, что для ваших исполняемых файлов настроены соответствующие разрешения; Я дал всем разрешение на казнь.
Запустите демон - обычно он запускается при загрузке - запустив
sudo service distcc start
Мастер - Арка
ТОДО: Это то же самое для Debian? Если нет, то как нам настроить Debian?
Откройте ~/.distcc/hosts
в своем любимом текстовом редакторе и добавьте IP-адрес ведомых. Мой hosts
файл состоял из одной строки, которая читалась 192.168.0.22
.
Примечание. Рекомендуется назначить статический IP-адрес подчиненному устройству, в противном случае вам придется изменять этот файл при каждом изменении IP-адреса.
использование
Все идет хорошо, вы должны быть в состоянии использовать distcc довольно просто. Например, чтобы собрать hello.c
на hello.o
, бежать
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Пример: Hello World!
Я установил простой пример в своем домашнем каталоге, который состоял из 2 файлов.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
Запуск make hello
будет компилироваться локально; Вы должны сделать это как быстрый тест в первую очередь. Давай, я подожду.
Запуск make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
запустит распределенную компиляцию.
Примечание . Предварительная обработка и связывание по-прежнему выполняются на RPi.
Отладка
Мне потребовалось некоторое время, чтобы заставить это работать правильно, и лучший инструмент отладки, который я нашел, был простой переменной среды. если ты
export DISTCC_VERBOSE=1
в distcc
выходные нагрузки клиент полезной информации.
Это длинный пост, поэтому мы будем благодарны за любые отзывы. Я надеюсь, что я запомнил все шаги!