WSL安装、升级
win10系统上开启WSL参考如下,我先是安装了WSL1,之后又升级到WSL2的。关键是一些Win10上电配置,之后在windows应用商店下载ubuntu即可。
win10上linux子系统的开启、升级及使用;
WSL1升级为WSL2;
更详细的参考,windows官网参考文档,包含wsl安装使用文档。
适用于 Linux 的 Windows 子系统文档;
可以通过命令wsl -l -v
查看WSL版本。
常用命令
# 查看版本
PS C:\Users\Frey> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
PS C:\Users\Frey> wsl --list
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-20.04 (默认)
# 关闭Ubuntu子系统
wsl --terminate Ubuntu
wsl -t Ubuntu
# 关闭WSL
wsl --shutdown
# 启动WSL
wsl
具体更多详细的命令可以参考windows官网的文档:WSL 的基本命令。
当然,也可以利用wsl --help
查看WSL支持的命令。
# windows CMD中输入命令 wsl --help
C:\Users\Frey>wsl --help
版权所有(c) Microsoft Corporation。保留所有权利。
用法: wsl.exe [Argument] [Options...] [CommandLine]
运行 Linux 二进制文件的参数:
如果未提供命令行,wsl.exe 将启动默认 shell。
--exec, -e <CommandLine>
在不使用默认 Linux Shell 的情况下执行指定的命令。
--
按原样传递其余命令行。
选项:
--cd <Directory>
将指定目录设置为当前工作目录。
如果使用了 ~,则将使用 Linux 用户的主页路径。如果路径
以 / 字符开头,将被解释为绝对 Linux 路径。
否则,该值一定是绝对 Windows 路径。
--distribution, -d <Distro>
运行指定分发。
--user, -u <UserName>
以指定用户身份运行。
管理适用于 Linux 的 Windows 子系统的参数:
--help
显示用法信息。
--install [选项]
安装额外的适用于 Linux 的 Windows 子系统分发。
要获得有效分发列表,请使用“wsl --list --online”。
选项:
--distribution, -d [参数]
按名称下载并安装分发。
参数:
有效分发名称(不区分大小写)。
示例:
wsl --install -d Ubuntu
wsl --install --distribution Debian
--set-default-version <Version>
更改新分发的默认安装版本。
--shutdown
立即终止所有运行的分发及 WSL 2
轻型实用工具虚拟机。
--status
显示适用于 Linux 的 Windows 子系统的状态。
--update [Options]
如果未指定任何选项,则将 WSL 2 内核更新
为最新版本。
选项:
--rollback
恢复为 WSL 2 内核的先前版本。
--inbox
仅更新收件箱 WSL 2 内核。不要从 Microsoft Store 下载 WSL。
--web-download
从 Internet 而不是 Microsoft Store 下载最新版本的 WSL。
用于管理适用于 Linux 的 Windows 子系统中的分发的参数:
--export <Distro> <FileName>
将分发导出到 tar 文件。
对于标准输出,文件名可以是 -。
--import <Distro> <InstallLocation> <FileName> [Options]
将指定的 tar 文件作为新分发导入。
对于标准输入,文件名可以是 -。
选项:
--version <Version>
指定要用于新分发的版本。
--list, -l [Options]
列出分发。
选项:
--all
列出所有分发,包括
当前正在安装或卸载的分发。
--running
仅列出当前正在运行的分发。
--quiet, -q
仅显示分发名称。
--verbose, -v
显示所有分发的详细信息。
--online, -o
显示使用“wsl --install”进行安装的可用分发列表。
--set-default, -s <分发>
将分发设置为默认值。
--set-version <分发> <版本>
更改指定分发的版本。
--terminate, -t <分发>
终止指定的分发。
--unregister <分发>
注销分发并删除根文件系统。
WSL导入导出
WSL的导入导出及迁移到其他安装目录的工作,当然也可以打包之后在其他电脑上安装,这样,保证每个WSL环境都和分发版一致,对于团队工作有益。参考:
《手把手教你在Windows下用WSL运行Vitis/Vivado/Petalinux》
-
第一步,首先查看所有分发版本:
wsl-l -v
-
第二步,导出分发版为tar文件到D盘:
wsl--export Ubuntu-20.04 d:\ubuntu20.04.tar
-
第三步,注销当前分发版:
wsl--unregister Ubuntu-20.04
-
重新导入并安装分发版在d:\ubuntu (注意我们这里都是WSL2啦);
wsl--import Ubuntu-20.04 d:\ubuntu2004 d:\ubuntu20.04.tar
-
设置默认登录用户为安装时用户名 (这里的Username替换成您之前的用户名);
Ubuntu2004config --default-user Username
-
删除tar文件(可选):
deld:\ubuntu20.04.tar
有需要扩容的,可以参考微软给的结果:扩展 WSL 2 虚拟硬盘的大小。
其他 - 图形界面、虚拟化
参考:
Windows 下 Linux子系统 WSL 2 开启 KVM 安装 Ubuntu;
WSL2 + Ubuntu + 图形界面安装;
内核模块编译安装
下载对应源码
查看WSL2版本:
root@AlfredLiu:/mnt/e/linux/KernelProj/module/drivers/hello# uname -r
5.10.16.3-microsoft-standard-WSL2
下载链接:https://codeload.github.com/microsoft/WSL2-Linux-Kernel/tar.gz/refs/tags/linux-msft-wsl-5.10.16.3
不要问我下载不一样的版本会怎么样,我没试过。
安装依赖项
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev
sudo apt-get install bc pkg-config
编译源码及安装
-
将下载的代码压缩包拷贝到
/home
目录cp WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3.tar.gz /home/linuxkernel/
不能在
/mnt/
下的目录中编译,否则make modules
时会报错:root@xxxLiu:/mnt/e/linux/KernelProj/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3# make modules KCONFIG_CONFIG=Microsoft/config-wsl CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh DESCEND objtool CHK include/generated/compile.h make[2]: *** No rule to make target 'net/netfilter/xt_HL.o', needed by 'net/netfilter/built-in.a'. Stop. make[1]: *** [scripts/Makefile.build:496: net/netfilter] Error 2 make: *** [Makefile:1801: net] Error 2
此外还会遇到因为windows系统不区分大小写,导致内核编译出现ipt_ECN.h: No such file or director错误。
-
解压缩
在/home/linuxkernel/
目录执行tar -zxvf WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3.tar.gz
之后进入内核源码目录
/home/linuxkernel/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
执行 -
编译并查看模块的安装情况
make KCONFIG_CONFIG=Microsoft/config-wsl -j8 make KCONFIG_CONFIG=Microsoft/config-wsl modules_install -j8 # 网上文章也有这样操作的,make modules和make install不一定需要 cp Microsoft/config-wsl .config make -j$(nproc) make modules -j$(nproc) make modules_install -j$(nproc) make install -j$(nproc)
目录
/home/linuxkernel/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
查看安装情况:
-
回到源码目录
/home/linuxkernel/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
安装headerssudo make headers_install ARCH=x86_64 INSTALL_HDR_PATH=/usr
安装之后就可以正常导入模块了。
sudo insmod hello.ko //插入模块 sudo rmmode hello // 卸载模块 modinfo hello.ko // 查看模块信息 lsmod //查看系统模块 dmesg // 查看系统日志信息
root@xxxLiu:/mnt/e/linux/KernelProj/module/drivers/hello# insmod hello.ko root@xxxLiu:/mnt/e/linux/KernelProj/module/drivers/hello# dmesg -c [119312.842837] WSL2: Performing memory compaction. [119494.865986] WSL2: Performing memory compaction. [119615.930880] WSL2: Performing memory compaction. [119676.935178] WSL2: Performing memory compaction. [119948.483221] Hello World exit [121215.875247] Hello World enter [121237.950885] WSL2: Performing memory compaction. root@xxxLiu:/mnt/e/linux/KernelProj/module/drivers/hello# rmmod hello root@FreyLiu:/mnt/e/linux/KernelProj/module/drivers/hello# dmesg -c [121262.044096] Hello World exit root@xxxLiu:/mnt/e/linux/KernelProj/module/drivers/hello#
参考:
WSL升级到最新版本Linux内核headers的方法;
WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法;
wsl2 内核编译;
如何让WSL2使用自己编译的内核;