phil-opp / blog_os

Writing an OS in Rust

Home Page:http://os.phil-opp.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

%1 is not a valid Win32 application. (os error 193)

ShaKabosh opened this issue · comments

When executing cargo run, I get the following output:

warning: unused manifest key: target.cfg(target_os = "none").runner
   Compiling compiler_builtins v0.1.91
   Compiling core v0.0.0 (C:\Users\user\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core)
   Compiling bootloader v0.9.23
   Compiling rustc-std-workspace-core v1.99.0 (C:\Users\user\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\rustc-std-workspace-core)
   Compiling spin v0.5.2
   Compiling volatile v0.2.7
   Compiling lazy_static v1.4.0
   Compiling blog_os v0.1.0 (C:\Users\user\Documents\Code\Rust\blog_os)
    Finished dev [unoptimized + debuginfo] target(s) in 14.39s
     Running `target\x86_64-kernel\debug\blog_os`
error: could not execute process `target\x86_64-kernel\debug\blog_os` (never executed)

Caused by:
  %1 is not a valid Win32 application. (os error 193)

This is my Cargo.toml:

[package]
name = "blog_os"
version = "0.1.0"
edition = "2021"

[dependencies]
bootloader = "0.9.23"
volatile = "0.2.6"
lazy_static = { version = "1.0", features = ["spin_no_std"] }
spin = "0.5.2"

[profile.dev]
panic = "abort"

[profile.release]
panic = "abort"

[target.'cfg(target_os = "none")']
runner = "bootimage runner"

Here is my x86_64-kernel.json:

{
    "llvm-target": "x86_64-unknown-none",
    "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
    "arch": "x86_64",
    "target-endian": "little",
    "target-pointer-width": "64",
    "target-c-int-width": "32",
    "os": "none",
    "executables": true,
    "linker-flavor": "ld.lld",
    "linker": "rust-lld",
    "panic-strategy": "abort",
    "disable-redzone": true,
    "features": "-mmx,-sse,+soft-float"
}

Here is my .cargo/config.toml:

[build]
target = "x86_64-kernel.json"

[unstable]
build-std-features = ["compiler-builtins-mem"]
build-std = ["core", "compiler_builtins"]

I do have the bootimage crate installed.
How can I fix this? Any help would be much appreciated :)

You're not building with the right toolchain. You need to build using the custom one provided by the blog. Or if you've modified it enough you can use x86_64-unknown-none (I think that's what it is).

The toolchain is the exact same as the one from Post 2. I have renamed the toolchain config, as allowed by the tutorial. The .cargo/config.toml has, as shown, been updated to reflect the different filename.

commented

You need to set the runner in .cargo/config.toml as indicated by https://os.phil-opp.com/minimal-rust-kernel/#using-cargo-run

That's an embarrassing mistake. I've updated it, tested it, and it works! Thanks for your help :)