Kernel cross kompilácia

Kernel cross kompilácia
« kdy: 23. 06. 2012, 18:01:40 »
zdravim,

snazim sa na mojom desktope debian x86_64 skompilovat kernel pre jeden stary notebook s Pentiom MMX (stylom pokus omyl + google)

stiahol som kernel source, spravil si .config ale teraz som sa zadrhol (uz dobre 2 hodinky) na uprave makefile kde zadavam pozadovanu architekturu (ktora je samozrejme i386)

neviem co mam dat do CROSS_COMPILE ..ak som tomu dobre porozumel, potrebujem 32bit gcc toolchain..len netusim kde ho mam zohnat (alebo ho uz mam?) a nasledne co tam mam zadat za parameter

dik


Re:Kernel cross kompilácia
« Odpověď #1 kdy: 23. 06. 2012, 18:24:31 »
Na gentoo-x86_64 som si pripravoval inštaláciu pre gentoo-x86. Keď som sa chrootol do pripravovaného systému cez linux32, skompiloval som normálne funkčný kernel aj systém.
Kód: [Vybrat]
linux32 chroot /mnt/gentoo /bin/bashAsi by som skúsil
Kód: [Vybrat]
linux32 make -j7

Re:Kernel cross kompilácia
« Odpověď #2 kdy: 23. 06. 2012, 19:39:00 »

Re:Kernel cross kompilácia
« Odpověď #3 kdy: 23. 06. 2012, 21:18:40 »
jj ten clanok som pozeral, ale necital som komenty, dik..

ale aj ked som urobil vsetko ako pisal (spravil som z toho skript a opravil chyby) stale rovnaky problem ako predtym

Kód: [Vybrat]
$ make ARCH=i386 CROSS_COMPILE=i686-linux-gnu-
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 25: i686-linux-gnu-gcc: príkaz nenájdený
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 26: i686-linux-gnu-gcc: príkaz nenájdený
make: i686-linux-gnu-gcc: Command not found
make[1]: Nothing to be done for `all'.
make[1]: Nothing to be done for `relocs'.
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      kernel/bounds.s
/bin/sh: 1: i686-linux-gnu-gcc: not found
make[1]: *** [kernel/bounds.s] Error 127
make: *** [prepare0] Error 2

Re:Kernel cross kompilácia
« Odpověď #4 kdy: 23. 06. 2012, 21:21:13 »
**** CROSS_COMPILE=i486 samozrejme..len uz skusam hocico zo zufalstva (7 hodin to robim)


Re:Kernel cross kompilácia
« Odpověď #5 kdy: 23. 06. 2012, 21:26:02 »
Mně přijdou v tom postu zásadní dvě věci:

Citace
If you have 32-bit chroot environment with a compiler, you can just compile the 32-bit kernel there in the usual fashion. [...] But if you're on x86_64, you can install the multilib version of gcc that adds support for building 32-bit binaries with a simple "-m32" option.

Citace
And that command works despite me having neither real nor "fake" i686-pc-linux-gnu- cross-toolchain installed. Experimenting further reveals that all that is needed is:
make ARCH=i386 <target>


Re:Kernel cross kompilácia
« Odpověď #6 kdy: 23. 06. 2012, 21:42:43 »
ten multilib vyskusam

a spustit iba "make ARCH=i386" som robil, ale bol tam nejaky problem s nasledovnym vytvorenim balikov..niekde na fore som pozeral tu chybu a hned prvy post "you've just did "make arch=i386" didn't you.."

Re:Kernel cross kompilácia
« Odpověď #7 kdy: 24. 06. 2012, 12:24:33 »
ja blbec som si nevsimol ze ten skript vola "gcc -m32" ktory nemohol zavolat lebo som nemal nainstalovany multilib (blbec) ..potom napisem jak to dopadlo

Re:Kernel cross kompilácia
« Odpověď #8 kdy: 24. 06. 2012, 14:38:06 »
tak, skompiloval som to uspesne (potom sem hodim komplet postup + skripty), teraz staci vytvorit baliky, co sa mi nedari

Re:Kernel cross kompilácia
« Odpověď #9 kdy: 24. 06. 2012, 16:41:43 »
no..vytvoril som si "fake" x86 toolchain pomocou takehoto skriptu
Kód: [Vybrat]
echo "#! /bin/sh" >> i486-linux-gnu-gcc
echo "exec gcc -m32 ""$@"" >> i486-linux-gnu-gcc
chmod +x /home/qwerty/bin/i486-linux-gnu-gcc
for i in ar ld nm objcopy strip; do
ln -s `which $i` /home/qwerty/bin/i486-linux-gnu-$i
done

ked dam kernel kompilovat pomocou
Kód: [Vybrat]
make ARCH=i386 CROSS_COMPILE=i486-linux-gnu- -j8tak sa to pekne skompiluje, lenze ked pouzijem toto, aby mi rovno aj vytvorilo .deb baliky ktore nasledne hodim na notebook, tak dostanem nasledovnu chybu
Kód: [Vybrat]
sudo make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers --arch=i386 --subarch=X86tak dostanem takuto chybu
Kód: [Vybrat]
====== making target debian/stamp/conf/kernel-conf [new prereqs: ]======
make EXTRAVERSION=-custom  CROSS_COMPILE=i486-linux-gnu- ARCH=i386 \
                    oldconfig;
make[2]: Entering directory `/media/DATA/Others/linux-3.4.3'
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#
make[2]: Leaving directory `/media/DATA/Others/linux-3.4.3'
make EXTRAVERSION=-custom  CROSS_COMPILE=i486-linux-gnu- ARCH=i386 prepare
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 25: i486-linux-gnu-gcc: príkaz nenájdený
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 26: i486-linux-gnu-gcc: príkaz nenájdený
make[2]: i486-linux-gnu-gcc: Command not found
make[2]: Entering directory `/media/DATA/Others/linux-3.4.3'
scripts/kconfig/conf --silentoldconfig Kconfig
make[2]: Leaving directory `/media/DATA/Others/linux-3.4.3'
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 25: i486-linux-gnu-gcc: príkaz nenájdený
/media/DATA/Others/linux-3.4.3/scripts/gcc-version.sh: riadok 26: i486-linux-gnu-gcc: príkaz nenájdený
make[2]: i486-linux-gnu-gcc: Command not found
make[2]: Entering directory `/media/DATA/Others/linux-3.4.3'
make[3]: Nothing to be done for `all'.
make[3]: Nothing to be done for `relocs'.
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CC      kernel/bounds.s
/bin/sh: 1: i486-linux-gnu-gcc: not found
make[3]: *** [kernel/bounds.s] Error 127
make[2]: *** [prepare0] Error 2
make[2]: Leaving directory `/media/DATA/Others/linux-3.4.3'
make[1]: *** [debian/stamp/conf/kernel-conf] Error 2
make[1]: Leaving directory `/media/DATA/Others/linux-3.4.3'
make: *** [debian/stamp/conf/minimal_debian] Error 2
Failed to create a ./debian directory:  at /usr/bin/make-kpkg line 984.

a uz tu som dobre 2 hodiny..

Re:Kernel cross kompilácia
« Odpověď #10 kdy: 24. 06. 2012, 16:51:08 »
Na první pohled bych řekl, že problém je v tom, že i486-linux-gnu-gcc máš v /home/qwerty/bin, ale vytváření balíčku spouštíš pod sudo, pod kterým asi tenhle adresář nebude v PATH. Zkus to překopírovat do /usr/local/bin nebo udělat "sudo su -" a tenhle adresář si do PATH přidat růčo.

Lol Phirae

Re:Kernel cross kompilácia
« Odpověď #11 kdy: 24. 06. 2012, 17:22:07 »
OMG. Když už pominu existenci gcc-multilib, tak je zde ještě multiarch, že...

http://wiki.debian.org/Multiarch/HOWTO

Trident

Re:Kernel cross kompilácia
« Odpověď #12 kdy: 24. 06. 2012, 21:16:12 »
**** CROSS_COMPILE=i486 samozrejme..len uz skusam hocico zo zufalstva (7 hodin to robim)
Neni nahodou pentium 586? A neni nahodou to Pentium s MMX, coz bude nejake Pentium Pro a lepsi nahodou 686?
Mezi 486 a 586 je dost podstatny rozdil v razeni instrukci kvuli architekture co si vzpominam z mych detskych/pubertalnich let.

kei.101

Re:Kernel cross kompilácia
« Odpověď #13 kdy: 26. 06. 2012, 13:31:43 »
Tohle řeším instalací celého systému do virtualbox. Navíc je možné dělat snapshoty a na cílový stroj pak nakopírovat hotový systém.