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