Fórum Root.cz
Hlavní témata => Software => Téma založeno: Igor Beňko 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
-
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.
linux32 chroot /mnt/gentoo /bin/bash
Asi by som skúsil linux32 make -j7
-
Co je špatného na druhém odkazu, který vyhodí Google?
http://tinkering-is-fun.blogspot.cz/2009/12/compiling-linux-kernel-for-x86-on-x8664.html
-
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
$ 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
-
**** CROSS_COMPILE=i486 samozrejme..len uz skusam hocico zo zufalstva (7 hodin to robim)
-
Mně přijdou v tom postu zásadní dvě věci:
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.
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>
-
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.."
-
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
-
tak, skompiloval som to uspesne (potom sem hodim komplet postup + skripty), teraz staci vytvorit baliky, co sa mi nedari
-
no..vytvoril som si "fake" x86 toolchain pomocou takehoto skriptu
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
make ARCH=i386 CROSS_COMPILE=i486-linux-gnu- -j8
tak sa to pekne skompiluje, lenze ked pouzijem toto, aby mi rovno aj vytvorilo .deb baliky ktore nasledne hodim na notebook, tak dostanem nasledovnu chybu
sudo make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers --arch=i386 --subarch=X86
tak dostanem takuto chybu
====== 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..
-
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.
-
OMG. Když už pominu existenci gcc-multilib, tak je zde ještě multiarch, že...
http://wiki.debian.org/Multiarch/HOWTO
-
**** 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.
-
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.