OpenHarmony开发者论坛

标题: 使用WSL2编译OpenHarmony [打印本页]

作者: 离北况归    时间: 2023-10-17 15:39
标题: 使用WSL2编译OpenHarmony
[md]笔者发现使用wsl(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)编译openharmony镜像比传统虚拟机快3倍以上。编译环境换成wsl后,编译ohos只需要传统虚拟机上三分之一的时间。下面分享使用经验如下:

---


## 为什么使用WSL2比传统虚拟机编译OpenHarmony快?

以下是微软官方给的解释:https://learn.microsoft.com/zh-cn/windows/wsl/about

- Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统)可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且**不会产生传统虚拟机或双启动设置开销**。
- WSL2使用最新、最强大的虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 但是,WSL2不是传统的 VM 体验。
- 传统的 VM 体验可能启动速度慢,是独立的,消耗大量资源,需要你花费时间进行管理。 WSL 2 没有这些属性。

以下是笔者的感受:

- 具体点说就是编译openharmony时cpu的利用率可以达到90%以上。而且编译直接占用的是电脑的内存,而不是给传统虚拟机上分配的内存。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_733,h_733)

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_747,h_733)

- 而传统虚拟机还要设置虚拟机参数,性能是受到制约的。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_757)

## 配置WSL环境

### 检查运行 WSL 2 的要求

若要更新到 WSL 2,需要运行 Windows 10。

- 对于 x64 系统:版本 1903 或更高版本,内部版本为 18362 或更高版本。
- 对于 ARM64 系统:版本 2004 或更高版本,内部版本为 19041 或更高版本。
  或 Windows 11。

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

### 安装 WSL 命令

现在,可以在管理员 PowerShell 或 Windows 命令提示符中输入此命令,然后重启计算机来安装运行适用于 Linux 的 Windows 子系统 (WSL) 所需的全部内容。

```
wsl --install
```

### 启用适用于 Linux 的 Windows 子系统

需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。

以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:

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

### 启用虚拟机功能

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。

以管理员身份打开 PowerShell 并运行:

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

按要求重启使设置生效。

### 下载 Linux 内核更新包

1.下载最新包:

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

2.运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)

### 将 WSL 2 设置为默认版本

使用 wsl --install 命令安装的新 Linux 安装将默认设置为 WSL 2。

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

### 安装所选的 Linux 分发

打开 Microsoft Store,并选择你偏好的 Linux 分发版。

编译openharmony只能安装Ubuntu 20.04和Ubuntu 18.04
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_745,h_403)

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_737,h_415)
首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。

然后,需要为新的 Linux 分发版创建用户帐户。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_225)

- wsl2到底安装在windows系统的那个位置呢?
  C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04LTS_79rhkp1fndgsc\LocalState

### 切换源

在Linux终端输入命令

```
sudo vim /etc/apt/sources.list
```

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_383)

把etc/apt/sources.list文件内容清楚,换下述其中一个源。(以下是`vim`的使用)

- 按一下字母「i」就可以进入「插入模式(Insert mode)」,就可以开始输入文字了。
- 编辑好后按ESC键退出。
- 最后键盘输入:wq,然后文件存盘并退出vim。

```
#163源
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
#中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#阿里云源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
#清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
```

笔者换的是清华源。
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_599)

最后更新源

```
sudo apt update
sudo apt upgrade
```

### 在windowsx下的vscode里面下载好remote - wsl拓展

还可以通过使用 VS Code 中的快捷方式 CTRL+SHIFT+P 调出命令面板,以访问更多 VS Code 远程选项。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_993)

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_551)

## 使用WSL1编译OpenHarmony可以吗?

编译不了,笔者已经踩过坑了。
比较 WSL 1 和 WSL 2:
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_538)

## 使用wsl2编译openharmony镜像

源码获取和编译工具安装的部分不多作介绍了,社区有很多优秀的参考文章值得参考。

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_230,h_198)

![动画.gif](https://dl-harmonyos.51cto.com/i ... 16de0aaddc1bb5b.gif)

![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_638)

## 解决WSL2中删除文件后磁盘空间不释放的问题

- WSL2 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个虚拟磁盘文件特点是可以自动扩容,但是不会自动缩容。
  - 一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后需要手动进行压缩才能释放磁盘空间。

1、文件管理器中搜索ext4.vhdx 文件路径
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_187)

2、备份虚拟磁盘文件所属的 Linux distribution(可选)
在 PowerShell 中执行:

```
# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 备份指定的 Linux distribution 到指定的位置
wsl --export Ubuntu-18.04 D:\Ubuntu-18.04.tar
```

3、压缩虚拟磁盘文件

```
# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart
```

在新打开的 DiskPart 命令窗口中执行:
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_609,h_250)
![image.png](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_254)

```
# 选择虚拟磁盘文件
select vdisk file="C:\xxx\ext4.vhdx(文件管理器中搜索的ext4.vhdx 文件路径)"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk
```

## wsl2修改默认安装路径

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

- **关闭所有的Linux发行版本**
  
  ```shell
  wsl --shutdown
  ```
- **wsl查看已安装的linux发行版本**
  
  ```shell
  C:\Users\wen_fei> wsl -l -v
    NAME              STATE           VERSION
  * Ubuntu-20.04      Stopped         2
  ```
- **导出已安装的发行版本**
  
  ```shell
  C:\Users\wen_fei> wsl --export Ubuntu-20.04 D:\wsl\Ubuntu20.04.tar
  
  将已经安装的Ubuntu-20.04打包成Ubuntu20.04.tar,注意磁盘分区空间应充足
  ```
- **注销已导出的发行版本**
  
  ```shell
  C:\Users\wen_fei> wsl --unregister Ubuntu-20.04
  ```
- **重新安装已导出的发行版本**
  
  ```shell
  C:\Users\wen_fei> wsl --import Ubuntu-20.04 D:\wsl\ubuntu20.04 D:\wsl\ubuntu20.04.tar
  
  wsl --import <安装发行版本名称> <安装发行版本路径> <已导出的发行版本>
  ```
- **删除已导出的发行版本**
  
  ```shell
  删除 D:\wsl\ubuntu20.04.tar
  ```

## wsl2扩容

https://gitee.com/hoeprun-trainn ... l%E6%89%A9%E5%AE%B9

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

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

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

下面介绍扩容的步骤:

- **关闭所有的Linux发行版本**
  
  ```shell
  wsl --shutdown
  ```
- **查找ext4.vhdx文件路径**
  
  - 直接进入以下路径,`CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc`可能有所不同
   
    ```shell
    C:\Users\wenfei\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\\LocalState\ext4.vhdx
    ```
  - 通过**Everything软件**搜索ext4.vhdx名称找到该文件路径
- **以管理员权限打开cmd/PowerShell,执行如下命令进行扩容**
  
  ```shell
  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中执行如下命令
   
    ```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
    ```
  - 重新设置大小
   
    ```shell
    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.
    ```
  - 至此扩容成功

## 最后送大家开源鸿蒙的壁纸

![开源鸿蒙的壁纸.jpeg](https://dl-harmonyos.51cto.com/i ... rocess=image/resize,w_820,h_1446)



[/md]




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