惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
T
Threatpost
G
Google Developers Blog
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
The Exploit Database - CXSecurity.com
H
Heimdal Security Blog
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
Hacker News: Ask HN
Hacker News: Ask HN
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Schneier on Security
B
Blog
V2EX - 技术
V2EX - 技术
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Y
Y Combinator Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Spread Privacy
Spread Privacy
The Last Watchdog
The Last Watchdog
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
S
Security @ Cisco Blogs
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
Project Zero
Project Zero
I
Intezer
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
SecWiki News
SecWiki News
Martin Fowler
Martin Fowler

JieJiSS' Blog

为 SQLAlchemy Model 添加 type hint 和 type check Boot an Arch Linux RISC-V using qemu-system 关于基于机器学习的多目标对象追踪算法的文献综述 - JieJiSS' Blog RV64 板子更换 rootfs 指南 - JieJiSS' Blog ACTF2022 safer-tg-bot-{1,2} WP - JieJiSS' Blog A RISC-V gcc pitfall revealed by a glibc update Setup an Arch Linux RISC-V Development Environment 解构赋值踩坑:神秘失踪的数据 - JieJiSS' Blog How's the GDPR (used to) related to my blog Rust is incompatible with LLVM, at least partially python-mtrpacket 在 riscv64 上编译测试不通过 - JieJiSS' Blog 在 RISC-V 上编译 Node.js 16 Redmi AirDots 3 Pro 连接电脑后蓝牙类别不正确的解决方案 为什么 ArrowFunction 不能 new - JieJiSS' Blog Bilibili 2020-10-24 CTF WriteUp - JieJiSS' Blog 对于又一种对SS流式加密的攻击(奇虎团队)的详细分析 - JieJiSS' Blog 在MacOS上配置dnscrypt-proxy(免分流) - JieJiSS' Blog 市县中心点坐标(经纬度) - JieJiSS' Blog 二项式定理及其推广公式的一种简单理解办法 - JieJiSS' Blog
快速获得 RISC-V 开发环境 - JieJiSS' Blog
2022-01-23 · via JieJiSS' Blog

文章目录

  1. 准备工作
  2. 开发
  3. PKGBUILD 说明
  4. 手动操作进入 RISC-V 环境
  5. 可能遇到的问题
    1. GPG unknown public key
    2. Failed retrieving file 'core.db'
  6. 引用

注意:这里说的是基于 QEMU 的开发环境,不是真的 riscv64 机器,买真机请找 SiFive 下单 HiFive Unmatched 板子。


首先,你要有一台 Arch Linux 的机器。

准备工作

需要在一台 Arch Linux 机器上;

假如 ssh 连接不稳定,跑 extra-* 命令时推荐使用 nohup 或类似物;

确保 Linux 内核版本 >= 5.8,否则 glibc 会出问题,还会报怨找不到 /lib/ld-linux-riscv64-lp64d.so.1

  1. 将全部软件包的 riscv64 patch 下载到本地:

    1
    git clone https://github.com/felixonmars/archriscv-packages
  2. 修改 /etc/pacman.conf,在文件末尾添加两行(SiFive 板子上不需要,archlinuxcn 没有 riscv64 的源):

    1
    2
    [archlinuxcn]
    Server = https://repo.archlinuxcn.org/$arch
  3. 安装依赖:

    1
    2
    3
    sudo pacman -Sy
    sudo pacman -S base-devel asp pacman-contrib qemu-user-static binfmt-qemu-static devtools-riscv64
    sudo pacman -S archlinux-keyring archlinuxcn-keyring

    注意,这里曾经需要手动给 devtools 打 patch,现在不需要了,肥猫已经将 devtools-riscv64 放到了 archlinuxcn 源里。如果是 SiFive 板子,可能得手动从 archlinuxcn 拉取 devtools-riscv64 的源代码(PKGBUILD 等)并手动 makepkg -si 得到 .tar.zst 再用 pacman -U foobar.tar.zst 来安装。

  4. 更新 asp 记录:

    1
    asp update
  5. 创建 alias

    1
    2
    3
    cd ~
    mkdir pkg
    alias rv64build="extra-riscv64-build -- -d ~/pkg:/var/cache/pacman/pkg"
  6. 配置 ~/.makepkg.conf

    1
    echo 'MAKEFLAGS="-j15"' >> ~/.makepkg.conf  

开发

(假设你的工作目录为 $HOME,以下用 ~ 代替)

  1. 更新 riscv64 patch 仓库:

    1
    2
    3
    cd ~/archriscv-packages  
    git pull
    cd ~
  2. 获取 x86_64 版本的包源码:

    1
    asp checkout package-name
  3. 将对应的 riscv64 patch(如果存在的话)移动到 x86_64 版本的包源码所在目录:

    1
    cp ./archriscv-packages/package-name/*.patch ./package-name/trunk/
  4. 切换目录,应用 riscv64.patch

    1
    2
    cd ./package-name/trunk/
    patch -Np0 -i ./riscv64.patch
  5. 修改 PKGBUILD 中的 arch

    修改前:

    1
    2
    3
    arch=(any)  
    arch=(x86_64)
    arch=("x86_64")

    分别对应到修改后:

    1
    2
    3
    arch=(any)
    arch=(riscv64)
    arch=("riscv64")

    总之就是把 x86_64 替换成 riscv64,别的不用动。这一步需要在应用 riscv64.patch 之后完成,顺序颠倒可能导致 patch 打不上。

  6. 编译:

    1
    2
    3


    rv64build

PKGBUILD 说明

编译的过程其实就是使用 chroot 切换到一个干净的环境中,然后开始解析 PKGBUILD 文件。riscv64.patch 也是针对 PKGBUILD 文件的。

PKGBUILD 里会有一些东西:

  • source 数组,标明代码来源,在编译时会自动下载到本地。
    • 手动下载可以使用 updpkgsums,它在下载源码的同时会更新 PKGBUILD 中的 checksum。
  • prepare() 负责准备工作,通常是打 patch 和跑一些 sed 命令。
  • build() 负责编译工作,通常是 configure make cmake 之类的。
  • check() 负责测试工作,常见内容:make test 或者 npm run test 或者 ctest 之类的。
  • package() 负责最后的打包工作,例如指定依赖的 .so 文件,不用管。

首先,下载镜像并解压:

1
2
3
4
5
cd ~
wget -c https://archriscv.felixc.at/images/archriscv-20210601.tar.zst
sha512sum archriscv-20210601.tar.zst
mkdir ~/archriscv
sudo bsdtar -xvf archriscv-20210601.tar.zst -C archriscv

其中,sha512sum 结果应为

1
6f012a169fe6f1ea15aeb3283091466e7992f78d823951ee2170940fa030e7fa2394aee11bf67c29943d21579ab42d2262a3d5ca973b5de8be779f338ba1dd44  archriscv-20210601.tar.zst

随后,启动这个 archriscv 容器:

1
sudo systemd-nspawn -D ~/archriscv/ --machine archriscv -a -U

启动容器后,更新软件包:

1
pacman -Syu

检查自己是否在 riscv64 环境下:

1
2
$ uname -m
riscv64

安装一些软件包:

1
pacman -S vim nodejs-lts-gallium

不是所有 x86_64 的包都能装上,我们还在做艰苦的迁移工作。

比如:electron 当前还不支持 riscv64 架构,自然也就无法安装。

可能遇到的问题

GPG unknown public key

如果遇到报错如下:

1
FAILED (unknown public key FC1B547C8D8172C8)

那么说明需要导入 GPG Key。

导入命令:

1
gpg --recv-keys FC1B547C8D8172C8  

你也可以 cat PKGBUILD 并一次性导入其中提到的所有 key。

Failed retrieving file 'core.db'

如果你参考了 Arch Linux Wiki - Building in a clean chroot,在 riscv64 环境下(nspawn,或者你真的有 SiFive 的板子)使用如下命令:

1
2
mkarchroot $CHROOT/root base-devel
arch-nspawn $CHROOT/root pacman -Syu

那么你可能会在 pacman -Syu 时遇到这个报错:

1
error: failed retrieving file 'core.db' from archriscv.felixc.at : The requested URL returned error: 404

这是因为默认的 /etc/pacman.d/mirrorlist 配置有误,可以按如下方式修改:

1
echo "Server = https://archriscv.felixc.at/repo/$arch" > /etc/pacman.d/mirrorlist

之后重新 pacman -Syu 就可以了。

引用

该镜像的 pacman 软件源由中科院软件所 PLCT 实验室 Arch Linux 小队维护。

参考链接:

  1. 使用 QEMU 和 systemd nspawn 搭建 RISC-V 轻量级用户模式开发环境
  2. archbuild 脚本解读
  3. archbuild 使用参考
  4. FS#69563 - core/glibc 2.33 prevents Archlinux runing under systemd-nspawn

来源:https://blog.jiejiss.com/