[resolu] erreur compilation noyau 2.6.21

J’'essaie de compiler un noyau Real Time, pour un ordi musique, à partir des souces kernel.org du noyau 2.6.21 en utilisant un patch RT qui s’installe bien. J’utilise cette commande : make-kpkg --revision 1 --initrd kernel_image kernel_headers modules_image. Mais à la fin de la compilation, j’obtiens l’erreur suivante, dans le terminal :

[quote] CC M drivers/char/dtlk.o
CC M drivers/char/n_r3964.o
CC M drivers/char/applicom.o
CC M drivers/char/sonypi.o
CC M drivers/char/rtc.o
drivers/char/rtc.c:89:1: error: unterminated #ifdef
make3: *** drivers/char/rtc.o Erreur 1
make2: *** drivers/char Erreur 2
make1: *** drivers Erreur 2
make1: quittant le répertoire « /home/bpier/kernel-2.6.21/usr/src/linux-2.6.21-rt7 »
make: *** debian/stamp-build-kernel Erreur 2
bpier@debian:~/kernel-2.6.21/usr/src/linux jeu mai 24 15:26:44 [/quote]

Pour info, dans le dossier dédié à la compilation, figure un folder modules avec, à l’intérieur, un dossier fglrx (pour ma carte graphique), un autre rt2500 (carte wifi MSI PC54G2). De plus, j’ai suivi à la lettre un tuto pour la config d’un noyau musique, à cette adresse : linuxmao.org/tikiwiki/tiki-i … oyau+2.6RT

Je suis sous etch.

Qui a déjà eu affaire à ces erreurs ? Merci

Une telle erreur, qu’on va dire fatale, doit être mentionnée dans la list-bug debian, et il se peut qu’il existe déjà un patch pour ce driver sur ce noyau à mon avis.

Merci usinagaz, je vais faire un tour sur la bug-list. Je te tiens au courant.

je pense qu’il y a un truc trés bizarre :

[quote]#include <asm/current.h>
#include <asm/uaccess.h>
#include <asm/system.h>

#if defined(i386)
#include <asm/hpet.h>
#endif

#ifdef sparc
#include <linux/pci.h>
#include <asm/ebus.h>
#ifdef sparc_v9
#include <asm/isa.h>
#endif
[/quote]
Alors que généralement on teste avec : #ifdef Quelquechose,
ici on voit écrit : #if defined(i386)
Ça n’est pas normal: un développeur C pourrait nous éclairer.

Sauvegarde ton fichier /usr/src/linux/drivers/char/rtc.c en le copiant ailleurs, édite le et modifie
#if defined(i386) par #ifdef i386 pour voir, retente la compile.

ps: j’en profite pour demander comment on peut tester la compilation d’un module C séparément, il suffit de lancer gcc lemodule.c ?

Bonjour,

Désolé de polluer le but original du post, mais j’ai moi aussi lancé une compilation du 2.6.21 (Bravo au passage au tuto de Ash), il me restait 800 Mo, je pensais que çà suffisai… mais çà ne suffisait pas … gros problème d’espace disque …
hors j’avais déjà fait du ménage avant …

ma question serait donc (puisque je doit je pense faire une croix sur ce noyau) où puis je nettoyer ce début de compil pour récupérer un peu d’espace de vie … en attendant un nouveau disque dur

Merci

Fyffe

Tu n’as surement pas besoin de 800 Mo free pour faire une compile.
Les sources du noyau customisé et déployées font chez moi 14 Mo.
Installes xdiskusage à lancer en root, et vois ce qui cloche.

@bpier:
Je n’ai pas coché ce module sur mon 2.6.21 mais il avait bien compilé sur un ancien 2.6.20, faudrait vérifier dans les sources du 2.6.20 si c’est écrit pareil …
De plus, je pense que si les deux syntaxes sont correctes (le contraire m’étonnerait finalement), et bien c’est un problème de version du gcc, est-ce que tu compile avec un 3.x ou le 4.1 ?

Chez moi aussi avant la compil …

j’ai trouvé 700 Mo de sources 2.6.21 dans root / .trash … tout simplement
Merci pour xdiskusage pour repérer ce “reste”

Il y a donc un truc qui cloche dans ma compilation … c con
Merci en tout cas !

Fyffe

Ok.

[quote=“fyffe”]Chez moi aussi avant la compil …[/quote]Tu es sûr ?
avant compil, les sources avoisinnent plutôt les 43-50 Mo non ?

tu as fait un make-kpkg clean avant de lancer la compil ?

:wink:

usinagaz a écrit :

[quote]Sauvegarde ton fichier /usr/src/linux/drivers/char/rtc.c en le copiant ailleurs, édite le et modifie
#if defined(i386) par #ifdef i386 pour voir, retente la compile. [/quote]

Je n’ai pas compilé dans /usr/src, mais dans un dossier créé dans ce but dans mon home (comme le préconise Linus Torswald). J’ai, depuis, nettoyé ce dossier pour retenter bientôt une autre compil sans RT, pour tester si l’erreur vient du noyau en lui-même ou des modules ajoutés par le patch RT.

Quant à gcc, j’utilise la version 4.1.2 20061115 :

[quote]% gcc --version
gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Copyright © 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.[/quote]

Peut-être faudra-t-il que j’utilise une version antérieure ? Dans ce cas comment le préciser dans les commandes de la compil. Y-a-t-il une option au make-kpkg ?

Enfin, je suis allé faire un tour sur la buglist debian, rien sur un éventuel bogue concernant rtc.o

scorpio81 a écrit :

Tu la poses à qui cette question ? Comme il y a désormais deux demandes d"aide sur le même post, ça se complique. Pour ma part, en tout cas, j’ai bien fait un make-kpkg clean avant de lancer la compil. Par ailleurs, pas mal ton site.

OK, peu importe où tu compiles, dans /usr/src ou dans ton home, tant que /usr/src/linux pointe bien vers les sources du noyau que tu tentes de compiler.
Soit tu essayes de compiler en modifiant la ligne comme je dis plus haut (le test if dans rtc.c), soit tu désactive ce module dans le menuconfig avant compilation.

Non le gcc c’est bon, c’est un des plus récents.

ps: quelqu’un qui fait du C devrait nous dire si cette ligne est correcte, ou si c’est une erreur d’inattention de l’auteur de rtc.c.

[quote=“bpier”]
scorpio81 a écrit :

Tu la poses à qui cette question ? Comme il y a désormais deux demandes d"aide sur le même post, ça se complique. Pour ma part, en tout cas, j’ai bien fait un make-kpkg clean avant de lancer la compil. Par ailleurs, pas mal ton site.[/quote]

je répondais a fyffe
:wink:

merci :wink:

[quote=“scorpio81”]tu as fait un make-kpkg clean avant de lancer la compil ?

:wink:[/quote]bah faut garder le .config, supprimmer l’arbo du noyau, et redéployer les sources, peut être ? quand c’est pourri…
Enfin je n’ai pas tout suivi :smiley:

J’ai récupéré le linux-source 2.6.21 du dépôt unstable, suivi toutes la procédure (de nouveau), j’ai, après le make menuconfig, fait un make-kpkg clean, mais ça a coincé au make modules_clean. La preuve :

[quote][bpier@debian:~/kernel-2.6.21/usr/src/linux] [ven mai 25 15:24:14]
% make-kpkg modules clean
exec debian/rules DEBIAN_REVISION=2.6.21-rt7-10.00.Custom modules clean
echo “The UTS Release version in include/linux/version.h”; echo " “” "; echo “does not match current version:”; echo " “2.6.21-rt7” “; echo “Please correct this.”; exit 2
The UTS Release version in include/linux/version.h
”"
does not match current version:
"2.6.21-rt7"
Please correct this.
make: *** [modules] Erreur 2
[bpier@debian:~/kernel-2.6.21/usr/src/linux] [ven mai 25 15:24:19]
%[/quote]

J’ai alors un peu bidouillé, créé un fichier version.h dans include/linux du dossier de compil. Mais rien n’y fait.

On se demandait justement si un make-kpkg clean supprimait le .cofig, je ne pense pas (mais peut-être qu’il écrase par le .config.old [s’il est présent], dans ce cas, tu fait un make-kpkg clean (et non modules clean) avant de faire ton menuconfig.
Tu as toujours le tar.bz2 des sources ?
bon, alors tu supprimes les sources du 2.6.21 déployées,
tu détarres à nouveau les sources,
tu vérifies tes liens (linux),
tu vas faire la modif de test dans rtc.c,
tu suis la procédure normale de compil du kernel: make-kpkg --initrd buildpackage --config menuconfig etc … (ou pour la config tu colles ton .config dans tes sources.)
Enfin moi je ferais comma ça si j’ai trop bidouillé avec les anciennes sources …

ps: verifies que tu as bien le rtc cochée dans la config ou lors du menuconfig …

Je me suis absenté. Je testerai tes suggestions dès que j’aurai un moment. Cela dit, comment dois-je m’y prendre pour faire la modif de test dans rtc.c ?

Ok, mais relis le post où je parle de modifier le if defined(…) :wink:

Re,
je laisse tomber ma requête pour simplifier la question initiale !
Bonne continuation

Fyffe

Fyffe, passe là sur un post qui lui sera dédié.
Usinagaz, je relis ton post.