Compiler des modules pour d'autres machines - Installation - Linux et OS Alternatifs
MarshPosté le 14-02-2003 à 13:48:46
J'ai de petits problemes (de comprehension surtout) en ce qui concerne la compilation de modules.
Jusqu'à maintenant j'avais un SME5.5 mis à jour avec un noyau 2.4.18-5 à l'aide de rpm redhat. Pour pouvoir compiler des sources pour ce serveur sans lui installer les package de dev, je me suis monté une autre machine à base de redhat 7.1 mise à jour avec la meme version du kernel (meme rpm redhat). J'ai donc compilé quelques modules (drivers bewan, lcd-mod) qui fonctionnaient tres bien sur mon SME5.5. Hier j'ai installé un SME5.6 qui a le meme noyau, donc à priori compatible avec mes modules, je les recopie donc là où il faut, je fais un depmod -ae et voilà ce que j'obtient :
J'essaye tout de meme de charger ces modules : les drivers unicorn passent, le driver lcd refuse : Using /lib/modules/2.4.18-5/misc/lcd.o /lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol remove_proc_entry_R17568295 /lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol register_chrdev_R5c582fbc /lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol create_proc_entry_Rbfe731f4
Je ne comprend pas pourquoi. Apparement, selon le resultat du depmod, il y aurait 2 types de unresolved symbol : avec ou sans code(adresse, numéro de symbol, ???) et l'un serait critique, l'autre pas.
Les modules qui passent sont compilés avec ces options :
L'architecture de l'environement de compil est elle importante pour les modules ? Est il possible de compiler des modules qui fonctionneront à coup sûr sur n'importe quel Linux ayant le meme kernel (meme version du rpm redhat et au moins sans tenir compte du SMP) ?
Marsh Posté le 14-02-2003 à 13:48:46
J'ai de petits problemes (de comprehension surtout) en ce qui concerne la compilation de modules.
Jusqu'à maintenant j'avais un SME5.5 mis à jour avec un noyau 2.4.18-5 à l'aide de rpm redhat.
Pour pouvoir compiler des sources pour ce serveur sans lui installer les package de dev, je me suis monté une autre machine à base de redhat 7.1 mise à jour avec la meme version du kernel (meme rpm redhat).
J'ai donc compilé quelques modules (drivers bewan, lcd-mod) qui
fonctionnaient tres bien sur mon SME5.5.
Hier j'ai installé un SME5.6 qui a le meme noyau, donc à priori
compatible avec mes modules, je les recopie donc là où il faut, je fais un depmod -ae et voilà ce que j'obtient :
depmod: *** Unresolved symbols in /lib/modules/2.4.18-5/kernel/drivers/atm/unicorn_atm.o
depmod: __wake_up
depmod: __kfree_skb
depmod: alloc_skb
depmod: __generic_copy_from_user
depmod: kmalloc
depmod: boot_cpu_data
depmod: cpu_raise_softirq
depmod: get_random_bytes
depmod: del_timer
depmod: atm_charge
depmod: kfree
depmod: ___pskb_trim
depmod: __verify_write
depmod: skb_over_panic
depmod: do_BUG
depmod: sprintf
depmod: jiffies
depmod: softnet_data
depmod: printk
depmod: atm_dev_register
depmod: add_timer
depmod: irq_stat
depmod: shutdown_atm_dev
depmod: __generic_copy_to_user
depmod: *** Unresolved symbols in /lib/modules/2.4.18-5/kernel/drivers/atm/unicorn_pci.o
depmod: pci_write_config_byte
depmod: send_sig
depmod: flush_signals
depmod: schedule_timeout
depmod: __wake_up
depmod: vsprintf
depmod: kmalloc
depmod: pci_free_consistent
depmod: pci_enable_device
depmod: pci_disable_device
depmod: pcibios_present
depmod: pidhash
depmod: free_irq
depmod: iounmap
depmod: pci_alloc_consistent
depmod: interruptible_sleep_on_timeout
depmod: __ioremap
depmod: del_timer
depmod: mod_timer
depmod: pci_release_regions
depmod: kfree
depmod: request_irq
depmod: exit_files
depmod: pci_set_master
depmod: xtime
depmod: pci_find_device
depmod: do_BUG
depmod: sprintf
depmod: daemonize
depmod: jiffies
depmod: printk
depmod: add_timer
depmod: complete_and_exit
depmod: kernel_thread
depmod: __const_udelay
depmod: pci_request_regions
depmod: *** Unresolved symbols in /lib/modules/2.4.18-5/misc/lcd.o
depmod: remove_proc_entry_R17568295
depmod: register_chrdev_R5c582fbc
depmod: create_proc_entry_Rbfe731f4
J'essaye tout de meme de charger ces modules : les drivers unicorn passent, le driver lcd refuse :
Using /lib/modules/2.4.18-5/misc/lcd.o
/lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol
remove_proc_entry_R17568295
/lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol
register_chrdev_R5c582fbc
/lib/modules/2.4.18-5/misc/lcd.o: unresolved symbol
create_proc_entry_Rbfe731f4
Je ne comprend pas pourquoi. Apparement, selon le resultat du depmod, il y aurait 2 types de unresolved symbol : avec ou sans code(adresse, numéro de symbol, ???) et l'un serait critique, l'autre pas.
Les modules qui passent sont compilés avec ces options :
CFLAGS := -O2 -fno-exceptions -fno-gnu-linker -Wstrict-prototypes -fomit- frame-pointer -fno-strict-aliasing -pipe -fno-stren
gth-reduce -Wall -DMODULE -D__KERNEL__ -DLINUX -DDEBUG=1
INCLUDES := -I$(HPATH) -I../include/ -I../ MODFLAGS = -DMODULE
Ceux qui ne passent pas avec celles ci :
CFLAGS= -Wall -D__KERNEL__ -I$(KERNEL_SRC_DIR)/include \
-O2 -fomit-frame-pointer -pipe \
-ffixed-8 -DMODULE -DMODVERSIONS -finline-functions \
-include $(KERNEL_SRC_DIR)/include/linux/modversions.h
L'architecture de l'environement de compil est elle importante pour les modules ?
Est il possible de compiler des modules qui fonctionneront à coup sûr sur n'importe quel Linux ayant le meme kernel (meme version du rpm redhat et au moins sans tenir compte du SMP) ?
Merci d'avance