文章目录

  • 前言
  • 一、安装虚拟机
  • 二、虚拟机的初始化配置
  • 三、远程Shell 工具连接虚拟机
  • 四、下载Linux 内核并编译
  • 五、重新启动虚拟机,进入新内核系统


//

前言

谨记:写下这篇教程的目的,是为了记录自己在编译Linux内核时遇见的各种问题,让大家能少掉坑。虽然说事不过三,但这次是我第4次重新装系统、重新编译了…


提示:以下是本篇文章正文内容,内核已安装成功,下面的命令和方法可供参考

//

一、安装虚拟机

说明:
光盘映像文件:Ubuntu 20.04 server(服务器版本64位)
虚拟化软件:VMware Workstation
(VirtualBox也不错,但网上关于VirtualBox的教程太少了,我觉得两款其实差不多啦,VirtualBox还更简洁一点。)

1.打开VM——点击创建新的虚拟机,点击下一步、再下一步。

2.选择安装我们之前下载好的Ubuntu Server版本的光盘映像文件(后缀名是.iso)

//
3.填写好信息(要记得自己设的用户名和密码,可以写在一个txt文件)

//
4.内核编译产生的大量临时文件和目标文件会占据很大的空间,所以保存的位置要保证至少有50+G

//
5.为了让Linux内核编译更快一点,我这里设置了4核。(如果本机承受得住可以设8核!)


//
6.接下来是设置运行内存(3G-4G就够了),运行内存不够大,编译过程中也是会出错的哦,但我没有碰见。


//
7.选择桥接网络,这个是wget命令下载、连接网络、主机与虚拟机间互ping的正确选择

(之前搞主机与虚拟机间互ping搞了很久,其实就是桥接网络设置没弄好)


//
8.接下来两个选择默认的就可以了,直接点击下一步。



//
9.创建虚拟磁盘,因为每个电脑的配置和安装文件不一样,编译内核用到的内存也不大相同,见过的最小有5G,最大的50+G,如果想要内核编译一步到位,在此建议设80G左右(有多大搞多大!)


//
10.直接下一步,就创建好了,下图是创建的虚拟机信息,点击完成、开启虚拟机:

//

二、虚拟机的初始化配置

1.默认English——>回车done(其余界面没特别说明都是默认设置就OK)

//
2.网线插好,有DHCP,系统就会自动默认为DHCP,并把已经获取到的IP显示到对应的网卡上,大部分情况默认就可以了,done

//
3.接下来到了重点!! 手动手动手动磁盘分区!!
本人前三次不能编译完整,正是三次都是“根目录内存太小”!!!即使前面设置60G、90G,如果是自动默认分区,/ 根目录分配到的内存都不够用呀(/(ㄒoㄒ)/~~)

下面大家好好设置,编译内核就不会出现“error:No space left on device”这个错误。

选择"Custom storage layout"——done


选择“Add GPT Partition”——(说明:图是旧的60G,后来想想还是不够,改成80G了)

/boot 10G空间够了


同样的选择“Add GPT Partition”,给 / 这个根目录设空间大小


确认就可以看到我们设置的两个分区啦!



4.设置Linux虚拟机登录的用户名和密码(这个要记住啊!登录虚拟机要输入的哦)


//
5.这里选择开启SSH服务,之后远程连接就不会出错了,有的远程连接出错了,是因为虚拟机还没开启SSH服务,可以用终端命令开启这个服务,再连接,也不是很麻烦,百度一下就可以啦!


//
6.设置好,慢慢等待虚拟机安装就OK了

//

三、远程Shell 工具连接虚拟机

直接通过虚拟机软件进入虚拟机终端进行相关的命令行多有不便,字体分辨率较低、不能直接粘贴浏览器网页中 Linux 命令,远程Shell 工具就可以自己设置字体大小格式。

//
在此本人用的是:Putty

下载网址:https://www.putty/

1.下载

根据自己电脑位数选择下载安装就可以了


可以查找相关教程,配置喜欢的终端字体和其大小。

2.运行putty.exe,填写虚拟机IP,进入

//

四、下载Linux 内核并编译

1.远程 Shell 会话终端里,使用 wget 命令下载最新的稳定版 Linux 源码包

命令如下:

sudo wget 源码包下载链接

例如下载linux-5.8.15.tar稳定版本的源码包:

sudo wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.15.tar.xz

下载好显示如下:

//
2.环境配置(想顺顺利利一口气编译好就要做好准备)

(正式编译前需要安装部分软件,之后编译内核就不会报奇怪的错误了)

sudo apt update && sudo apt upgrade
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

(这里是选读,说明这步可能出现的错误和解决办法)

上网下载的命令 可能 会出现以下错误:

出现错误:

 Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

应该是DNS服务器域名访问失败(ping不通网络也可能是这个原因)

解决办法——>输入命令

sudo vim /etc/resolv.conf 

添加 nameserver 8.8.8.8

添加 nameserver 114.114.114.114


可能初学者不知道怎么用vim插入文本,在此简单说一下:

①进入这个界面,按 i 键 ,表达进入“INSERT”编辑模式,就可以在文本中添加内容。

②添加好后,按ESC键,再输入“:wq!”,就可以保存并回到普通命令行界面。

(选读结束)

//
3.下载好后,对压缩包进行解压

①把xz后缀名去掉

sudo xz -d linux-5.8.15.tar.xz


②tar命令解压(解压至/usr/src 目录下)

sudo  tar -xvf  linux-5.8.15.tar  -C  /usr/src/

解压成功显示:

4.在正式编译内核之前,我们首先必须配置需要包含哪些模块

sudo cp /boot/config-$(uname -r) .config

意思就是拷贝对应当前内核配置到当前目录下并重命名为.config

之后可以输入 uname -r 命令查看当前信息(为了和之后安装好的新内核做对比)

//
//
5.正式开始编译!!

make menuconfig

提示:虚拟机下有可能提示会因为屏幕太小而无法显示menuconfig而执行失败。要确保远程连接软件全屏。


默认设置即可,选择退出。执行完显示如下:


sudo time make -j4

开始编译,此过程看每个人电脑、虚拟机等等方面的配置,执行时间有长有短,慢慢等待即可。

这里可以用 make -jn 来进行编译加速,其中 n 值一般为 2,4 或 8 (多给虚拟机分配一些 CPU 资源)

time 命令可以在编译内核过程结束后,在终端抛出编译内核的消耗用时

编译完后显示:(我这里大概编译了1小时40分)

sudo make modules_install

安装模块

sudo make install

安装内核


//

五、重新启动虚拟机,进入新内核系统

1.重新驱动虚拟机,出现以下画面,选择“Advanced…”


2.进入之前编译的最新的内核版本中


3.等待…

//
(这里是选读)

此过程当中可能出现以下错误:System is deadlocked on memory

其实虚拟机初始配置的运行内存不够,需要增加内存:

解决办法:直接进入虚拟机设置,增大运行内存,再重新开启虚拟机。


(选读结束)

4.开启虚拟机登录后,输入 uname -r 命令,确认内核版本


说明内核安装成功!!!!!

//

说明:本人前三次编译失败其实都是分配的内存不够大,虽然有一次设了60G,一次90G,但因为都选择了系统默认内存分配,导致根目录分配到的内存还是不够大,所以手动分内存很重要啊!!!

本文献给花了一个星期才搞定这个小作业的菜鸟yjy。

希望此文对有同样困惑的你有所帮助。

参考教程:如何编译安装Linux内核

更多推荐

【Linux虚拟机】从头开始——Linux虚拟机安装、远程Shell 工具连接、内核编译教程