title: What exactly does Linux kernel's `make defconfig` do?
body: <p>I can use the following command to create a Linux kernel <code>.config</code> file based on a specified architecture default for a custom ARM-based board:</p>
  
  <pre><code>ARCH=arm make defconfig KBUILD_DEFCONFIG=var_som_mx6_android_defconfig
  </code></pre>
  
  <p>I thought that this command more or less copies <code>./arch/arm/configs/var_som_mx6_android_defconfig</code> to <code>./.config</code>.  However the resulting <code>.config</code> file isn't exactly a copy:</p>
  
  <pre><code>$ 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
  </code></pre>
  
  <p>I don't understand where the extra lines are coming from, and I have always found the internal workings of the kernel configuration, makefiles, and build scripts to be difficult to understand.  Can anyone explain where those lines in the <code>.config</code> might be coming from?</p>