Re: System.map and unresolved symbol

2001-08-21 Par sujet Thierry Laronde
On Tue, Aug 21, 2001 at 12:02:20PM +0100, [EMAIL PROTECTED] wrote:
 Bonjour, 

Salut,
 
 J essaye desesperement de compiler IPv6 et Mobile IPv6 en module.
 Mais une fois le module compile/installe/machine reboote, j arrive pas a l
 inserer correctement, j ai une trentaine de ligne de ce genre
 /lib/modules/2.4.7/kernel/net/ipv6/ipv6.o: unresolved symbol tcp_close
 J ai fait par example un:
 largo:/# ksyms -a | grep tcp_close
 c01b1444  tcp_close_R__ver_tcp_close
 
 Hum je sais pas trop si ca a un rapport avec mon probleme.
 J ai aussi remarque que quand je fait un ps aux, j ai toujours ces 2
 warnings.
 
 largo:/# ps aux
 {tcp_v4_syn_recv_sock} {tcp_v4_syn_recv_sock_R__ver_tcp_v4_syn_recv_sock}
 Warning: /usr/src/linux/System.map does not match kernel data.
 {tcp_v4_syn_recv_sock} {tcp_v4_syn_recv_sock_R__ver_tcp_v4_syn_recv_sock}
 Warning: /System.map does not match kernel data.
 
 La date et heure du fichier /usr/src/linux/System.map et /System.map
 correspond a la meme que celle d un 'uname -a'.
 J ai essaye de chercher de la documentation sur l interet du fichier
 System.map, mais j ai pas trouver grand chose.

Il est utilisé pour faire correspondre les adresses statiques de fonctions
ayant provoqué un problème avec un nom un peu plus parlant. C'est une table
de symboles. Quelques infos dans la page de manuel de `klogd'.

Pour ton problème, as-tu correctement « nettoyé » les sources du noyau avant
de relancer la compilation ? Il y a apparemment un problème entre les
fonctions incluses dans le noyau et ce que tu veux passer en module. Je
pense qu'il faut que le noyau soit prêt à accepter les modules, et si tu
n'as pas changé le noyau (compilé avec les bonnes options avant de compiler
les modules), c'est peut-être la source du problème.

Essaie alors une compil intégrale.

A+
-- 
Thierry LARONDE, Centre de Ressources Informatiques, Archamps - France
http://www.cri74.org/



Re: System.map and unresolved symbol

2001-08-21 Par sujet Jean Charles Delepine
[EMAIL PROTECTED] écrivait (wrote) :

 Bonjour, 
 
 J essaye desesperement de compiler IPv6 et Mobile IPv6 en module.

En t'y prenant comment ?
Le mieux est de recompiler un noyau en le configurant correctement.

 Mais une fois le module compile/installe/machine reboote, j arrive pas a l
 inserer correctement, j ai une trentaine de ligne de ce genre
 /lib/modules/2.4.7/kernel/net/ipv6/ipv6.o: unresolved symbol tcp_close

À priori le module ne correspond pas au noyau utilisé.

 largo:/# ps aux
 {tcp_v4_syn_recv_sock} {tcp_v4_syn_recv_sock_R__ver_tcp_v4_syn_recv_sock}
 Warning: /usr/src/linux/System.map does not match kernel data.
 {tcp_v4_syn_recv_sock} {tcp_v4_syn_recv_sock_R__ver_tcp_v4_syn_recv_sock}
 Warning: /System.map does not match kernel data.

Comme indiqué clairement par ps, le System.map utilisé ne correspond pas
au noyau.

 La date et heure du fichier /usr/src/linux/System.map et /System.map
 correspond a la meme que celle d un 'uname -a'.
 J ai essaye de chercher de la documentation sur l interet du fichier
 System.map, mais j ai pas trouver grand chose.
 Est ce que qqun pe me m expliquer/envoyer un liens qui explique a quoi il
 sert ?

System.map est utilisé par ps, lsof, fuser et quelques autres pour pouvoir
donner les noms des appels système plutôt que leur adresse dans le noyau.

Ainsi :
$ ps -l
  F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
000 S   501 31190 31189  0  69   0 -   763 wait4  pts/500:00:01 bash
000 R   501 16626 31190  0  75   0 -   825 -  pts/500:00:00 ps
# mv /boot/System.map-2.4.8 /boot/System.map-2.4.8.old
$ ps -l
  F S   UID   PID  PPID  C PRI  NI ADDR SZ  WCHAN TTY  TIME CMD
000 S   501 31190 31189  0  69   0 -   763 112f41 pts/500:00:01 bash
000 R   501 16800 31190  0  78   0 -   680  - pts/500:00:00 ps

(Voir la différence pour le champ WCHAN)

 Comment je peux faire pour inserer mon module correctement sans avoir des
 unresolved symbol ?

Essayer déjà après un 'depmod -a' et avec un 'modprobe ipv6'.

Si ça ne marche pas c'est que les modules ne correspondent vraiment pas au
noyau, en recompiler un correctement. (lire /usr/src/linux/README, le
KERNEL-Howto et le MODULE-Howto).

Ici, sur un 2.4.8, modprobe ipv6 marche parfaitement.

Les HOWTOS peuvent être trouvés sur http://www.freenix.org/.

  Jean Charles
-- 
Jean Charles Delépine - Équipe Réseaux Télécoms - Université de Picardie