2022. november 29., kedd

Gyorskeresés

Útvonal

Cikkek » IT-ipar rovat

A Raspberry Pi találkozik a felhővel

Gyorsítsuk PC segítségével a programfordítást, avagy elosztott fordítás különböző architektúrák között!

[ ÚJ TESZT ]

Kereszt-platform fordítófarm beállítása: Ubuntu

A pécé beállítása

A nemrég megjelent Ubuntu 12.10-es rendszert fogom használni. Több okból esett rá a választás. Egyrészt hasonló Debian alapú rendszer, mint a RasPi számára ajánlott Raspbian. Másrészt alapból a 4.7-es gcc változatot tartalmazza. Azért fontos, hogy 4.7-es legyen, mert a készen elérhető cross-compiler is 4.7-es. Persze használhatunk más verziójú gcc-t is, de akkor magunknak kell biztosítani azt, hogy ugyanaz a verzió fusson mindenütt. Különböző verziójú gcc-k együttesen fura hibaüzeneteket eredményezhetnek. Ubuntuból a 32bit-es változatot használhatjuk toolchain készítésre, mert a kész cross-compiler is 32bit-es. Ha már 64bit-es rendszert használunk, akkor a következő bekezdés erre is jó megoldás lehet. Ha már megvan a toolchain, azt a 64bit-es rendszer is tudja futtatni.

Mielőtt belevágnánk a konfigurálásba, fontos megemlítenem, hogy azok számára is lehetséges az Ubuntu futtatása, akik alapvetően más rendszert használnak a hétköznapokban. Ehhez nem kell újratelepíteni a számítógépet, hanem egy kis virtualizálást vethetünk be. VirtualBox vagy VmWare Player segítségével hozzunk létre egy új virtuális gépet. A processzorok számát érdemes annyinak megadni, mint a fizikai magok száma.

Ha csak elosztott fordításhoz használjuk a virtuális gépet, akkor a konfigurálás után ki is kapcsolhatjuk a grafikus felületét, hogy ne egyen feleslegesen erőforrást. Ezt a grub megfelelő paraméterének átállításával érhetjük el:

sudo mcedit /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="text"

Majd futtassuk

sudo update-grub

Térjünk rá az Ubuntu 12.10 32bit beállítására. Fontos, hogy úgy állítsuk be a hálózatunkat, hogy a pécé, amelyen a koordinátor is fut, mindig azonos ip címet kapjon. Ha routerre kötve használjuk a gépeket, akkor annak a beállító felületén mondhatjuk meg, hogy a (virtuális)gép MAC címéhez mi tartozzon. A virtuális gépeknél érdemes a hálózati kapcsolatot bridge módra venni, hogy teljesen önálló gépként legyen elérhető hálózaton át.

A többi lépés hasonló lesz, mint ahogyan a RasPi esetén tettük. Telepítsük a csomagokat:

sudo apt-get install mc git icecc icecc-monitor

Állítsuk be az icecc demon szolgáltatás paramétereit:

sudo mcedit /etc/icecc/icecc.conf

A szerkesztőben a következő paramétereket érdemes megváltoztatni:

ICECC_NETNAME="iceccfarm"
ICECC_MAX_JOBS="4"
ICECC_ALLOW_REMOTE="yes"
ICECC_SCHEDULER_HOST="192.168.0.101"

Az ICECC_MAX_JOBS értékének a processzormagok számát érdemes megadni. Mivel a gépünk lényegesen erősebb, mint a RasPi, így nyugodtan megadhatjuk akár a dupláját is.

A változtatás alkalmazásához indítsuk újra az icecc demon-t.

sudo service icecc restart

Környezeti változóban megadhatunk néhány paramétert. Ezt a .bashrc-be is betehetjük:

export ICECC_CC=gcc-4.7
export ICECC_CXX=g++-4.7
export USE_SCHEDULER=192.168.0.101

Ha x86-os fordításra is használni szeretnénk több gépet, akkor még néhány változtatásra szükség lehet, ahhoz hasonlóan, mint ahogy a RasPi esetén tettük. Most csak az írás céljához közel álló lépéseket mutatom be.

Hozzunk létre egy x86-os toolchain-t a következő paranccsal:

icecc --build-native

Ennek eredményéül egy véletlenszerűen elnevezett fájlt kapunk - nevezzük most generalt-faj.tar.gz-nek -, amit csomagoljunk ki egy könyvtárba:

mkdir toolchain
cd toolchain
tar -xzvf ../generalt-fajl.tar.gz

Hasonlítsuk össze a RasPi rendszeren generált fájlok listáját az itt kapott fájlok listájával. Az esetemben egy fájllal kevesebb található az x86 toolchain-ben, pótoljuk azt:

cp /lib/i386-linux-gnu/libm.so.6 ~/toolchain/lib/

Már majdnem készen vagyunk, azonban ez még x86-os binárisokat generálna, ami nem túl használható a RasPi számára. Mivel a Raspbian rendszer hardfp, ezért ilyen cross-compiler-t töltünk le az alapítvány tárhelyéről:

git clone https://github.com/raspberrypi/tools ~/tools

cp ~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/bin/ar ~/toolchain/usr/bin/ar

cp ~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/bin/gcc ~/toolchain/usr/bin/gcc

cp ~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/bin/g++ ~/toolchain/usr/bin/g++

cp ~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/libexec/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/cc1 ~/toolchain/usr/bin/cc1

cp ~/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/libexec/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/cc1plus ~/toolchain/usr/bin/cc1plus

Igazítsuk meg a jogosultságokat

chmod 0775 ~/toolchain/usr/bin/*

Csomagoljuk be az eredményt

cd ~/toolchain
tar -czvf arm-cross-i386.tar.gz *

Ezt a fájlt másoljuk a RasPi-re és már majdnem készen állunk a fordításra.

Még el kell indítanunk a koordinátort a pécén:

icecc-scheduler -n iceccfarm -vvv

Ha háttérben szeretnénk futtatni, akkor -d kapcsolót is adhatunk neki. Készen is vagyunk.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

  • Hőmérséklet mérő Pi

    Egy kis bevezető után bemutatom a hőmérséklet mérésének egyszerű megvalósítását Raspberry Pi-al.

Hirdetés

Copyright © 2000-2022 PROHARDVER Informatikai Kft.