Kernel 2.4.2 op RedHat Linux 5.2

Pagina: 1
Acties:

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Hallo,

Ik draai RedHat Linux 5.2 op een bepaalde machine en ik kan Linux daar niet opnieuw op installeren omdat ik de downtime van die machine zoveel mogelijk wil beperken. Ik wil echter wel kernel 2.4.2 op die machine installeren. Ik heb alle benodigde upgrades al geinstalleerd:

o Gnu C 2.91.66
o Gnu make 3.77
o binutils 2.9.1.0.25
o util-linux 2.10o
o modutils 2.4.2
o e2fsprogs 1.19

Toch krijg ik op een gegeven moment tijdens make bzImage de volgende foutmelding:

gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -02
-fomit-frame-pointer -fno-strict-aliasing -pipe -march=i486 -c -o init/main.o
init/main.c
gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -02
fomit-frame-pointer -fno-strict-aliasing -pipe -march=i486
-DUTS_MACHINE='"i386"' -c -o init/version.o init/version.c
cpp: /usr/src/linux/include/linux/compile.h: Input/output error
init/version.c:20: `UTS_VERSION' undeclared here (not in a function)
init/version.c:20: initializer element for `system_utsname.version' is not
constant
init/version.c:25: parse error before `LINUX_COMPILE_BY'
make: *** [init/version.o] Error 1

Weet iemand hiervan de exacte oorzaak?

  • wouzer
  • Registratie: Maart 2000
  • Niet online
Dont fix what aint broken.

  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

just a thought: libc6 ?

Het zal wel niet, maar het zou maar wel.


  • NefeliM
  • Registratie: Oktober 1999
  • Laatst online: 06-09-2025
Ik wou gisteren ook mijn kernel updaten
naar de 2.4.2 kernel, maar ik kreeg exact dezelfde foutmelding als hier boven.

maar van kernel's compileren heb ik nog niet zoveel kaas gegeten dus wie kan me helpen ?

bedankt !

Verwijderd

als ik me niet vergis ston UTS_VERSION voor het kernel-versie nummer.

[edit:]
Okee ik heb het nog ff nagezocht. UTS_VERSION staat inderdaad voor de kernel-versie.
Tik eens het volgende in (aangenomen dat de kernel-source in /usr/src/linux staat)
code:
1
gcc -E -dM -I/usr/src/linux/include /usr/src/linux/include/linux/version.h

Dit moet een regeltje aangeven waarin dus UTS_VERSION voorkomt, deze moet gelijk zijn aan het versie-nummer van de te installeren kernel. Mocht ie dit niet doen, dan zou ik gcc maar eens updaten naar versie 2.95.2.1 of 2.95.3 (je kunt natuurlijk ook kgcc gebruiken).
[/edit]

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Als ik bovenstaand commando in type, krijg ik dit op het scherm te zien:
#define __linux__ 1
#define linux 1
#define __i386__ 1
#define __tune_i386__ 1
#define __i386 1
#define __GNUC_MINOR 91
#define KERNEL_VERSION( a, b, c) (((a) << 16) + ((b) << 8) + (c))
#define i386 1
#define __unix 1
#define UTS_RELEASE "2.4.2"
#define __unix__ 1
#define __GNUC__ 2
#define __linux 1
#define __ELF__ 1
#define LINUX_VERSION_CODE 132098
#define unix 1

Oh ja, en op die machine draait egcs-1.1.2 met gcc version egcs-2.91.66. Op een andere Slackware-doos draait precies dezelfde combinatie en daar gaat het compilen van kernel-2.4.2 goed.

Verwijderd

Oeps dat was de verkeerde UTS |:(
Je was natuurlijk op zoek naar UTS_VERSION en niet UTS_RELEASE. Die laatste methode die ik je gaf was om achter UTS_RELEASE te komen|:(

Ik gok dat jouw echo-commando niet de -n switch toe laat welke de trailing newline niet weergeeft.
Gevolg zal dan ook waarschijnlijk zijn dat in het bestand /usr/src/linux/include/linux/compile.h bij jouw bovenaan een regel staat die er als volgt uit ziet:
code:
1
-n #define UTS_VERSION

terwijl daar hetvolgende behoort te staan:
code:
1
#define UTS_VERSION "#1 Wed Mar 14 00:19:20 GMT 2001"

Een datum dus die bij jouw anders kan en zal zijn waarschijnlijk.

De oplossing:?
Nou ja ik zou er zo 2 kunnen bedenken, de 2e zou ik sowieso als eerste proberen.

1) Installeer een nieuwe shell (ik geloof dat het echo commando vaak onderdeel is van de shell en niet echt een losstaand programma (hierin kan ik best wel eens ongelijk hebben)
2) Verander die regel in bovengenoemde file, nar de huidige datum, verwijder die "-n"ervoor, vervolgens gewoon verdergaan met compileren waar ie gebleven was.
Dus gewoon weer intikken "make bzImage" en dan maar hopen dat ie het doet:P

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Wat betekent deze foutmelding:
<command line>: warning: "cpu" re-asserted
<command line>: warning: "machine" re-asserted

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Wat betekent onderstaande foutmelding?

<command line>: warning: "cpu" re-asserted
<command line>: warning: "machine" re-asserted

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Oh, twee keer gepost.
/usr/src/linux/include/linux/compile.h klopt verder gewoon helemaal. Er staat helemaa geen -n in.

Verwijderd

Ten eerste: re-asserted betekent dat de variable opnieuw geinitialiseerd wordt (beter gezegd een andere waarde krijgt, aangezien hij al geinitialiseerd was). Dit is dus een beetje heel erg vreemd!

Ik zou zeggen maak de code maar eens helemaal schoon, en doe alles maar eens opnieuw:
code:
1
2
cd /usr/src/linux
make mrproper

Verder zou ik voor het compileren de waardes van de soort cpu en soort machine maar exporteren. Achter -march en -mcpu hoort het processor-type te staan dat je hebt.
Heb je een pentium dan is het i586, heb je een pentium2,pentium3 dan is het i686, heb je een 486 dan is het i486 etc.
Ik zal hier het voorbeeld geven voor een pentium computer
code:
1
2
3
4
unset CFLAGS
unset CXXFLAGS
export CFLAGS="-Wall -Wstrict-prototypes -O2 -march=i586 -mcpu=i586 -fomit-frame-pointer"
export CXXFLAGS = $CFLAGS

Als je nu "echo $CFLAGS" of "echo $CXXFLAGS" intikt moet je bovenstaande ingevulde waardes terugkrijgen.

Okee nu gaan we verder Kies een van onderstaande opties uit om de kerenel te configureren.
code:
1
"make menuconfig"  of  "make xconfig"  of   "make config"

Ik vraag me een beetje af of je wel daadwerkelijk egcs gebruikt om te compileren!
tik eens hetvolgende in:
code:
1
2
gcc -v
kgcc -v

Als die eerste een antwoord terug geeft, dat niet overeenkomt met egcs (kgcc) dan moet je 2 regels veranderen in de Makefile.
In /usr/src/linux/Makefile staat ergens redelijk bovenaan een regel:
code:
1
2
3
4
HOSTCC = gcc
..
.
CC = $(CROSS_COMPILE)gcc

Verander dat maar eens in:
code:
1
2
3
4
HOSTCC = kgcc
..
.
CC = $(CROSS_COMPILE)kgcc

Die laatste zou niet hoeven, aangezien je die alleen nodig hebt voor een cross-compiler, die je niet hebt, maar goed we kunnen het wel veranderen om helemaal zeker te zijn :)

okee we gaan weer verder:
code:
1
2
3
4
5
6
7
8
9
make dep
make clean
make bzImage
(make modules
make modules_install)
cp System.map /boot/System.map-2.4.2
mv /boot/System.map /boot/System.map-old
ln -s /boot/System.map-2.4.2 /boot/System.map
cp arch/i386/boot/bzImage /boot/bzImage-2.4.2

Vervolgens /etc/lilo.conf aanpassen aan de nieuwe kernel (bzImage-2.4.2)
en als laatste nog "lilo -v" draaien.

Nu moet ie het toch eigenlijk echt wel doen;)

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Die re-asserted foutmelding heb ik niet meer, die ander heb ik nog.

Dat ik die re-asserted foutmelding kreeg kwam waarschijnlijk omdat best wel veel fucked up was. Per ongeluk $^%&*()*&(*%^&*(IO glibc-2.2 geinstalleerd en non-compatible rpm (bijna rpm-database kwijt) enz. Maar nu is alles weer goed, behalve die ene foutmelding. Die ga ik nu oplossen met behulp van bovenstaande post.

Verwijderd

je hebt toch niet glibc2.2 erover heen gegooid he?

Dit gaat namelijk gegarandeerd voor foutmeldingen zorgen

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Per ongeluk had ik dat eerst dus wel even gedaan. Toen kreeg ik dus die foutmelding van die re-asserted. Maar glibc-2.2 is er nu weer van het systeem af en nu krijg ik dus weer dat UTS-gezeik.

Verwijderd

Tja je zou gewoon heel lomp hetvolgende kunnen proberen:
code:
1
export UTS_VERSION="#1 Wed Mar 14 00:19:20 GMT 2001"

Overigens blijft het verhaal van mij over gcc en kgcc wat hierboven staat gewoon geldig, dus dat zou ik eerst eens controleren

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Dit heb ik nu gedaan:
- Bash2 geinstalleerd.
- In /usr/src/linux/include/linux/compile.h staat die ene regel goed.
- make mrproper gedaan en daarna weer een make menuconfig in /usr/src/linux
- gcc is gewoon geinstalleerd (komt overeen met egcs-1.1.2 - krijg ik te zien met een gcc -v)
- kgcc is niet geinstalleerd.
- In /usr/src/linux/Makefile staat nu:
code:
1
2
3
HOSTCC = gcc
HOSTCFLAGS = -Wall -Wstrict-prototypes -o2 -fomit-frame-pointer
CROSS_COMPILE =

- De waardes van de soort cpu en soort machine exporteren heb ik ook gedaan...

Is dit een kernel-bug ofzo?

Verwijderd

Doet ie het zo nog niet?

Zo nee, dan zou ik het zo ook niet meer durven zeggen!
Het lijkt me sterk dat het een kernel-bug is, maar je weet maar nooit.
Je zou natuurlijk op de kernel-mailinglijst je vraag kunnen posten.

Verwijderd

Nog een kleine opmerking.

Je hebt toch nog wel genoeg vrije schijfruimte he? Dit wil ook nog wel eens problemen geven. Normaal gesproken zou er dan wel een iets duidelijkere foutmelding moeten komen, maar je weet maar nooit

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 20-08 07:10
Op woensdag 21 maart 2001 20:59 schreef Theodoor het volgende:
<knip>
Oh ja, en op die machine draait egcs-1.1.2 met gcc version egcs-2.91.66. Op een andere Slackware-doos draait precies dezelfde combinatie en daar gaat het compilen van kernel-2.4.2 goed.
dan kun je toch gewoon daar een kernel op compilen met de opties die je wilt, die kopieren naar die bak waarop het compileren niet wil en dan testen? of zie ik dat nou verkeerd...

ach...in een volgend leven lach je er om!


  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Ik compileer daarom de kernel over een nfs-verbinding :) Ik heb /usr/src/linux gemount op /usr/src/linux op een andere machine.

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Volgens mij ontbreekt er gewoon /usr/bin/cpp.

Ik schaam me dat ik dat niet eerder ontdekt heb.

  • Theodoor
  • Registratie: Juni 1999
  • Laatst online: 17-03 10:50
Het probleem is nu dat ik geen enkele rpm kan vinden met een binary cpp (/usr/bin/cpp)(behalve die van RedHat 7 - maar die is %^&*(%^&*(@#)
Waar kan ik die vinden?
Pagina: 1