Кросс-компиляция пакетов Linux
Я строю платформу для невизуального наблюдения (сонар), используя одноплатный компьютер (Pandaboard) под управлением Arch Linux. Проблема в том, что когда мне нужно добавить функцию в мою установку, make
а также make install
процессы на компьютере с низким энергопотреблением будут длиться вечно. Я хотел бы, чтобы кто-то с подобным опытом указал мне на решение для компиляции пакетов на другом Linux-боксе (также с Arch) и затем портирования их на SBC.
1 ответ
Вы читаете или имеете доступ к журналу Linux Format? В этом выпуске 166 есть статья на эту тему. Цель - Raspberry Pi, но процесс тот же.
По сути, вам нужно установить кросс-компилятор на вашем компьютере x86. Попробуй это:
yaourt -S arm-linux-gnueabi-gcc
прежде чем идти дальше, протестируйте этот набор инструментов с помощью простого hello,world
что вы можете скомпилировать на x86, скопировать на устройство и выполнить.
/* hello.c */
#include <stdio.h>
int main ()
{
printf("Hello, World!\n");
return 0;
}
Команда компиляции будет что-то вроде
arm-linux-gnueabi-gcc -o gello hello.c
Имея это в виду, вы можете скомпилировать ядро:
git clone --depth 1 git://github.com/raspberrypi/linux.git
cd linux
ssh root@alarmpi zcat /proc/config.gz > .config
make -j 8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig -k
Вы можете использовать distcc для выполнения сборок на платформе pandaboard, но он может делегировать компиляцию вашей коробке x86, которая будет использовать ваш кросс-компиляторный набор инструментов для компиляции для arm. На обеих руках и x86:
pacman -S distcc
Сторона руки - это клиент. Отредактируйте его конфиг, /etc/makepkg.conf
Рассказать это о сервере (вашей коробке x86):
BUILDENV=(fakeroot distcc color !ccache)
DISTCC_HOSTS="myx86host"
MAKEFLAGS="-j8"
J8 говорит ему использовать все ядра на i7. Отрегулируйте соответственно.
На сервере нужно настроить distccd /etc/conf.d/distccd
разрешить клиенту подключиться, а затем запустить distccd
демон. Затем вы запускаете свои сборки с клиента.
Инструмент makepkg для сборки пакетов Arch заботится о связи distcc. Если вы создаете свои собственные пакеты, я предлагаю вам обернуть их в PKGBUILD, чтобы сделать работу за вас.
(вам может понадобиться настроить некоторые из вышеперечисленных для жесткого плавающего, если ваша доска использует его)