Linux内核编译与安装(完整过程)【Ubuntu18.04下】
0 前言
暑假作业的第一步。
第一次弄,失败了不少次,最后发现只要步骤都对,其实很简单,只是时间问题。
起初在CentOS7上编译安装5.13和4.14的内核都不行,也不知道是哪里出了问题,查了一下说似乎是GCC版本与内核版本不兼容,然后赶紧太麻烦了,遂放弃。
然后装了一个Ubuntu18.04,可以make menuconfig了,但是手贱不知道哪里弄错了,又不行了。
又装了Ubuntu个10.04,想装了3.6版本的内核(怕高版本不兼容),无奈刚开始没找到资源(其实很好找),还是用Ubuntu18.04吧。
重装了Ubuntu18.04,为以防万一,分配了50G空间,4G内存,1CPU,2核心,重新开始。
Ubuntu18.04第一次装可能会有些小问题。
一、网络不可用
更改设置->还原默认设置->VmNet8(NAT模式),搞定。


二、无法在Ubuntu与windows之间实现复制粘贴
sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
搞定,屡试不爽。
1 进入正题
Ubuntu版本:18.04
Kernel版本:4.14.238(18.04本身的版本是5,可以试试5.13.1,我这里是为了保险)
1.在www.kernel.org上选择要下载的内核版本
点击tarball,或者那个大黄方块的最新版本
(直接在Ubuntu上下载,可以使用命令,也可以网页上手动下载)

2.解压
sudo xz -d linux-4.14.238.tar.xz
sudu tar -xvf linux-4.14.238.tar -C /usr/src/
这里直接解压到/usr/src/
这两步也似乎可简化成一步
用xvJf
3.安装依赖库
这一步很重要,要不后面会有很多报错
sudo apt-get update
sudo apt-get install libncurses5-dev #用于menuconfig
sudo apt-get install build-essential openssl
sudo apt-get intall flex
sudo apt-get intall bison
sudo apt-get intall openssl
sudo apt-get intall libssl-dev
如果还有报错,查看一下是不是还缺少其他依赖库就行了,网上也有很多报错的说明,直接搜linxu内核编译错误就行
4.配置内核编译参数
cd /usr/src/linxu-4.14.238
sudo make mrproper
sudo make clean
sudo make menuconfig
然后会进入如下界面,第一次弄,不太懂,就没改动配置了,直接save->load->exit(我乱点的哈哈哈哈哈哈哈)

5.编译内核!!!
sudo make bzImage
这个需要比较长的时间啦,出现第二张图就ok了。


6.编译和安装modules
sudo make modules
sudo make modules-install
命令mmmmmmmmmm…这一步时间更久,等着吧!主要是第一条命令,第二条命令出现 DEPMOD即可。

7.安装内核!!!
sudo make install

8.查看和启动新内核
(这部分似乎又多余的地方,但是不影响,毕竟我只是总结别人的方法)
将生成的bzImage文件和System.map文件拷贝到/boot/目录下
cp /usr/src/linux-4.14.238/arch/x86/boot/bzImage /boot/
cp /usr/src/linux-4.14.238/System.map /boot/
来建立镜像文件
mkinitramfs 4.14.238 -o /boot/initrd.img-4.14.238
更新修改系统引导配置
update-initramfs -c -k 4.14.238
update-grub2 #这块我不知道啥意思 grub2?第二个?
进入引导程序
cd /boot/grub
gedit grub.cfg
看到配置文件中有:

最重要的一步来了!
cd
sudo grep menuentry /boot/grub/grub.cfg
sudo gedit /etc/default/grub
第一条命令结果如图左部,查看自己编译安装的内核在第几个menuentry,这里可以看到4.14.238在第5个,记住咯。
第二条指令结果如图右部所示,修改默认启动的内核, GRUB_DEFAULT=“1 >4”
即可。请注意在(2)中提到的需要更换的内核4.14.238在submenu的第5个menuentry,因此是“1 >4“,懂得都懂,唯一需要的就是数好这个!

sudo update-grub #必须更新一下
sudo reboot #重启
重启后,查看内核版本
sudo uname -r
sudo uname -a

至此,告一段落。
(似乎有个什么交叉编译,之后再了解吧!)