OpenHarmony开发者论坛

标题: Win10电脑安装配置WSL方法 [打印本页]

作者: wenfei6316    时间: 2024-5-8 22:26
标题: Win10电脑安装配置WSL方法
[md]# Win10电脑安装配置WSL方法

## 一、准备工作

**1. 请确认windows的c盘空间充足, 建议c盘至少具有50G以上的空余空间**

**2. 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11**

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”  。

## 二、wsl升级到wsl2

### 2.1 查看wsl的版本

```
因最新的rk3568的编译必须基于wsl2才可以,wsl编译会阻塞直接不编译,所以如果电脑的版本是wsl的必须升级到wsl2,如果系统是win11则直接是wsl2。注意这里的wsl或者wsl2指的是在wsl中安装的Ubuntu所对应的版本,可通过以下命令查看:
```


```
命令wsl -l -v 是命令的缩写,后面VERSION即是所对应的版本,如果对应的版本是1则需要升级,如果是2则不需要升级。
```


```
C:\Users\wen_fei>wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

C:\Users\wen_fei>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1
```

### 2.2 升级wsl2

* **以管理员身份打开 PowerShell或者cmd窗口,然后输入以下命令并重启计算机:**
  **(“开始”菜单 >“PowerShell”> 单击右键 >“以管理员身份运行”)**

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

```
其中,第一行代码为启用“适用于 Linux 的 Windows 子系统”可选功能,第二行代码为启用“虚拟机平台”可选功能,该步骤为安装wsl2必须,若不希望安装wsl2则不用输入第二行代码
```


* **下载Linux内核更新包并安装**

```
链接:
```

[适用于x64计算机的WSL2 Linux内核更新包](https://wslstorestorage.blob.cor ... /wsl_update_x64.msi)

* **打开 PowerShell或者cmd窗口,输入以下命令,将 WSL 2 设置为默认版本**
  这里的设置表示后面基于wsl安装的系统(一般指Linux系统)都是wsl2
  Note:本项设置只能使安装新的 Linux 发行版时将默认版本设置为WSL2,而不能更改已经安装的Linux分支

```
wsl --set-default-version 2
```

**若希望将WSL1设置为默认版本则输入命令** `wsl --set-version`。

* **安装Linux分支**
  打开 Microsoft Store搜索Linux并选择需要的分支,此处建议选择Ubuntu 20.04 LTS,并点击获取
* **安装完成**
  首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒
  然后,需要为新的 Linux 分发版创建用户帐户和密码
* **修改已经安装的基于wsl的Linux发行版为wsl2**
  使用命令:wsl --set-version Ubuntu-20.04 2,这个过程会根据你该系统当前使用情况,越大时间越长,可能会持续几个小时,最好晚上操作。
  操作之前需要使用命令:wsl -t Ubuntu-20.04先关闭Linux发行版
  ```
  C:\Users\wen_fei>wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-20.04    Running         1

  C:\Users\wen_fei>wsl -t Ubuntu-20.04

  C:\Users\wen_fei>wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-20.04    Stopped         1

  C:\Users\wen_fei>wsl --set-version Ubuntu-20.04 2
  正在进行转换,这可能需要几分钟时间...
  有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
  转换完成。

  C:\Users\wen_fei>wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-20.04    Running         2
  ```

## 三、wsl安装Ubuntu

### 3.1 准备工作

* **控制面板--->程序和功能--->启用或关闭Windows功能**
  * **将Hyper-V全部勾选上**
  * **将适用于Linux的Windows子系统勾选上**
* **下载Ubuntu20.04**
  **打开Microsoft Store,输入Ubuntu,找到Ubuntu 20.04.4 LTS,点击获取安装即可**

### 3.2 wsl修改默认安装路径**<a name="wsl修改默认安装路径"></a>**

```
如果C盘空间足够大(1T及以上)可以不用考虑该步骤
```


* **关闭所有的Linux发行版本**
  ```
  wsl --shutdown
  ```
* **wsl查看已安装的linux发行版本**
  ```
  C:\Users\wen_fei> wsl -l -v
    NAME              STATE           VERSION
  * Ubuntu-20.04      Stopped         2
  ```
* **导出已安装的发行版本**
  ```
  C:\Users\wen_fei> wsl --export Ubuntu-20.04 D:\wsl\Ubuntu20.04.tar

  将已经安装的Ubuntu-20.04打包成Ubuntu20.04.tar,注意磁盘分区空间应充足
  ```
* **注销已导出的发行版本**
  ```
  C:\Users\wen_fei> wsl --unregister Ubuntu-20.04
  ```
* **重新安装已导出的发行版本**
  ```
  C:\Users\wen_fei> wsl --import Ubuntu-20.04 D:\wsl\ubuntu20.04 D:\wsl\ubuntu20.04.tar

  wsl --import <安装发行版本名称> <安装发行版本路径> <已导出的发行版本>
  ```
* **删除已导出的发行版本**
  ```
  删除 D:\wsl\ubuntu20.04.tar
  ```

### 3.3 配置Ubuntu

* **设置wsl的Ubuntu默认登录账号**
  **方法一:**
  **打开Ubuntu的/etc/wsl.conf文件,没有就新建,写入如下内容后重新打开即可**

  ```
  [user]
  default=username
  ```

  **方法二:**

  ```
  #如果是Ubuntu20.04:
  ubuntu2004.exe config --default-user username
  #如果是Ubuntu18.04:
  ubuntu1804.exe config --default-user username
  #如果是debian:
  debian.exe config --default-user username
  ```
* **Ubuntu环境配置**
  **参考文档进行环境搭建:**[Ubuntu环境配置](ubuntu_env_config.md)

### 3.4 wsl扩容**<a name="wsl扩容"></a>**

**WSL 2 使用虚拟硬盘 (VHD) 来存储 Linux 文件。 在 WSL 2 中,VHD 在 Windows 硬盘驱动器上表示为 vhdx 文件。**

**WSL 2 VHD 使用 ext4 文件系统。 此 VHD 会自动调整大小以满足你的存储需求,并且其最大大小为 256GB。 如果 Linux 文件所需的存储空间超过此大小,则可能需要将其展开。 如果你的分发版大小增长到大于 256GB,则会显示错误,指出磁盘空间不足。 可以通过扩展 VHD 大小来纠正此错误。**

**【NOTE】**:扩容的前提条件是电脑上wsl必须是wsl2,否则不能扩容。

**下面介绍扩容的步骤:**

* **关闭所有的Linux发行版本**
  ```
  wsl --shutdown
  ```
* **查找ext4.vhdx文件路径**
  * **直接进入以下路径,**`CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc`可能有所不同
    ```
    C:\Users\wenfei\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\\LocalState\ext4.vhdx
    ```
  * **通过****Everything软件**搜索ext4.vhdx名称找到该文件路径
* **以管理员权限打开cmd/PowerShell,执行如下命令进行扩容**
  ```
  diskpart
  Select vdisk file="DISK_PATH"
  detail vdisk
  expand vdisk maximum=<sizeInMegaBytes>
  exit

  # 个人操作方法
  PS C:\WINDOWS\system32> diskpart

  Microsoft DiskPart 版本 10.0.22000.653

  Copyright (C) Microsoft Corporation.
  在计算机上: DESKTOP-JGDI2N8

  DISKPART> Select vdisk file="D:\wsl\ubuntu20\ext4.vhdx"

  DiskPart 已成功选择虚拟磁盘文件。

  DISKPART> detail vdisk

  设备类型 ID: 0 (未知)
  供应商 ID: {00000000-0000-0000-0000-000000000000} (未知)
  状态: 已添加
  虚拟大小:  256 GB
  物理大小:  248 GB
  文件名: D:\wsl\ubuntu20\ext4.vhdx
  为子级: 否
  父文件名:
  找不到关联的磁盘号。

  DISKPART> expand vdisk maximum=512000  # 注意这里的单位是MB

    100 百分比已完成

  DiskPart 已成功扩展虚拟磁盘文件。

  DISKPART> exit

  退出 DiskPart...
  ```
* **打开虚拟机Ubuntu进行重新挂载**
  * **确认Ubuntu挂载的磁盘,在Ubuntu的shell中执行如下命令**
    ```
    sudo mount -t devtmpfs none /dev
    mount | grep ext4

    # 个人操作方法
    wen_fei@DESKTOP-JGDI2N8:~
    $ sudo mount -t devtmpfs none /dev
    [sudo] password for wen_fei:
    mount: /dev: none already mounted on /mnt/wsl.
    wen_fei@DESKTOP-JGDI2N8:~
    $ mount | grep ext4
    /dev/sdb on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)

    # 确定挂载的磁盘是sdb
    ```
  * **重新设置大小**
    ```
    sudo resize2fs /dev/sdb

    # 个人操作方法
    wen_fei@DESKTOP-JGDI2N8:~
    $ sudo resize2fs /dev/sdb
    [sudo] password for wen_fei:
    resize2fs 1.45.5 (07-Jan-2020)
    Filesystem at /dev/sdb is mounted on /; on-line resizing required
    old_desc_blocks = 32, new_desc_blocks = 63
    The filesystem on /dev/sdb is now 131072000 (4k) blocks long.
    ```
  * **至此扩容成功**

### 3.5 重新挂载wsl2的磁盘ext4.vhdx

**有时候我们因为系统问题,或者操作不当导致我们无法通过Ubuntu2004.exe或者wsl等启动虚拟机,但是虚拟机对应的磁盘ext4.vhdx文件还在,这时我们想要将磁盘重新与Ubuntu2004.exe关联上的操作方法如下:**

* **重新安装Ubuntu虚拟机**
  **在搜索窗口找到** `Ubuntu 20.04 on Windows`程序,然后点击运行,或者通过命令 `wsl --install -d ubuntu-20.04`命令安装,安装成功后会在安装目录下生成文件ext4.vhdx
* **执行命令 `wsl --shutdown`关闭虚拟机**
* **进入上面的安装目录,然后将ext4.vhdx文件删除**
  **找到安装目录的方法很多种,可自行网上搜索,最快的方式是通过****Everything软件**直接搜索ext4.vhdx就能找到
* **将自己的ext4.vhdx拷贝到上面的安装目录下**
  **【Note】:**注意自己的Linux版本一定要和安装的Linux发行版本一致
* **此时重新打开虚拟机即是自己的磁盘内容了**
* **如果需要迁移路径,可参考[3.2 wsl修改默认安装路径](#wsl%E4%BF%AE%E6%94%B9%E9%BB%98%E8%AE%A4%E5%AE%89%E8%A3%85%E8%B7%AF%E5%BE%84)**
* **安装完成的最大空间是默认的256G,如果想扩容请参考[3.4 wsl扩容](#wsl%E6%89%A9%E5%AE%B9)**

## 四、常见问题与解决方法

### 4.1 在Microsoft Store下载时需要登陆账号但无法登录

**可以尝试将连接外网的适配器属性中更改Internet协议版本4首选DNS服务器为4.2.2.2,成功登陆后再改回自动获得即可**

**若以上尝试失败,可考虑在以下链接下载并安装**

[Ubuntu 20.04](#)

**如果愿意,你也可通过命令行下载首选的发行版。 例如,下载 Ubuntu 20.04:**

```
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing
```

### 4.2 为什么要使用WSL2

**对本项目而言,使用WSL1进行编译时会在某些地方卡住相当一段时间,虽然最终编译通过了,但用时很久,而WSL2没有这个问题,故更推荐WSL2。**

### 4.3 安装Ubuntu20.04.5时报0x800701bc的问题解决

**本地wsl没有升级到wsl2,参考2.2升级wsl2即可**

### 4.4 其他问题参考官网的问题列表

**请参阅**[疑难解答](https://docs.microsoft.com/zh-cn ... installation-issues)

### 4.5 安装内核编译/内核头文件/驱动调试

```
# uname -r
5.10.16.3-microsoft-standard-WSL2

# cd /opt

# git clone https://gitee.com/mirrors/WSL2-Linux-Kernel.git --branch linux-msft-wsl-5.10.16.3

# cd WSL2-Linux-Kernel

# cp Microsoft/config-wsl .config

# make -j$(nproc)

# make -j$(nproc)  modules_install

# ls -lh /lib/modules/5.10.16.3-microsoft-standard-WSL2
total 200K
lrwxrwxrwx 1 root root   47 Dec 24 14:37 build -> /opt/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
drwxr-xr-x 2 root root 4.0K Dec 24 14:37 kernel
-rw-r--r-- 1 root root   45 Dec 24 14:37 modules.alias
-rw-r--r-- 1 root root   12 Dec 24 14:37 modules.alias.bin
-rw-r--r-- 1 root root  14K Dec 24 14:37 modules.builtin
-rw-r--r-- 1 root root  40K Dec 24 14:37 modules.builtin.alias.bin
-rw-r--r-- 1 root root  15K Dec 24 14:37 modules.builtin.bin
-rw-r--r-- 1 root root  97K Dec 24 14:37 modules.builtin.modinfo
-rw-r--r-- 1 root root    0 Dec 24 14:37 modules.dep
-rw-r--r-- 1 root root   12 Dec 24 14:37 modules.dep.bin
-rw-r--r-- 1 root root    0 Dec 24 14:37 modules.devname
-rw-r--r-- 1 root root    0 Dec 24 14:37 modules.order
-rw-r--r-- 1 root root   55 Dec 24 14:37 modules.softdep
-rw-r--r-- 1 root root   49 Dec 24 14:37 modules.symbols
-rw-r--r-- 1 root root   12 Dec 24 14:37 modules.symbols.bin
lrwxrwxrwx 1 root root   47 Dec 24 14:37 source -> /opt/WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
```

## 五、wsl常用的命令

```
wsl -l:查看有电脑上有多少个运行的wsl
wsl -t xxxx:关闭执行的wsl
wsl --unregister xxxx:注销指定的wsl
wsl --terminate xxxx: 和wsl -t命令一样

where xxxx:xxxx命令在那个目录下
```
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5