web-dev-qa-db-fra.com

La recette pour la cible 'vmlinux' a échoué?

J'essaie de construire un noyau pour que QEMU émule un Raspberry Pi: http://xecdesign.com/compiling-a-kernel/https://www.raspberrypi.org /documentation/linux/kernel/building.md

Cependant, en exécutant la commande: make Arch = arm

il a bien compilé pendant un bon bout de temps, mais s’est arrêté quand il a reçu ce message:

kevin@kevin-laptop:~/linux$ make Arch=arm
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  LINK    vmlinux
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
drivers/built-in.o: In function `mmc_fixup_device':
of_iommu.c:(.text+0xb9674): undefined reference to `mmc_debug'
Makefile:923: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

Je ne sais pas exactement ce que ça me dit. J'imagine qu'il ne peut pas trouver la bibliothèque dont il a besoin dans sa compilation. J'utilise la boîte à outils Raspberry Pi (ce qui semble être une solution plug and play essentiellement si elle l'a sur son git pour la chaîne d'outils Pi officielle)

De l'aide?

1
user138741

ajoutez le pilote ci-dessous au fichier (Arch/arm/configs/bcm2835_defconfig)

 CONFIG_MMC_BCM2835=y
 CONFIG_MMC_BCM2835_DMA=y
 CONFIG_DMADEVICES=y
 CONFIG_DMA_BCM2708=y

cp Arch/arm/configs/bcm2835_defconfig ./.config
make Arch=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig
make Arch=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-

ça marche pour moi.

c'est ça.

3
steve

Avait le même problème en utilisant la chaîne d'outils Debian Jessie cross. Utilisation du noyau rpi-3.18.y. On l'a tracé jusqu'à mmc_debug qui avait été mal défini:


christoph@debian:~/raspidev/linux$ find drivers/mmc -name \*.c -exec -H grep mmc_debug {} \;
drivers/mmc/Host/bcm2835-mmc.c
drivers/mmc/Host/omap_hsmmc.c
drivers/mmc/core/quirks.c

En regardant plus loin, seuls le bcm2835-mmc.c et quirks.c ont le symbole défini:


bcm2835-mmc.c:
/*static */unsigned mmc_debug;
/*static */unsigned mmc_debug2;
module_param(mmc_debug, uint, 0644);
module_param(mmc_debug2, uint, 0644);

quirks.c:
extern unsigned mmc_debug;

Je suis donc revenu en arrière et j'ai activé les DEUXMMC ainsi que l'adaptateur hôte BCM2835 dans ma configuration. Ceci a été ajouté au correctif de configuration déjà appliqué.


diff --git a/drivers/mmc/Host/Kconfig b/drivers/mmc/Host/Kconfig
index 3e7abcd..95eb332 100644
--- a/drivers/mmc/Host/Kconfig
+++ b/drivers/mmc/Host/Kconfig
@@ -6,7 +6,7 @@ comment "MMC/SD/SDIO Host Controller Drivers"

 config MMC_BCM2835
        tristate "MMC support on BCM2835"
-       depends on MACH_BCM2708 || MACH_BCM2709 || Arch_BCM2835
+       depends on MACH_BCM2708 || MACH_BCM2709 || Arch_BCM2835 || Arch_VERSATILE_PB || Arch_VERSATILE_AB
        help
          This selects the MMC Interface on BCM2835.

Activez ensuite le BCM2835 dans la configuration et compilez. Travaillé pour moi.

1
Christoph