拿到一个新版本的内核,想要移植一个机型,第一件事就是创建一个配置,那么怎么创建一个新的配置呢?那就是defconfig。
defconfig是一个目标,对于某些ARCH还有特定SoC的defconfig。比如ARM。
$ ls arch/arm/configs/
am200epdkit_defconfig hisi_defconfig mvebu_v5_defconfig sama7_defconfig
aspeed_g4_defconfig imxrt_defconfig mvebu_v7_defconfig shmobile_defconfig
aspeed_g5_defconfig imx_v4_v5_defconfig mxs_defconfig socfpga_defconfig
assabet_defconfig imx_v6_v7_defconfig neponset_defconfig sp7021_defconfig
at91_dt_defconfig integrator_defconfig netwinder_defconfig spear13xx_defconfig
axm55xx_defconfig ixp4xx_defconfig nhk8815_defconfig spear3xx_defconfig
bcm2835_defconfig jornada720_defconfig omap1_defconfig spear6xx_defconfig
clps711x_defconfig keystone_defconfig omap2plus_defconfig spitz_defconfig
collie_defconfig lpae.config orion5x_defconfig stm32_defconfig
davinci_all_defconfig lpc18xx_defconfig pxa168_defconfig sunxi_defconfig
dove_defconfig lpc32xx_defconfig pxa3xx_defconfig tegra_defconfig
dram_0x00000000.config milbeaut_m10v_defconfig pxa910_defconfig u8500_defconfig
dram_0xc0000000.config mmp2_defconfig pxa_defconfig versatile_defconfig
dram_0xd0000000.config moxart_defconfig qcom_defconfig vexpress_defconfig
ep93xx_defconfig mps2_defconfig realview_defconfig vf610m4_defconfig
exynos_defconfig multi_v4t_defconfig rpc_defconfig vt8500_v6_v7_defconfig
footbridge_defconfig multi_v5_defconfig s3c6400_defconfig wpcm450_defconfig
gemini_defconfig multi_v7_defconfig s5pv210_defconfig
h3600_defconfig mv78xx0_defconfig sama5_defconfig
上面这些defconfig文件都可以作为make目标,生成对应SOC的默认配置。比如高通的:
ARCH=arm make qcom_defconfig
对于ARM64,没有SOC的默认配置,只有一个arch/arm64/configs/defconfig
$ make kernel/defconfig V=1
kernel/prepare
kernel/defconfig
ARCH="arm64" CROSS_COMPILE=/home/yuanjp/toolchain/crosstool-mt7981/bin/aarch64-linux-gnu- make -C /home/yuanjp/Xrouter/staging/source/linux-6.6.31 O=/home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31 defconfig
make[1]: Entering directory '/home/yuanjp/Xrouter/staging/source/linux-6.6.31'
make -C /home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31 \
-f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/Makefile defconfig
make[2]: Entering directory '/home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31'
make --no-print-directory -C /home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31 \
-f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/Makefile defconfig
ln -fsn /home/yuanjp/Xrouter/staging/source/linux-6.6.31 source
# GEN Makefile
{ echo "# Automatically generated by /home/yuanjp/Xrouter/staging/source/linux-6.6.31/Makefile: don't edit"; echo "include /home/yuanjp/Xrouter/staging/source/linux-6.6.31/Makefile"; } > Makefile
test -e .gitignore || \
{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=scripts/basic
make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=scripts/kconfig defconfig
scripts/kconfig/conf --defconfig=arch/arm64/configs/defconfig Kconfig
#
# configuration written to .config
#
make[2]: Leaving directory '/home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31'
make[1]: Leaving directory '/home/yuanjp/Xrouter/staging/source/linux-6.6.31
可以看到,它也是通过conf命令,指定defconfig文件来实现defconfig的。