虽然过程很简单但还是记录一下.
安装crossdev
1 | emerge -av sys-devel/crossdev |
创建 overlay
然后先来建立一个 overlay,让crossdev
自动把生成的 ebuild 放在里面[1]:
1 | mkdir -p /var/db/repos/cross-riscv64-linux-gnu/{profiles,metadata} |
这里的riscv64-linux-gnu
是Target Triple,后面还会用到.
注意如果用 Git 方式同步gentoo
源(或者其他Manifest
文件不含 ebuild 的校验码的方式),需要在layout.conf
里添加一行:
1 | echo 'thin-manifests = true' >> /var/db/repos/cross-riscv64-linux-gnu/metadata/layout.conf |
最后启用这个 overlay.在/etc/portage/repos.conf/crossdev.conf
中写入:
1 | [cross-riscv64-linux-gnu] |
构建工具链
执行以下命令安装工具链:
1 | crossdev --stable --ex-gdb -t riscv64-linux-gnu -oS gentoo |
此处各个参数的含义如下:
--stable
表示安装稳定 keyword 的版本,不带--stable
会安装最新版(~*
);--ex-gdb
表示除了 GCC 等基本工具外还要安装 GDB;-t
指定 target triple,可以用crossdev -t help
列出合法的值;-oS
表示从哪些 overlay 里找 ebuild,这里指定gentoo
是因为crossdev
不知为什么默认会使用gentoo-zh
里的gdb
.
可能会因为/etc/portage/package.mask
等配置文件存在但不是目录而失败,这时只要把它们转换成目录即可(创建同名目录,把原来的配置文件变成目录下的一个普通文件).
执行完该命令后会得到/usr/riscv64-linux-gnu
这个目录.
可以试着编译一个简单的程序:
1 | cd /tmp |
安装 QEMU
可以用 QEMU 来直接运行 riscv64 程序.首先要启用 QEMU 模拟 riscv64 架构的功能,比如在/etc/portage/package.use
中添加
1 | app-emulation/qemu qemu_softmmu_targets_riscv64 qemu_user_targets_riscv64 |
然后重新安装 QEMU:
1 | emerge -av qemu |
现在可以试着运行上面编译的hello
程序:
1 | qemu-riscv64 -L /usr/riscv64-linux-gnu /tmp/hello |