RPMs mit ELDK erstellen

Das ELDK stellt cross compiler für die PowerPC.

ELDK Umgebung

zunächst alle vorhandenen Umgebungsvariablen auf ein minimum reduzieren. Dies stellt sicher, dass man bei mehreren eldk Installationen auch mit der richtigen arbeitet.
[user@host]$ export PATH=/bin:/usr/bin:/usr/local/bin

in das Installationsvereichnis der verwendeten eldk Umgebung wechseln (im folgenden $ELDK) und die Umgebungsvariablen initialisieren. Eine saubere leere eldk Installation ist bei der RPM Entwicklung von vorteil.

[user@host]$ cd /common/usr/eldk
[user@host]$ . eldk_init 6xx # or any other architecture
ARCH=ppc
CROSS_COMPILE=ppc_6xx-
DEPMOD=/common/usr/eldk-4.2/usr/bin/depmod.pl
PATH=/common/usr/eldk-4.2/usr/bin:/common/usr/eldk-4.2/bin:/bin:/usr/bin:/usr/local/bin

RPM Specs

Die RPM Basisverzeichnisse liegen unter $ELDK/usr/src/denx/ und folgen dem normalen RPM layout
[user@host]$ ls usr/src/denx/
BUILD  RPMS  SOURCES  SPECS  SRPMS

Specfiles werden wie gewohnt erzeugt.

Configure aufrufe müssen die Target architektur berücksichtigen. Das RPM macro %configure wertet hier alles richtig aus. ( --host=i386-pc-linux-gnu --build=i386-pc-linux-gnu --target=ppc-denx-linux-gnu ). Wenn das Macro nicht verwendet wird ist zumindest --build=%{_host} --host=$RPM_ARCH-linux anzugeben

Einige Pfade sind nicht wie gewohnt. Dies führt bei nicht selbst erstellten specfiles oder shell aufrufen in makefiles zu Problemen.

RPM build

Es muss sichergestellt werden, dass richtige rpmbuild zu verwenden. Also nicht das von Redhat installierte, sondern dass eldk eigene. Wenn die Umgebungsvariablen richtig initialisiert sind, so liegt das eldk rpmbuild im suchpfad vor redhat.

$CROSS_COMPILE muss gesetzt sein, damit die richtigen Linker genutzt werden

$ARCH sorgt dafür, dass die richtige target architektur erzeugt wird.

[user@host]$ which rpmbuild
$ELDK/usr/bin/rpmbuild
[user@host]$ rpmbuild -bb usr/src/denx/SPECS/foobar.spec
...

sollte das RPM root rechte benötigen, kann der build mit fakeroot durchgeführt werden. Die fakeroot installation hat kleinere Probleme mit dem crosscompile da sie selbst für 64bit systeme ist, der crosscompiler aber ein 32bit programm und die target ein ppc... Fehlermeldungen zu
ERROR: ld.so: object 'libfakeroot-tcp.so' from LD_PRELOAD cannot be preloaded: ignored.
sind zu ignorieren.

compilierte RPMs landen unter usr/src/denx/RPMS

RPM install

wenn das richtige rpm aufgerufen wird können die Pakete wie gewohnt installiert werden
[user@host]$ which rpm
$ELDK/bin/rpm
[user@host]$ rpm -Uvh usr/src/denx/RPMS/ppc/foobar-ppc-0.42.rpm

-- ChristophHandel - 23 Oct 2009
Topic revision: r2 - 30 Oct 2009, LudwigHechler
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback