准备步骤
前言:文章操作wsl子系统为ubuntu
1.到LINUX内核官网下载最新版的内核
Linux内核官网:Linux内核官网
点击黄色按钮即可下载最新版本内核
解压
tar xvJf linux-6.9.1.tar.xz
2.使用git clone到github下载WSL2内核源码
到终端输入
sudo git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
克隆到ubuntu本地,过程可能会有点慢
3.进入WSL2-LINUX-Kernel文件夹在Microsoft文件夹内找到config-wsl把他复制到解压内核源码的目录并重命名为.config文件
cp /root/WSL2-Linux-Kernel/Microsoft/config-wsl /root/linux-6.9.1/.config
进入linux-6.9.1文件夹输入
ls -a
列出文件夹全部文件查看是否成功把文件复制该目录下
4.安装编译依赖
输入
apt install build-essential flex bison libssl-dev libelf-dev
安装相关依赖
到这里的话准备工作基本上就完成了,接下来可以开始编译内核了
编译内核
在开始之编译内核前我们可以找到刚才复制的.config文件使用vim打开它
vim .config
找到CONFIG_LOCALVERSION=
可以在其后面添加内容
添加完成后按esc输入:wq回车保存退出
如果出现保存不了就在q后面加!
还可以找到Makefile文件同样使用vim打开输入
vim Makefile
找到EXTRAVERSION =
同样可以在后面添加内容
添加完成后同上操作
现在可以开始编译内核了
输入并回车
make -j8;make modules -j8;make modules_install -j8;make install -j8
开始编译内核
tips:
-j8
是多线程编译,可以让你编译的速度快许多(否则它只是感人的单线程)
也可以使用
make -j$(nproc);make modules -j$(nproc);make modules_install -j$(nproc);make install -j$(nproc)
顶着电脑最大线程数去编译编译速度会更快一些
编译开始后会有一堆内核编译选项,我们一路回车下去全部使用默认的即可
接着,编译就正式开始了,编译时间的长短由电脑的性能决定
编译完成后会提示内核存放的路径
找到Kernel: arch/x86/boot/bzImage is ready (#1)
这个就是内核存放的路径
我们找到这个bzImage文件把它复制到桌面或者其他文件夹
替换内核
接下来就是替换内核了
tips:替换内核之前我们先把wsl子系统关闭后在操作
开始操作:
方法一:
首先我们进入C:\WINDOWS\System32\lxss\tools文件夹
找到kernel文件把他重命名为kernel.back文件作为备份文件
接着把刚才复制出来的bzImage文件放到tools文件夹下并改名为kernel就完成了
最后重新打开wsl子系统
输入
uname -r
tips: uname -r是查看内核版本的意思
查看内核是否更新成功
这个是更新成功的样子
如果方法一替换内核不了就看方法二
方法二:
可以在c盘根目录下或者其他目录下创建一个文件夹用来存放内核
如在c盘创建一个WSL-kernel文件夹
把编译的内核放入此文件夹内
接着在window用户目录(默认是C:\Users\{username(你的用户名)})内创建一个.wslconfig文件
输入
[wsl2]
kernel=C:\\WSL-kernel\\bzImage # bzImage是你的内核名字
保存退出
最后重新打开wsl子系统
输入
uname -r
查看内核是否替换成功
好了,教程到这里就结束了,感谢大家的观看,谢谢
本文参考了知乎两位大佬的文章:
1.WSL2嵌入式开发随笔(2)——使用自己编译的WSL2系统内核 主要是内核替换问题
2.如何让WSL2使用自己编译的内核 主要是编译内核问题
感谢这两位大佬提供的灵感