环境准备

wsl环境配置(prompt)

目标路径可以自行替换

我使用 Windows + WSL2。请帮我写一套完整、稳妥的操作步骤,实现以下目标:

1. 安装指定版本的 Ubuntu 22.04,而不是默认 Ubuntu 版本。
2. 将 Ubuntu 22.04 设置为 WSL 默认发行版。
3. 给 Ubuntu 22.04 更换 apt 软件源,优先使用国内镜像源,例如清华源或阿里源。
4. 将 WSL 的 Ubuntu 22.04 文件系统迁移到指定磁盘目录,例如 `D:\\WSL\\Ubuntu-22.04`。
5. 说明如何使用 `wsl --export`、`wsl --unregister`、`wsl --import` 完成迁移。
6. 说明迁移后默认用户变成 root 时,如何通过 `/etc/wsl.conf` 修复。
7. 标注哪些命令需要在 PowerShell 管理员中执行,哪些命令需要在 Ubuntu 终端中执行。
8. 对危险步骤给出提醒,例如 `wsl --unregister` 会删除原发行版注册信息,必须先确认导出成功。
9. 最后给出一份可直接复制执行的命令清单。

我的目标路径是:`D:\\WSL\\Ubuntu-22.04`
备份 tar 路径是:`D:\\WSL\\backup\\ubuntu22.tar`
请使用中文回答,命令尽量完整,不要省略关键步骤。

前置环境

工具集准备

sudo apt update

sudo apt install -y \\
  binutils binutils-dev \\
  git git-lfs git-core \\
  gnupg flex bison gperf \\
  build-essential zip curl wget unzip tar rsync \\
  zlib1g-dev gcc-multilib g++-multilib \\
  gcc-arm-linux-gnueabi gcc-arm-none-eabi \\
  libc6-dev-i386 libc6-dev-amd64 \\
  lib32ncurses5-dev lib32z1-dev lib32z-dev \\
  x11proto-core-dev libx11-dev \\
  libgl1-mesa-dev libxml2-utils libxml2-dev xsltproc \\
  m4 bc gnutls-bin ruby \\
  genext2fs device-tree-compiler make \\
  libffi-dev e2fsprogs pkg-config perl openssl libssl-dev \\
  libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio \\
  doxygen liblz4-tool openjdk-8-jre default-jre default-jdk \\
  gcc g++ texinfo dosfstools mtools \\
  libncurses5 libncurses5-dev libncursesw5 \\
  apt-utils scons python3 python3-pip python3-setuptools \\
  python3-distutils \\
  grsync xxd libglib2.0-dev libpixman-1-dev \\
  kmod jfsutils reiserfsprogs xfsprogs squashfs-tools \\
  pcmciautils quota ppp libtinfo-dev libtinfo5 \\
  vim ssh locales ccache

repo 安装(prompt)

我在 WSL2 Ubuntu 22.04 中,后续要用 `repo` 拉取远程代码。
请先给我一套前置环境安装和配置命令,不要长篇介绍。
内容包括:检查 WSL2、更新 apt、安装 git/curl/python3/python3-pip/ca-certificates/gnupg/openssh-client/unzip/xz-utils/build-essential,
配置 Git 用户信息和换行规则,生成并配置 SSH key,安装 repo 到 `~/bin`,配置 PATH,验证 repo。
请区分 PowerShell 和 Ubuntu 终端命令,最后给出可直接复制执行的完整命令清单。

拉取源码

切换到你想存储代码的文件夹位置(预计编译后共占用空间 ~133G)

repo init \\
  -u <https://gitcode.com/openharmony/manifest.git> \\
  -b master \\
  --repo-url=https://gitee.com/oschina/repo.git \\
  --repo-branch=stable \\
  --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

拉取源码后,需要运行前置脚本

bash build/prebuilts_download.sh

这一步会下载编译器、Node、GN/Ninja、Clang 等预置工具,时间会比较长。OpenHarmony 常见编译流程要求在源码根目录执行这个脚本安装编译器和二进制工具。

编译指定模块(自行替换 MODULE_NAME )

./build.sh --product-name rk3568 --build-target MODULE_NAME

期中出现模块缺失使用 apt install 进行安装

硬件准备

RK3568刷机

系统镜像

每日构建:https://dcp.openharmony.cn/workbench/cicd/dailybuild/dailylist

选择repo拉取对应时间的dayu200镜像进行下载。

烧录工具

仓库地址:https://gitee.com/hihope_iot/docs

先安装 DriverAssitant 驱动,在对应的工具文件夹内有 DriverInstall.exe。

连接到开发版后有以下界面

image.png

按住开发板上的recovery再按一下reset,烧录软件会变化为“发现一个LOADER设备”

image.png

右键空白处选择导入配置,选择到下载后镜像的 .cfg 即可

image.png

之后再在每一项有打勾的项点击最后一格空白处可以选择文件对应上去。

对应完后点击执行烧录即可。

修改源码后上板

修改拉取的openharmony源码后编译,在out文件夹中找到编译产物 .so

定位对应动态库在板中系统中的位置

hdc shell
cd system
find . -name XXX.z.so
exit

做替换推送

hdc target mount
hdc file send XXX.z.so XXX/XXX/XXX(find出来的路径)

重启设备使用demo验证

hdc shell reboot

例如编写installerdemo

async installAllApps() {
  const basePath = '/data/storage/el1/base';

  try {
    const bundleInstaller = await installer.getBundleInstaller();

    // 列出目录内容
    let files: string[] = fs.listFileSync(basePath);
    if (files && files.length > 0) {
      let detail = files.map((fileName: string) => {
        let fullPath = `${basePath}/${fileName}`;
        try {
          let stat = fs.statSync(fullPath);
          return `${fileName}    size=${stat.size}`;
        } catch (e) {
          return `${fileName}    size=unknown`;
        }
      });
      this.fileList = detail.join('\\n');
    } else {
      this.fileList = '目录为空';
    }

    // 自动筛选当前目录下所有 .app 文件
    let appFiles: string[] = files
      .filter((fileName: string) => fileName.toLowerCase().endsWith('.app'))
      .map((fileName: string) => `${basePath}/${fileName}`);

    if (appFiles.length === 0) {
      this.message = '.app 安装失败';
      this.installResult = `未找到任何 .app 文件,目录:${basePath}`;
      return;
    }

    let validAppFiles: string[] = [];
    for (let filePath of appFiles) {
      try {
        fs.accessSync(filePath);
        validAppFiles.push(filePath);
      } catch (e) {
        console.error(`文件不可访问: ${filePath}`);
      }
    }

    if (validAppFiles.length === 0) {
      this.message = '.app 安装失败';
      this.installResult = '找到 .app 文件名,但都无法访问';
      return;
    }

    await bundleInstaller.install(validAppFiles);

    this.message = '.app 安装成功';
    this.installResult = `安装成功,共安装 ${validAppFiles.length} 个 .app:\\n${validAppFiles.join('\\n')}`;
    console.info(this.installResult);
  } catch (err) {
    const error = err as BusinessError;
    this.message = '.app 安装失败';
    this.installResult = `错误信息:${error.message}\\n错误码:${error.code}`;
    console.error('安装失败:', error.code, error.message);
  }
}

TDD测试

新建一个文件夹用于测试作为根目录

下载测试

新建一个目录用于存放测试用例,作为测试目录

经过门禁编译后,从通过记录中寻找编译后的TDD测试用例进行后续样例测试

image.png

将unittest文件夹放入测试目录。

准备测试框架

在根目录下拉取仓库

https://gitcode.com/openharmony/testfwk_developer_test

https://gitcode.com/openharmony/testfwk_xdevice

再进入 developer_test\\config\\user_config.xml 中设置

<!--  configure test cases path  -->
<test_cases>
	<dir>测试目录</dir>
</test_cases>

后续点开 developer_test 文件夹点击运行 start.bat 选中要测试的设备后

运行 run -t UT 即可