这两天在玩windows自带的wsl2,但是作为有强迫症的我看到内核不是最新的就感觉不舒服,偏偏微软还就不更新,于是我就萌生了一个自己编译一个内核的想法,下面就是我编译的步骤:
我是从microsoft store下载的Ubuntu,所以本教程基于Ubuntu20.04所写,而且本教程默认基于root用户,免去权限烦恼。
首先安装一些需要用到的软件:
apt update
apt upgrade
apt install build-essential flex bison dwarves libssl-dev libelf-dev -y
安装好需要使用的软件以后进入kernel.org,找到最新的内核源码,现在写这篇文章时是6.10.1。
下载源码并且解压:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.3.tar.xz
tar -xvJf linux*.tar.xz
cd linux-6.10.1
我们还需要进入WSL的官方github获取编译配置文件:
mkdir Microsoft
wget -O Microsoft/config-wsl https://raw.githubusercontent.com/microsoft/WSL2-Linux-Kernel/linux-msft-wsl-6.6.y/arch/x86/configs/config-wsl
接下来编辑配置文件:
vim Makefile
把我选择的那一行后面修改一下,可以添加你个人的信息等等。
vim Microsoft/config-wsl
这里可以在末行模式开启行数显示,方便你快速定位。
:set nu
我光标那里的值可以随便替换,当然不替换也行,看你心情。接下来就是开启bbr,需要使用vim的查找功能,在末行模式下输入”/你想查找的内容”具体不明白可以自行google。
以下这些值需要替换或者修改。
CONFIG_X86_INTEL_TSX_MODE_OFF=y
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
CONFIG_TCP_CONG_ADVANCED=y
# CONFIG_TCP_CONG_BIC is not set
CONFIG_TCP_CONG_CUBIC=y
# CONFIG_TCP_CONG_WESTWOOD is not set
# CONFIG_TCP_CONG_HTCP is not set
# CONFIG_TCP_CONG_HSTCP is not set
# CONFIG_TCP_CONG_HYBLA is not set
# CONFIG_TCP_CONG_VEGAS is not set
# CONFIG_TCP_CONG_NV is not set
# CONFIG_TCP_CONG_SCALABLE is not set
# CONFIG_TCP_CONG_LP is not set
# CONFIG_TCP_CONG_VENO is not set
# CONFIG_TCP_CONG_YEAH is not set
# CONFIG_TCP_CONG_ILLINOIS is not set
# CONFIG_TCP_CONG_DCTCP is not set
# CONFIG_TCP_CONG_CDG is not set
CONFIG_TCP_CONG_BBR=y
CONFIG_DEFAULT_TCP_CONG="bbr"
# CONFIG_DEFAULT_CUBIC is not set
CONFIG_DEFAULT_BBR=y
# CONFIG_DEFAULT_RENO is not set
修改完成以后保存并且退出。
接下来就是开始编译了,一般几分钟至十几分钟就可以完成,具体看你的电脑性能:
make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl
输入这行命令以后就会开始编译,不过由于我们的内核是自己下载的最新稳定版本,所以会有很多配置不同,接下来会有很多询问,一直回车选择默认就好。
编译完成以后就会提示:
Kernel: arch/x86/boot/bzImage is ready
这时我们就可以打开我们windows的资源管理器,网络位置处选择linux,再选择ubuntu,进入你刚才编译的那个文件夹,可以在ubuntu中使用pwd命令查询文件夹位置,我的就是/home/moyuwuhen/linux-6.7.3,在资源管理器中进入这个位置,然后再进入arch/x86/boot/,找到bzImage,这个就是你编译完成的内核了,把他移动到windows的文件夹里,我的位置就是C:\WSL-kernel,这个位置随意,你记住就行。接下来修改一下wsl的默认配置来使用这个内核,需要我们进入windows用户文件夹下创建或者修改.wslconfig文件,记得把显示隐藏文件的选项打开要不然看不见,在.wslconfig文件中输入以下内容:
[wsl2]
kernel=C:\\WSL-kernel\\bzImage
#上面就是两个斜杠,不要修改成一个斜杠
#接下来是代理设置,如果你想让你的wsl自动配置你windows下的代理就加上去,这样wsl中就可以不需要开启代理了。如果你不需要wsl走代理就不用加
[experimental]
autoMemoryReclaim=gradual # gradual | dropcache | disabled
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
完成以后保存,在windows终端输入wsl –shutdown来关闭wsl,后面再打开就是你的新内核了。
本篇文章参考:
wsl编译linux6.x内核:https://enita.cn/2023/0731/bcd47a5aace1
wsl内核开启bbr:https://ch010060.medium.com/%E5%9C%A8wsl2%E4%B8%AD%E5%95%9F%E7%94%A8bbr-51516f906c72
非常感谢,有用的教程