环境

  • CentOS 7 64位
  • gcc 4.8.5
  • make 3.82

过程

  1. make mrproper(清理之前编译生成的文件,如果不是第一次编译的话)
  2. make menuconfig(菜单式内核配置,需要ncurses库)
    1. 在里面随便看看
    2. 默认的就ok,退出时会提示保存.config
  3. make(编译内核了)

报错处理

make不是一帆风顺的,因为这是一个老内核版本,相关工具都已经更新换代,难免有不兼容处。

错误1

gcc: error: elf_x86_64: No such file or directory

解决方法:前往“arch/x86/vdso/Makefile”第28行,将-m elf_x86_64修改为-m64
(下面还有一个-m elf_i386也可以改成-m32

错误2

In file included from drivers/net/igbvf/ethtool.c:36:0:
drivers/net/igbvf/igbvf.h: At top level:
drivers/net/igbvf/igbvf.h:129:15: error: duplicate member ‘page’
make[3]: [drivers/net/igbvf/ethtool.o] Error 1
make[2]:
[drivers/net/igbvf] Error 2
make[1]: * [drivers/net] Error 2

解决方法:前往“drivers/net/igbvf/igbvf.h”第129行,注释掉该行。
image.png

结局

没想到只报了两个错就顺利编译完了,而且也没有很久(1小时以内)。机器可是1G内存1核的垃圾阿里与阿里云轻量应用服务器啊。编译完后,根目录下非隐藏文件多了两个:vmlinux、vmlinux.o。
image.png