Кросс-компиляция baremetal Rust для Raspberry Pi 3 B из Windows - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь подписаться на этот блог , но на Windows и с последней версией Rust.Мне кажется, что правильный способ делать подобные вещи очень часто меняется с Rust, поэтому я надеюсь на современную адаптацию Windows.

То, что я до сих пор пробовал:

Я установил gcc-arm-embedded .

У меня был непроверенный частичный успех при ручной кросс-компиляции libcore, но затем я переключился на использование рекомендуемой xargo функциональностииз которых (я читал) находится на пути к тому, чтобы быть в конечном итоге включенным в Cargo.Хотя я не очень хорошо разбираюсь в этом, я надеюсь перейти к той части, где я смогу написать / запустить код, а затем, возможно, вернусь к лучшему пониманию компиляции.

С Удивительная помощь * japaric , мне удалось заставить целевую сборку "aarch64" работать для генерации файла .o ( с данного конкретного коммита ).

И эта часть кажетсячтобы проверить:

$ 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

Когда я пытаюсь использовать компоновщик *1025* для встроенного инструментария GNU Arm, я получаю:

$ 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 голосов
/ 21 августа 2018

Я думаю, что это работает!Вещи, которые я выучил:

  • xargo - это хорошо
  • rpi3 достаточно отличается от rpi2, чтобы мои проблемы с выбором инструмента
  • xargo не волнуетто, к чему по умолчанию работает toolchain rustup, потому что я не прошу его связать для меня, и он делает свой собственный выбор цепочки инструментов
  • Мне нужно было нацелиться на aarch64, а не на arm.Для этого я использовал загрузку linaro aarch64 mingw32, распаковал, добавил свою папку bin в мою PATH.Тогда инструменты aarch64 было легко адаптировать из блога.

Для людей, которые хотят сделать это самостоятельно, см. https://github.com/JasonKleban/rust-rasp.Не так сложно!

Я намерен моргнуть индикатором активности на борту, чтобы подтвердить, что у нас действительно есть контроль, но похоже, что это будет довольно сложно для rpi3 (см. Мой файл readme, если он по-прежнему применим)

...