编译内核的make命令

编译内核的make命令

问题描述

在编译友善之臂NanoPi NEO Air的Linux-4.14内核时,当我按照wiki说明,使用如下命令进行编译时,编译通过;

cd linux
touch .scmversion
make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-

但,当我使用make menuconfig命令修改了部分配置项,保存退出后,再使用如下命令进行编译

make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-

编译时提示如下log,并要求手动配置编译选项

scripts/kconfig/conf  --silentoldconfig Kconfig
.config:9280:warning: symbol value 'm' invalid for KVM
*
* Restart config...
*
*
* General setup
*
Cross-compiler tool prefix (CROSS_COMPILE) [] 
Compile also drivers which will not load (COMPILE_TEST) [N/y/?] n
Local version - append to kernel release (LOCALVERSION) [] 
Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?] n
Kernel compression mode
> 1. Gzip (KERNEL_GZIP)
  2. LZMA (KERNEL_LZMA)
  3. XZ (KERNEL_XZ)
...

网上查阅了很多类似情况,都没有找到答案,只能先了解一下make内核的各选项的意义

  • 编译内核提示“Restart config…”的问题分析和解决
  • 请问make uImage 出现"restart config…"导致编译错误
  • 编译内核莫名的出错了,有人碰到过这样的错误吗?

命令查询

使用make help命令可以查看make时,可以增添的选项,常用的有如下几个选项

  • make defconfig: New config with default from ARCH supplied defconfig
  • make savedefconfig: Save current config as ./defconfig (minimal config)
  • make menuconfig: Update current config utilising a menu based program
  • make oldconfig: Update current config utilising a provided .config as base
  • make olddefconfig: Same as silentoldconfig but sets new symbols to theirdefault value
  • make clean:Remove most generated files but keep the config and enough build support to build external modules
  • make distclean: mrproper + remove editor backup and patch files
  • make mrproper: Remove all generated files + config + various backup files

问题解决

网上找了两篇关于make的正确操作后,才发现,make menuconfig && make的操作是不对的,make menuconfig会将当前图像化配置的信息重新写入.config文件,而使用make时,实际上使用的是arch/arm/configs/目录下的配置文件,这也就是wiki中在使用make之前,需要使用make sunxi_defconfig指定配置文件的原理;这与openwrt中使用make menuconfig配置完成后,可直接使用make是不同的

正确的操作为,先使用make savedefconfig命令根据当前图像化的配置生成defconfig,再使用mv defconfig arch/arm/configs/xxx_defconfigdefconfig移动到arch/arm/configs/目录,并重命名为xxx_defconfig

make menuconfig
make savedefconfig
mv defconfig arch/arm/configs/xxx_defconfig
make xxx_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-

备注:直接使用cp .config arch/arm/configs/xxx_defconfig也可以,但不是标准做法,不建议这么做,生成的内核空间较大

参考链接

  • 正确地保存编译内核产生的.config文件-使用make savedefconfig
  • 内核中修改和保存defconfig的方法
  • nanopi wiki

你可能感兴趣的:(Linux)