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?
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.
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.