Кросс-компиляция неметаллической ржавчины для малины Pi 3 B из Windows

Я пытаюсь следить за этим блогом, https://medium.com/@thiagopnts/raspberry-pi-bare-metal-programming-with-rust-a6f145e84024, но в Windows и с последним Rust. Мне кажется, что правильный способ делать такие вещи очень часто меняется с Rust, поэтому я надеюсь на современную адаптацию Windows.

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

Я установил https://launchpad.net/gcc-arm-embedded/+download

Я также вижу это: https://github.com/rust-lang-nursery/rustup.rs/issues/464, но я не понимаю результата, особенно в том, что касается Windows.

Я пробовал компиляцию из git cloneисточника ржавчины, но stdsimdcoresimdmod.rsне хватает ?? Возможно, это связано с https://github.com/rust-lang/rust/issues/48734, но в нем говорится, что он исправлен, и разговор застенчив для меня.

Я попытался выполнить кросс-компиляцию из ночного источника:

> rustup run nightly rustc --target
 arm-unknown-linux-gnueabihf -O -Z no-landing-pads src/libcore/lib.rs --out-dir C:/Users/Jason/rustlib/arm-unknown-linux
-gnueabihf/lib
error[E0601]: `main` function not found in crate `lib`
  |
  = note: consider adding a `main` function to `src/libcore/lib.rs`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0601`.

Я попытался установить VSCode Extension windows-arm-unknown-linux-gnueabihf, но rustup, похоже, не может это увидеть, и я не знаю, как он будет использоваться.

Я не понимаю отношения между arm-none-eabiи arm-none-eabi.

Я пробовал следовать https://github.com/japaric/rust-cross#cross-compiling-no_std-code ,

[dependencies]
"rust-libcore"="*"

но снова я получаю аналогичную ошибку, как и попытку ее из src:

> rustup run nightly cargo build --target=arm-unknown-linux-gnueabihf
   Compiling rust-libcore v0.0.3
error: couldn't read "C:\Users\Jason\.cargo\registry\src\github.com-1ecc6299db9ec823\rust-libcore-0.0.3\rust/src/libcore\..\stdsimd\coresimd\mod.rs": The system cannot find the path specified. (os error 3)
   --> C:UsersJason.cargo
egistrysrcgithub.com-1ecc6299db9ec823
ust-libcore-0.0.3
ust/src/libcore/lib.rs:247:5
    |
247 | mod coresimd;
    |     ^^^^^^^^

error: aborting due to previous error

error: Could not compile `rust-libcore`.

Это может быть связано, но я не знаю, что с этим делать: https://internals.rust-lang.org/t/simd-now-available-in-libstd-on-nightly/6903/9

=====

Прогресс

Я думаю, что я успешно скомпилировал libcore для arm-none-eabi как обновление подмодуля git --init src / stdsimd из моего ржавого ночного источника. Я понял, что 1) изначально я использовал только стабильную фиксацию вместо своей ночной и 2) мне нужно arm-none-eabi.jsonбыло получить подмодуль.

Я также добавил , скопированный из поиска Google и обновленный из-за нескольких ошибок:{ "arch": "arm", "cpu": "cortex-a8", "data-layout": "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64", "disable-redzone": true, "executables": true, "llvm-target": "arm-none-eabi", "morestack": false, "os": "none", "relocation-model": "static", "target-endian": "little", "target-word-size": "32", "target-pointer-width": "32", "target-c-int-width": "32", "no-compiler-rt" : true, "linker-flavor": "gcc" }

rustc --crate-type staticlib --target arm-none-eabi -O -Z no-landing-pads src/libcore/lib.rs --out-dir C:/Users/Jason/rustlib/arm-none-eabi/lib

Я побежал liblib.aи liblib.a, 3KB, выскочил. Наверное, это то, что мне нужно?

Теперь, как я могу использовать liblib.a при компиляции моего kernel.rs? Нужно ли мне это где-то регистрировать?

> rustc --target arm-none-eabi -O --emit=obj kernel.rs
error[E0463]: can't find crate for `core`
  |
  = note: the `arm-none-eabi` target may not be installed

error: aborting due to previous error

For more information about this error, try `rustc --explain E0463`.

======

связи

Мне не нравится добавлять еще один инструмент, который нужно понять, но я пытаюсь xargo. В targetsосновном это выводит материал в папку librust_rasp.rlib. Я не уверен, что если харго знает, что использовать соответствующий компоновщик, и я не знаю, как я должен выйти из kernel.o, используя xargo. Я попытался с этим cargo.toml:

[package]
name = "rust-rasp"
version = "0.1.0"

[build]
incremental = false

[target.arm-none-eabi]
linker = "arm-none-eabi-gcc"
rustflags = ["-O", "--emit=obj"]

[lib]
path="kernel.rs"

Но я понимаю:

> xargo rustc --target arm-none-eabi -v
+ "rustc" "--print" "sysroot"
+ "rustc" "--print" "target-list"
+ RUSTFLAGS="--sysroot C:\Users\Jason\.xargo"
+ "cargo" "rustc" "--target" "arm-none-eabi" "-v"
warning: unused manifest key: build
warning: unused manifest key: target.arm-none-eabi.linker
warning: unused manifest key: target.arm-none-eabi.rustflags
...

И он скомпилирован до завершения, игнорируя эти новые ключи манифеста. : - /

windows,raspberry-pi,rust,cross-compiling,raspberry-pi3,

4

Ответов: 0

Кросс-компиляция неметаллической ржавчины для малины Pi 3 B из Windows

Я пытаюсь следить за этим блогом, https://medium.com/@thiagopnts/raspberry-pi-bare-metal-programming-with-rust-a6f145e84024, но в Windows и с последним Rust. Мне кажется, что правильный способ делать такие вещи очень часто меняется с Rust, поэтому я надеюсь на современную адаптацию Windows.

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

Я установил https://launchpad.net/gcc-arm-embedded/+download

Я также вижу это: https://github.com/rust-lang-nursery/rustup.rs/issues/464, но я не понимаю результата, особенно в том, что касается Windows.

Я пробовал компиляцию из git cloneисточника ржавчины, но stdsimdcoresimdmod.rsне хватает ?? Возможно, это связано с https://github.com/rust-lang/rust/issues/48734, но в нем говорится, что он исправлен, и разговор застенчив для меня.

Я попытался выполнить кросс-компиляцию из ночного источника:

> rustup run nightly rustc --target
 arm-unknown-linux-gnueabihf -O -Z no-landing-pads src/libcore/lib.rs --out-dir C:/Users/Jason/rustlib/arm-unknown-linux
-gnueabihf/lib
error[E0601]: `main` function not found in crate `lib`
  |
  = note: consider adding a `main` function to `src/libcore/lib.rs`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0601`.

Я попытался установить VSCode Extension windows-arm-unknown-linux-gnueabihf, но rustup, похоже, не может это увидеть, и я не знаю, как он будет использоваться.

Я не понимаю отношения между arm-none-eabiи arm-none-eabi.

Я пробовал следовать https://github.com/japaric/rust-cross#cross-compiling-no_std-code ,

[dependencies]
"rust-libcore"="*"

но снова я получаю аналогичную ошибку, как и попытку ее из src:

> rustup run nightly cargo build --target=arm-unknown-linux-gnueabihf
   Compiling rust-libcore v0.0.3
error: couldn't read "C:\Users\Jason\.cargo\registry\src\github.com-1ecc6299db9ec823\rust-libcore-0.0.3\rust/src/libcore\..\stdsimd\coresimd\mod.rs": The system cannot find the path specified. (os error 3)
   --> C:UsersJason.cargo
egistrysrcgithub.com-1ecc6299db9ec823
ust-libcore-0.0.3
ust/src/libcore/lib.rs:247:5
    |
247 | mod coresimd;
    |     ^^^^^^^^

error: aborting due to previous error

error: Could not compile `rust-libcore`.

Это может быть связано, но я не знаю, что с этим делать: https://internals.rust-lang.org/t/simd-now-available-in-libstd-on-nightly/6903/9

=====

Прогресс

Я думаю, что я успешно скомпилировал libcore для arm-none-eabi как обновление подмодуля git --init src / stdsimd из моего ржавого ночного источника. Я понял, что 1) изначально я использовал только стабильную фиксацию вместо своей ночной и 2) мне нужно arm-none-eabi.jsonбыло получить подмодуль.

Я также добавил , скопированный из поиска Google и обновленный из-за нескольких ошибок:{ "arch": "arm", "cpu": "cortex-a8", "data-layout": "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64", "disable-redzone": true, "executables": true, "llvm-target": "arm-none-eabi", "morestack": false, "os": "none", "relocation-model": "static", "target-endian": "little", "target-word-size": "32", "target-pointer-width": "32", "target-c-int-width": "32", "no-compiler-rt" : true, "linker-flavor": "gcc" }

rustc --crate-type staticlib --target arm-none-eabi -O -Z no-landing-pads src/libcore/lib.rs --out-dir C:/Users/Jason/rustlib/arm-none-eabi/lib

Я побежал liblib.aи liblib.a, 3KB, выскочил. Наверное, это то, что мне нужно?

Теперь, как я могу использовать liblib.a при компиляции моего kernel.rs? Нужно ли мне это где-то регистрировать?

> rustc --target arm-none-eabi -O --emit=obj kernel.rs
error[E0463]: can't find crate for `core`
  |
  = note: the `arm-none-eabi` target may not be installed

error: aborting due to previous error

For more information about this error, try `rustc --explain E0463`.

======

связи

Мне не нравится добавлять еще один инструмент, который нужно понять, но я пытаюсь xargo. В targetsосновном это выводит материал в папку librust_rasp.rlib. Я не уверен, что если харго знает, что использовать соответствующий компоновщик, и я не знаю, как я должен выйти из kernel.o, используя xargo. Я попытался с этим cargo.toml:

[package]
name = "rust-rasp"
version = "0.1.0"

[build]
incremental = false

[target.arm-none-eabi]
linker = "arm-none-eabi-gcc"
rustflags = ["-O", "--emit=obj"]

[lib]
path="kernel.rs"

Но я понимаю:

> xargo rustc --target arm-none-eabi -v
+ "rustc" "--print" "sysroot"
+ "rustc" "--print" "target-list"
+ RUSTFLAGS="--sysroot C:\Users\Jason\.xargo"
+ "cargo" "rustc" "--target" "arm-none-eabi" "-v"
warning: unused manifest key: build
warning: unused manifest key: target.arm-none-eabi.linker
warning: unused manifest key: target.arm-none-eabi.rustflags
...

И он скомпилирован до завершения, игнорируя эти новые ключи манифеста. : - /

04окна, малина-пи, ржавчины, кросскомпилирует, малина-PI3,
Похожие вопросы
Яндекс.Метрика