2个版本
0.1.1 | 2023年3月2日 |
---|---|
0.1.0 | 2022年5月7日 |
#669 in 嵌入式开发
21KB
386 行
OpenFirmware Rust环境
这是尝试创建一个类似于 uefi-rs 的基础运行时环境。
目前,此项目仅针对PowerVM/POWER环境和QEMU/SLOF。与较旧的PowerPC Mac的兼容性不是优先事项,尽管欢迎易于维护的贡献。
构建说明
要构建示例引导加载程序有效负载,请使用位于“template”目录下的crate。
默认情况下,已将其配置为交叉编译crate。输出二进制文件需要是PPC32位大端。您需要一个正常工作的powerpc gcc编译器,您可能需要调整.cargo/config
以指向正确的二进制文件。
您还需要使用rustup
安装powerpc目标,目前此crate需要nightly,因此您需要将其设置为默认。
$rustup target add powerpc-unknown-linux-gnu
要创建有效的构建,您需要使用--release,调试构建会失败(原因尚不清楚)
$ rustup default nightly
$ cargo +nightly build --release --target powerpc-unknown-linux-gnu
测试
您需要qemu-system-ppc64le和SLOF固件二进制文件,在fedora中,您可以通过具有GPT分区表和4MB PReP分区(其中将写入二进制文件)的磁盘镜像来运行它
$ fallocate -l 2G disk.img
$ cfdisk -z disk.img
┌ Select label type ───┐
│◼gpt◼◼◼◼◼◼◼◼◼◼◼◼◼
│ dos │
│ sgi │
│ sun │
└──────────────────────┘
Disk: disk.img
Size: 2 GiB, 2147483648 bytes, 4194304 sectors
Label: gpt, identifier: B0FB3AB0-6C25-8D49-97F1-92E9AD879852
Device Start End Sectors Size Type
>> disk.img1 2048 10239 8192 4M PowerPC PReP boot
disk.img2 10240 4194270 4184031 2G Linux filesystem
┌───────────────────────────────────────────────────────────────────────────────────┐
│Partition UUID: 91A7B5D3-6237-834E-A3F2-6D7D87CB3A57 │
│Partition type: PowerPC PReP boot (9E1A2D38-C612-4316-AA26-8B49521E5A8B) │
└───────────────────────────────────────────────────────────────────────────────────┘
[ Delete ] [ Resize ] [ Quit ] [ Type ] [ Help ] [ Write ] [ Dump ]
为了部署镜像,我们需要将磁盘镜像设置在环回设备中
$ sudo losetup -P -f disk.img
$ losetup -a
$ sudo losetup -a
/dev/loop0: [0043]:2771583 (/path/to/disk.img)
$ sudo dd if=target/powerpc-unknown-linux-gnu/release/of-rs-template of=/dev/loop0p1
最后,我们需要启动QEMU
$ qemu-system-ppc64 -M pseries-6.1 -bios /usr/share/qemu/slof.bin -drive file=disk.img
您应该在模拟器输出中看到“Hello from Rust into Open Firmware”消息。
依赖项
~205KB