Я пытаюсь следить за этим блогом, 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,
Я пытаюсь следить за этим блогом, 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,