从Windows交叉编译Raspberry Pi 3 B的裸机Rust

时间:2018-06-23 21:20:51

标签: windows rust llvm cross-compiling raspberry-pi3

我是trying to follow this blog,但是在Windows和最新的Rust上。在我看来,Rust经常更改这种方式的正确方法,因此我希望能够进行Windows的最新适应。

到目前为止我已经尝试过:

我安装了gcc-arm-embedded

我无法手动交叉编译libcore来验证部分成功,但是后来我改用推荐的xargo,其功能(我读到)最终将被包含在Cargo中。虽然我不太了解其中的任何内容,但我还是希望能够进入可以编写/运行代码的部分,然后也许我可以重新更好地理解编译。

使用japaric's awesome help,我能够获得针对“ aarch64”的目标版本,以生成.o文件(as of this particular commit)。

这部分似乎可以验证:

$ file target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o
target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped

当我尝试使用GNU Arm Embedded Toolchain链接器时,我得到:

$ arm-none-eabi-gcc -O0 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o -o kernel.elf target/aarch64-raspi3-none-elf/release/deps/rust_rasp-ed0c2377e0a7df81.o: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status

#rust IRC聊天室帮助告诉我rpi3是aarch64,而不是arm,因此我需要找到一个aarch64链接程序...

1 个答案:

答案 0 :(得分:0)

我认为它正在工作!我学到的东西:

  • xargo很好
  • rpi3与rpi2的差异足以导致我在选择工具时遇到问题
  • xargo不在乎工具链rustup的默认设置,因为我不是要求它为我链接,而是由它自己选择工具链
  • 我需要定位aarch64,而不是arm。为此,我使用了linaro aarch64 mingw32下载文件,将其解压缩,并将其bin文件夹添加到PATH中。然后aarch64工具很容易从博客中适应。

对于想自己做的人,请参见https://github.com/JasonKleban/rust-rasp。没那么复杂!

我打算眨眼以确认我们确实拥有控制权为主导的机上活动,但是在rpi3上看起来有点复杂(请参阅我的自述文件,如果仍然适用)