WSL2的安装、应用、内核模块编译安装

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》

  1. 第一步,首先查看所有分发版本:

    wsl-l -v
    
  2. 第二步,导出分发版为tar文件到D盘:

    wsl--export Ubuntu-20.04 d:\ubuntu20.04.tar
    
  3. 第三步,注销当前分发版:

    wsl--unregister Ubuntu-20.04
    
  4. 重新导入并安装分发版在d:\ubuntu (注意我们这里都是WSL2啦);

    wsl--import Ubuntu-20.04 d:\ubuntu2004 d:\ubuntu20.04.tar
    
  5. 设置默认登录用户为安装时用户名 (这里的Username替换成您之前的用户名);

    Ubuntu2004config --default-user Username
    
  6. 删除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

编译源码及安装

  1. 将下载的代码压缩包拷贝到/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错误。

  2. 解压缩
    /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
    执行

  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 查看安装情况:
    在这里插入图片描述

  4. 回到源码目录/home/linuxkernel/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3安装headers

    sudo 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使用自己编译的内核;

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值