Journal depmod, insmod et résolution de symboles

Posté par  (site web personnel) .
Étiquettes : aucune
0
6
mai
2004
J'ai un truc étrange :
- depmod me trouve des symboles non résolus sur un module (e1000, compilé à la main) dont printk, pci_register_device et une dizaine d'autres.
- insmod ne voit pas de pb et me charge bien le module, ensuite ca marche.

Quelqu'un à la moindre idée ?
  • # unresolved symbol

    Posté par  . Évalué à 2.

    Tu peux être plus verbeux ?

    Ce qui arrive souvent c'est que l'arbre Linux de compilation n'est pas configuré ou ne correspond à la configuration du noyau en cours.
    Sous fedora il faut utiliser /lib/modules/2.x/build/

    OU :
    aller dans /usr/src/linux-2.x
    virer "custom" de "EXTRAVERSION = -1.350custom" dans Makefile.
    Copier la configuration du noyau. Elle est dans /boot/config* et configs/kernel-2.x.config.
    $ cp config/kernel-2.x-i686.config .config

    $ make oldconfig
    $ make dep (2.4)

    Pour 2.6 je fais "make all" mais il y a peut-être mieux.

    $ Puis compiler les modules.
    • [^] # Re: unresolved symbol

      Posté par  (site web personnel) . Évalué à 1.

      Non la version est bonne (insmod ne fait pas d'erreur).

      [root@pf-amon root]# depmod -e /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o
      depmod: *** Unresolved symbols in /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o
      depmod: pci_set_power_state
      depmod: __netdev_watchdog_up
      depmod: pci_dev_driver
      depmod: eth_type_trans
      depmod: pci_clear_mwi
      depmod: schedule_timeout
      depmod: del_timer_sync
      depmod: __kfree_skb
      depmod: alloc_skb
      depmod: pci_register_driver
      depmod: __generic_copy_from_user
      depmod: __udelay
      depmod: kmalloc
      depmod: pci_free_consistent
      depmod: pci_enable_device
      depmod: pci_read_config_byte
      depmod: alloc_etherdev
      depmod: cpu_raise_softirq
      depmod: pci_restore_state
      depmod: free_irq
      depmod: unregister_netdev
      depmod: __out_of_line_bug
      depmod: iounmap
      depmod: pci_alloc_consistent
      depmod: __ioremap
      depmod: pci_read_config_word
      depmod: synchronize_irq
      depmod: register_netdev
      depmod: mod_timer
      depmod: pci_set_dma_mask
      depmod: pci_release_regions
      depmod: kfree
      depmod: unregister_reboot_notifier
      depmod: request_irq
      depmod: netif_rx
      depmod: pci_unregister_driver
      depmod: schedule_task
      depmod: skb_over_panic
      depmod: pci_set_master
      depmod: pci_find_device
      depmod: mem_map
      depmod: pci_enable_wake
      depmod: pci_write_config_word
      depmod: jiffies
      depmod: softnet_data
      depmod: printk
      depmod: irq_stat
      depmod: pci_save_state
      depmod: __const_udelay
      depmod: __generic_copy_to_user
      depmod: pci_request_regions
      depmod: pci_set_mwi
      depmod: register_reboot_notifier
      /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o:

      # module id=string
      # pci module vendor device subvendor subdevice class class_mask driver_data
      e1000 0x00008086 0x00001000 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001001 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001004 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001008 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001009 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000100c 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000100d 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000100e 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000100f 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001010 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001011 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001012 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001013 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001014 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001015 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001016 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001017 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001018 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001019 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000101d 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000101e 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001026 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001027 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001028 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001075 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001076 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001077 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001078 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x00001079 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000107a 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      e1000 0x00008086 0x0000107b 0xffffffff 0xffffffff 0x00000000 0x00000000 0x00000000
      # isapnp module cardvendor carddevice driver_data vendor function ...
      # usb module match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info
      # module pattern
      # ieee1394 module match_flags vendor_id model_id specifier_id version
      # module id
      • [^] # Re: unresolved symbol

        Posté par  . Évalué à 6.

        J'utilise pas Linux 2.4 actuellement.

        Selon mes souvenirs, depmod utilise /boot/System.map.

        Trouve le System.map qui correspond au noyau et fait par exemple :
        $ depmod -e -F /boot/System.map-2.4.19-40mdksecure ...
        • [^] # Re: unresolved symbol

          Posté par  (site web personnel) . Évalué à 1.

          \o/ merci ca marche
          • [^] # Re: unresolved symbol

            Posté par  . Évalué à 1.

            Sous Fedora /boot/System.map est un lien symbolique (ce lien symbolique n'est plus nécessaire avec Linux 2.6).
            Au boot, le lien est mise à jour pour pointer sur /boot/System.map-`uname -r` .
            Regardes ce que pointe /boot/System.map (s'il existe) ou ajoutes le.
        • [^] # Re: unresolved symbol

          Posté par  (site web personnel) . Évalué à 1.

          Par contre j'ai un peu de mal à voir pkoi il le prend pas tout seul :

          lrwxrwxrwx 1 root root 29 mai 6 09:53 System.map -> System.map-2.4.19-40mdksecure

          Et d'ailleurs ca marche aussi avec :
          depmod -e -F /boot/System.map /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o
          ne m'indique pas de symboles non résolus...
      • [^] # Re: unresolved symbol

        Posté par  . Évalué à 1.

        La question parait stupide mais "uname -r" te retourne "2.4.19-40mdksecure" ?
        • [^] # Re: unresolved symbol

          Posté par  (site web personnel) . Évalué à 1.

          oui
          • [^] # Re: unresolved symbol

            Posté par  . Évalué à 1.

            J'ai plus d'idée.
            Tu as fait un "depmod -a" après l'installation du module e1000 ?
            • [^] # Re: unresolved symbol

              Posté par  (site web personnel) . Évalué à 1.

              oui et justement il me sort qu'il y a des symboles non résolus :/
              • [^] # Re: unresolved symbol

                Posté par  . Évalué à 1.

                Ben : depmod -a -e -F /boot/System.map-`uname -r`  `uname -r`

                Si ça marche, et que depmod -a ne marche pas
                alors direction l'exorciste.
              • [^] # Re: unresolved symbol

                Posté par  . Évalué à 2.

                btw, regarde ce que donne modinfo.
                Par exemple sur un 2.6 :
                # modinfo /lib/modules/2.6.5-1.350/kernel/net/ipv4/ah4.ko
                license: GPL
                vermagic: 2.6.5-1.350 686 REGPARM 4KSTACKS gcc-3.3
                depends:
                [root@localhost root]# modinfo /lib/modules/2.6.5-1.350custom/kernel/net/ipv4/ah4.ko
                license: GPL
                vermagic: 2.6.5-1.350custom 686 4KSTACKS gcc-3.3
                depends:

                Compares aussi le modules e1000 avec un autre module dans le répertoire /lib/modules/2.4.19-40mdksecure
                • [^] # Re: unresolved symbol

                  Posté par  (site web personnel) . Évalué à 1.

                  Sur le 2.4 rien de très interessant (en particulier pas de version)

                  # modinfo /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o filename: /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e1000.o
                  description: "Intel(R) PRO/1000 Network Driver"
                  author: "Intel Corporation, <linux.nics@intel.com>"
                  license: "GPL"
                  parm: TxDescriptors int array (min = 1, max = 32), description "Number of transmit descriptors"
                  parm: RxDescriptors int array (min = 1, max = 32), description "Number of receive descriptors"
                  parm: Speed int array (min = 1, max = 32), description "Speed setting"
                  parm: Duplex int array (min = 1, max = 32), description "Duplex setting"
                  parm: AutoNeg int array (min = 1, max = 32), description "Advertised auto-negotiation setting"
                  parm: FlowControl int array (min = 1, max = 32), description "Flow Control setting"
                  parm: XsumRX int array (min = 1, max = 32), description "Disable or enable Receive Checksum offload"
                  parm: TxIntDelay int array (min = 1, max = 32), description "Transmit Interrupt Delay"
                  parm: TxAbsIntDelay int array (min = 1, max = 32), description "Transmit Absolute Interrupt Delay"
                  parm: RxIntDelay int array (min = 1, max = 32), description "Receive Interrupt Delay"
                  parm: RxAbsIntDelay int array (min = 1, max = 32), description "Receive Absolute Interrupt Delay"
                  parm: InterruptThrottleRate int array (min = 1, max = 32), description "Interrupt Throttling Rate"

                  [root@pf-amon root]# modinfo /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e2100.o.gz
                  filename: /lib/modules/2.4.19-40mdksecure/kernel/drivers/net/e2100.o.gz
                  description: "Cabletron E2100 ISA ethernet driver"
                  author:
                  license: "GPL"
                  parm: io int array (min = 1, max = 4), description "I/O base address(es)"
                  parm: irq int array (min = 1, max = 4), description "IRQ number(s)"
                  parm: mem int array (min = 1, max = 4), description " memory base address(es)"
                  parm: xcvr int array (min = 1, max = 4), description "tranceiver(s) (0=internal, 1=external)"
                  • [^] # Re: unresolved symbol

                    Posté par  . Évalué à 0.

                    > e1000.o
                    > e2100.o.gz

                    Si file e2100.o.gz retourne quelque chose comme :
                    gzip compressed data ...

                    Alors compresses aussi e1000.o (gzip e1000.o).
                    Pour voir...

                    En fait tu devrais peut-être reffaire un noyau complet.
                    cd /usr/src/linux
                    vim Makefile ( ajoute un truc à la fin de "EXTRAVERSION = -1.350" )
                    make mrproper
                    cp /boot/config-{version} .config
                    make oldconfig # pas forcément nécessaire
                    make dep
                    make
                    make modules
                    make modules_install
                    cp .config /boot/config-{new-version}
                    cp System.map /boot/System.map-{new-version}
                    cp arch/i386/boot/bzImage /boot/vmlinuz-{new-version}
                    mkinitrd /boot/initrd-{new-version}.img {new-version}
                    depmod -a -e -F /boot/System.map-{new-version} {new-version}

                    mise à jour /boot/grub/grub.conf ou /etc/lilo.conf
                    reboot.
                    compilation/installation de e1000 . Vérifier que le Makefile pointe sur l'arble de contruction (/usr/src/linux).
                    • [^] # Re: unresolved symbol

                      Posté par  (site web personnel) . Évalué à 1.

                      Oui mais ca m'embete de refaire un noyau complet vu que je dois fournir ce module a plein de gens en France ensuite qui ont déjà des machines installées.
                      En plus je préfere qu'ils continuent à avoir un noyau de base mdk avec updates de sécu.
                      • [^] # Re: unresolved symbol

                        Posté par  . Évalué à 0.

                        C'est pas génant.
                        "EXTRAVERSION=-40mdksecure".
                        cp /boot/config-2.4.19-40mdksecure .config
                        [...]

                        Tu obtiens le même noyau que Mandrake. L'avantage, est que tu es sûr que ton arbre de construction est synchro.
                        N'oublies pas de mettre au chaud /lib/modules/2.4.19-40mdksecure etc de Mandrake sinon le "nouveau" noyau va tout écraser

                        Fais ça après avoir testé avec "EXTRAVERSION=-40mdksecurecustom".
                        • [^] # Re: unresolved symbol

                          Posté par  (site web personnel) . Évalué à 1.

                          Bon ben merci ca a marché, dommage que j'ai pas reussi à trouver ce qui était pas ok (mettre le bon .config, le bon EXTRAVERSION, faire make menuconfig et make dep ne suffit pas visiblement et je ne vois pas pourquoi).

                          N'oublies pas de mettre au chaud /lib/modules/2.4.19-40mdksecure
                          Pas besoin vu que je l'installe pas :-)
  • # Symboles suffixés

    Posté par  (site web personnel) . Évalué à 4.

    A Mandrake pour MMove et le module pixélien issu de cloop et loop-aes on avait eu un problème similaire : on compilait à la main un module pour le kernel normal de Mandrake, "insmod" arrivait à le charger mais pas l'insmod-busybox que j'utilise dans le stage1 : il ne trouvait pas des symboles comme ceux dont tu parles alors que manifestement on les avait.

    A la fin on avait trouvé qu'une option de compil des modules permet de suffixer ou non les symboles par quelque chose qui ressemble à un md5 et qui semble être fait pour différencier un kernel d'un autre (sinon, on a juste le symbole "printk" par exemple, et donc tout kernel peut charger ce module même si des choses importantes comme les options de compil sont différentes, ce qui est à éviter).

    Je flaire un problème similaire dans ton cas.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.