Je peux utiliser la commande suivante pour créer un fichier .config
du noyau Linux basé sur une architecture par défaut spécifiée pour une carte personnalisée basée sur ARM:
Arch=arm make defconfig KBUILD_DEFCONFIG=var_som_mx6_Android_defconfig
Je pensais que cette commande copie plus ou moins ./Arch/arm/configs/var_som_mx6_Android_defconfig
dans ./.config
. Cependant, le fichier .config
résultant n'est pas exactement une copie:
$ diff --unified Arch/arm/configs/var_som_mx6_Android_defconfig .config
--- Arch/arm/configs/var_som_mx6_Android_defconfig 2017-01-20 12:10:51.891515984 -0800
+++ .config 2017-01-26 15:31:29.000000000 -0800
@@ -407,6 +407,7 @@
CONFIG_ARM_ERRATA_751472=y
CONFIG_ARM_ERRATA_794072=y
CONFIG_ARM_ERRATA_761320=y
+CONFIG_ARM_ERRATA_845369=y
# CONFIG_ARM_ERRATA_753970 is not set
CONFIG_ARM_ERRATA_754322=y
# CONFIG_ARM_ERRATA_754327 is not set
@@ -2683,7 +2684,6 @@
CONFIG_AUTOFS4_FS=y
CONFIG_Fuse_FS=y
# CONFIG_CUSE is not set
-CONFIG_AUFS_FS=y
#
# Caches
@@ -2759,6 +2759,21 @@
# CONFIG_PSTORE is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
+CONFIG_AUFS_FS=y
+CONFIG_AUFS_BRANCH_MAX_127=y
+# CONFIG_AUFS_BRANCH_MAX_511 is not set
+# CONFIG_AUFS_BRANCH_MAX_1023 is not set
+# CONFIG_AUFS_BRANCH_MAX_32767 is not set
+CONFIG_AUFS_SBILIST=y
+# CONFIG_AUFS_HNOTIFY is not set
+# CONFIG_AUFS_RDU is not set
+# CONFIG_AUFS_PROC_MAP is not set
+# CONFIG_AUFS_SP_IATTR is not set
+# CONFIG_AUFS_SHWH is not set
+# CONFIG_AUFS_BR_RAMFS is not set
+# CONFIG_AUFS_BR_Fuse is not set
+CONFIG_AUFS_BDEV_LOOP=y
+# CONFIG_AUFS_DEBUG is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
Je ne comprends pas d'où viennent les lignes supplémentaires et j'ai toujours trouvé que le fonctionnement interne de la configuration du noyau, des makefiles et des scripts de construction était difficile à comprendre. Quelqu'un peut-il expliquer d'où viennent ces lignes dans le .config
?
Le fichier .config
n'est pas simplement copié à partir de votre fichier defconfig
. La motivation pour stocker defconfig
dans un tel format est la suivante: dans defconfig
, nous ne pouvons spécifier que des options avec des valeurs autres que les valeurs par défaut (c’est-à-dire des options que nous avons modifiées pour notre forum). De cette façon, nous pouvons le garder petit et clair. Chaque nouvelle version du noyau apporte de nouvelles options. Ainsi, il n’est pas nécessaire de mettre à jour notre fichier defconfig
à chaque fois que le noyau est publié. En outre, il convient de mentionner que le système de construction du noyau conserve un ordre très spécifique d'options dans le fichier defconfig
; il est donc préférable d'éviter de le modifier à la main. À la place, vous devriez utiliser la règle make savedefconfig
.
Lorsque le fichier .config
est généré, le système de génération du noyau parcourt tous les fichiers Kconfig
(de tous les sous-répertoires), en vérifiant toutes les options de ces fichiers Kconfig
:
defconfig
, le système de construction met cette option sur .config
avec la valeur choisie dans defconfig
defconfig
, le système de génération le met à .config
en utilisant sa valeur par défaut, spécifiée dans la Kconfig
correspondanteVérifiez scripts/kconfig/Makefile et scripts/kconfig/conf.c files pour voir comment cela se passe.
De "Kbuild: le système de construction de noyau Linux" de Javier Martinez :
Définition des symboles de configuration:
Kconfig
FilesLes symboles de configuration sont définis dans des fichiers appelés fichiers
Kconfig
. Chaque fichierKconfig
peut décrire un nombre arbitraire de symboles et peut également inclure (source) d'autres fichiersKconfig
. Les cibles de compilation qui construisent les menus de configuration des options de compilation du noyau, telles quemake menuconfig
, lisent ces fichiers pour créer la structure arborescente. Chaque répertoire du noyau a uneKconfig
qui inclut les fichiersKconfig
de ses sous-répertoires. En plus du répertoire du code source du noyau, il existe un fichierKconfig
qui constitue la racine de l'arborescence des options. Lesmenuconfig
(scripts/kconfig/mconf
),gconfig
(scripts/kconfig/gconf
) et d'autres cibles de compilation appellent des programmes qui commencent à cette racineKconfig
et lisent de manière récursive les fichiersKconfig
situés dans chaque sous-répertoire pour créer leurs menus. Le sous-répertoire à visiter est également défini dans chaque fichierKconfig
et dépend également des valeurs du symbole de configuration choisies par l'utilisateur.Stockage des valeurs de symbole:
.config
FichierToutes les valeurs de symbole de configuration sont enregistrées dans un fichier spécial appelé
.config
. Chaque fois que vous souhaitez modifier une configuration de compilation du noyau, vous exécutez une cible de création, telle quemenuconfig
ouxconfig
. Ceux-ci lisent les fichiersKconfig
pour créer les menus et mettent à jour les valeurs des symboles de configuration à l'aide des valeurs définies dans le fichier.config
. En outre, ces outils mettent à jour le fichier.config
avec les nouvelles options que vous avez choisies et peuvent également en générer une si elle n'existait pas auparavant.Étant donné que le fichier
.config
est du texte brut, vous pouvez également le modifier sans recourir à un outil spécialisé. C'est très pratique pour sauvegarder et restaurer les configurations précédentes de compilation du noyau.
Vous pouvez utiliser une syntaxe plus simple pour make defconfig
, comme:
$ make Arch=arm your_board_defconfig
Voir la liste complète des defconfigs disponibles avec:
$ make Arch=arm help | grep defconfig
Si vous devez effectuer une action inverse (c.-à-d. Créer une petite defconfig
soignée à partir de .config
étendu), vous pouvez utiliser la règle savedefconfig
:
$ make Arch=arm savedefconfig
De plus, comme mentionné 0andriy, vous pouvez utiliser le script diffconfig
pour voir les modifications apportées d'un .config
à un autre:
$ scripts/diffconfig .config_old .config_new
Il génère également include/generated/autoconf.h
.
Ce fichier d'en-tête est inclus par le fichier source C. .config
est pour le système Makefile.
Build system génère deux fichiers et veille à leur cohérence.