0%

ubuntu 16.04编译linux 4.6内核完整过程(含各种error解决方案)

完整的编译过程大约会占用10GB的存储空间!谨慎!

如果你已有环境基础,那么整个过程会大致耗时5h+!

版本说明

环境版本

Ubuntu版本查看方法:

1
2
3
4
5
kun@ubuntu:~$ cat /etc/issue
Ubuntu 16.04.6 LTS \n \l

kun@ubuntu:~$ cat /proc/version
Linux version 4.15.0-45-generic (buildd@lcy01-amd64-027) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)) #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019

VMware® Workstation 15 Player

1
15.1.0 build-13591040

linux内核版本

linux-4.6

下载链接:https://www.kernel.org/。

下载linux-4.6.tar.xz文件后复制到Ubuntu的文件系统中,我将复制到了Downloads/文件下。

Linux内核编译

准备编译

1
2
3
4
5
6
7
8
# 解压准备
xz -d Downloads/linux-4.6.tar.xz
tar –xvf Downloads/linux-4.6.tar
sudo cp -r Downloads/linux-4.6 /usr/src
cd /usr/src
# 编译配置
cp linux-headers-4.15.0-45-generic/.config linux-4.6/
cd linux-4.6/

内核配置

内核提供了各种不同的工具来简化内核配置,make config/gconfig/oldconfig等,下面以基于ncurse库编制的图形界面工具配置。

1
make menuconfig

出现可视化菜单,选择load→OK→Save→OK→EXIT→EXIT。

执行完,则内核配置完毕。

内核配置不成功的错误

如果没有出现可视化菜单,而是出现错误:

1
2
3
4
5
6
7
8
9
10
root@ubuntu:/usr/src/linux-4.6# make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/mconf.o
In file included from scripts/kconfig/mconf.c:23:0:
scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: No such file or directory
compilation terminated.
scripts/Makefile.host:108: recipe for target 'scripts/kconfig/mconf.o' failed
make[1]: *** [scripts/kconfig/mconf.o] Error 1
Makefile:538: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2

解决方法:

1
2
3
4
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libncurses5
sudo apt-get install libncurses5-dev

重新尝试,在可视化菜单中选择load→OK→Save→OK→EXIT→EXIT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@ubuntu:/usr/src/kernel/linux-4.6# make menuconfig
HOSTCC scripts/kconfig/mconf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTLD scripts/kconfig/mconf
scripts/kconfig/mconf Kconfig


*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

如果出现仍错误,如下

1
2
3
4
5
6
7
8
scripts/kconfig/mconf  Kconfig
.config:4244:warning: symbol value 'm' invalid for GPIO_MB86S7X
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
scripts/kconfig/Makefile:28: recipe for target 'menuconfig' failed
make[1]: *** [menuconfig] Error 1
Makefile:538: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2

则只需要调大终端窗口大小重试即可。

其他的配置工具简介如下:

1
2
3
4
make config ;字符界面下
make gconfig ;基于gk+的图形工具
make defconfig ;基于默认配置
make oldconfig ;修改过配置文件后,或者用已有配置文件配置新的代码树的时候,应该执行

编译和安装内核

编译内核,仍然在你的linux-4.6/下执行,可能耗时数小时:

1
make

老版的编译方式会编译启动映像make bzImage。这里不使用,make就可以搞定。

可能出现错误:

1
2
3
4
5
6
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
compilation terminated.
scripts/Makefile.host:91: recipe for target 'scripts/sign-file' failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:552: recipe for target 'scripts' failed
make: *** [scripts] Error 2

解决方法:

1
sudo apt-get install libssl-dev

重新尝试make,开始等待。结束结果如下:

1
2
3
4
Setup is 17404 bytes (padded to 17408 bytes).
System is 6942 kB
CRC f4cb1ce4
Kernel: arch/x86/boot/bzImage is ready (#1)

安装内核模块:

1
make modules_install

就可以把已编译的模块安装到正确的主目录/lib/modules下。

1
make install ;安装内核模块

这一步生成新内核的引导文件。重启系统:

1
reboot

过程结束。