写在前面

我最近的科研工作需要使用到对ubuntu内核源代码进行编译,因此我下载了最新的长期支持版本的ubuntu20.04,为什么使用最新版而不是16.04或者18.04呢?因为最新版本的内核支持最新的技术,更完善更好,并且20.04已经发布一年多,且是长期支持版本,兼容性和可靠性值得信赖。
当前时间最新版本是21.04,不太建议使用这么新的版本,一是可能没那么稳定,二是不是长期支持版本LST。
那些想要修改内核源代码或在读源码编译源码的人,都可以从本博客中学习到一点我总结的知识。我的信息都来自互联网,只不过是对前人工作的总结。
本文没有进行内核编译,只是下载源代码,查看分析!

一、安装VMware Workstation和Ubuntu20.04

这个不是本博客的重点内容,详细步骤请参考互联网。
我安装的过程没有参考哪些文章,20.04安装非常简单,只需要输入用户名和密码就好了,基本的配置都会给默认弄好。
查看ubuntu版本信息

uname -a

图1

二、修改apt源

Ubuntu安装包和依赖都需要apt工具,国内可以更改apt源为阿里云镜像或者清华镜像。
更改apt源为阿里云镜像。
首先备份原来的apt源文件

sudo cp -v /etc/apt/sources.list /etc/apt/sources.list.backup

更改sources.list文件内容为:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
 
deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
 
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
 
deb http://archive.ubuntu.com/ubuntu/ focal-proposed main restricted universe multiverse
 
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
 
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
 
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
 
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
 
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

需要注意的是,不同版本的源是不一样的,Ubuntu20.04版本名称为focal,如果使用了错误的版本,那么会造成apt很多下载没法使用。

sudo apt update
sudo apt upgrade

默认的Ubuntu20.04好多包都没有安装,包括vim,git等,可以根据自己的需要进行安装,这里不再描述。

三、下载Linux内核源代码

使用上面的查看内核信息,可以看到内核版本号,我的版本是5.11.0
内核代码都放置在:

/usr/src

进入该目录,发现并没有Linux内核源代码,只有四个头文件包header,因为默认安装的Ubuntu20.04没有将源文件保留,对于大多数用户,不需要源代码包。我们可以去网上下载,我找到了一个下载速度比较快的网站:
Linux内核源代码下载
Linux内核
进入网页,往下拉,上面都是补丁内容,下面是内核源码,找一个5.10版本开头的,tar.gz结尾的,下载下来就好,速度很快的。
然后进行解压缩,进入压缩包的目录,输入下面的shell命令

tar -zxvf linux-5.10-37.tar.gz
cp linux-5.10.37 /usr/src

现在可以进入源代码目录下面,查看内容:
(我下载的版本是linux-5.10)

cd /usr/src
cd linux-5.10
ls

图2

四、配置编译内核的依赖和环境

在目录/usr/src/linux-5.10下执行命令:

sudo make menuconfig

发现是报错的,无法正常进入那个编译内核的界面。
图3

需要安装一系列的包,中间我踩了很多坑,只需要照着做就行了,包是什么,什么功能现在也不必知道。

sudo apt install gcc
sudo apt install libc6-dev
sudo apt install libncurses-dev
sudo apt install flex
sudo apt install bison

安装好之后就可以成功进入那个配置界面了。

/usr/src/linux-5.10 sudo make menuconfig

五、查看内核关于网络的内容

sudo sysctl net.ipv4.tcp_availiable_congestion_control

编译进内核的tcp拥塞控制算法只有reno(reno其实就是new reno)和cubic,并且默认的拥塞控制算法是cubic
我进入内核配置界面,发现其实是有很多拥塞控制算法的,只是其他拥塞控制算法编译为模块,不是编译进内核。
想要使用所有的拥塞控制算法,来做科研测试等,需要安装模块,或者编译进内核。

sudo sysctl net.ipv4.tcp_congestion_control

值得我注意到是,我发现新版本的内核已经支持了mptcp,在net包下有一个mptcp的目录,并且使用下面的指令,值为1,可以发现启用了mptcp:

sudo sysctl net.mptcp.enabled

我很好奇内核代码的传输层协议为mptcp和tcp的性能差别,因此我进行了简单的测试。
我是用mininet进行的网络测试,发现多个端口情况下,mptcp和tcp的性能一样,普通情况下mptcp性能竟然还要比tcp低一点。
代码和过程就不放了,现在我也不想研究mptcp,tcp就够我喝一壶了!

参考内容

[1] Ubuntu20.04修改国内源
[2] 如何下载linux内核源码? 刘项

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐