#environment #bootloader #apps #run-time #api-bindings #basic #open-firmware

nightly no-std ieee1275

构建OpenFirmware/IEEE1275应用程序的安全且易于使用的包装器

2个版本

0.1.1 2023年3月2日
0.1.0 2022年5月7日

#669 in 嵌入式开发

MIT许可证

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