Skip to content
Avimitin edited this page May 31, 2022 · 17 revisions

项目内容

我们的主要工作内容是把 Arch Linux x86_64 架构上的软件包移植到 RISC-V 64 位架构上。由于指令集差异,这些软件有时没法在 RISC-V 上正常通过编译和打包流程。我们的工作就是给软件的上游提交报告,尝试移植并 暂时 将修复的 patch 放在这个仓库里。我们的终极目标是消灭这个代码仓库里的所有修复,在上游 RISC-V 的优先级提高。

工作流程

在我们的 工会页 有一列的包状态记录,最右边标记 *failing 的都是无法正常编译打包的软件包。第二列 user 列则记录了这个包目前由哪位用户负责,你可以在工会页里找一个还没有人领取的包尝试进行修复。

每个失败的包的名字都是一个超链接,你可以点进去看失败的构建日志

打包前的环境部署

在修复之前,你需要先配置一下必要的构建环境。

archbuild

Arch Linux 里软件打包的脚本是一个 PKGBUILD 文件,其本质是一个 shell 脚本。如果你不熟悉 PKGBUILD 脚本的内容,可以在 Arch Linux Wiki 阅读学习。如果你不熟悉打包流程,可以参考 Creating packages 。在本仓库工作的过程中我们会默认你已经有了基础的打包知识基础。

为了在干净的环境下打包,Arch Linux 提供了 devtools 工具。而我们需要为 RISC-V 架构适配的 devtools。这个特殊版本的 devtools 在 Arch Linux CN 上有提前修改打包好的版本,你可以添加 Arch Linux CN 源并使用 pacman 下载。

具体操作步骤可以看 ArchBuild 脚本解读#安装 devtools

QEMU

在平常调试的时候,你可能需要一个虚拟机环境。你可以参考这一篇 Wiki 来搭建 QEMU user 虚拟机。如果你需要 QEMU system 虚拟机,可以参考使用 CoelacanthusHex/archriscv-scriptlet的脚本。

开始打包

首先调用 asp 脚本下载 PKGBUILD 脚本,这里我拿 stylua 这个包举例 :

asp checkout stylua

执行完命令之后,在当前目录下将会有一个同名的目录,而 PKGBUILD 则在该目录的子目录 stylua/trunk 下:

cd stylua/trunk
ls

进入目录之后,我们首先需要修改 PKGBUILD 的 arch 数组。你可以使用自己熟悉的编辑器在数组里添加值 riscv64,也可以用下面这个命令:

setconf PKGBUILD arch '(riscv64 x86_64)'

修改完之后执行 extra-riscv64-build 命令来执行打包构建:

# 创建一个临时目录
CACHE_DIR=$(mktemp -d -t 'rvpkg_cache_XXX')
extra-riscv64-build -- -d "$CACHE_DIR:/var/cache/pacman/pkg/"

extra-riscv64-build 是 devtools 包提供的一个脚本文件,它可以帮我们快速建起干净的 chroot 环境并在里面执行 makepkg 打包。而 -d 参数将会被传给下一层的 makechrootpkg 程序。-d 参数主要提供了一层路径映射,它将会把 $CACHE_DIR 路径绑定到 chroot 里的 /var/cache/pacman/pkg 目录上。一个独立干净的目录可以避免缓存签名冲突。

执行完命令之后等待一会,archbuild 会报错:

...

error: Error loading target specification: Could not find specification for target "riscv64-unknown-linux-gnu".

...

接下来就是要尝试进行修复了。

尝试修复

Clone this wiki locally