Part_One_First_Sight
参考:独立式可执行程序 | Writing an OS in Rust
样例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #![no_std] #![no_main] use core::panic::PanicInfo;
#[panic_handler] fn panic(_info: &PanicInfo) -> ! { loop {} } #[no_mangle] pub extern "C" fn _start() -> ! { loop {} }
|
cargo.toml
1 2 3 4 5 6 7 8 9 10 11 12
| [package] name = "FlowOS" version = "0.1.0" edition = "2021"
[dependencies]
[profile.dev] panic = "abort"
[profile.release] panic = "abort"
|
Windows 平台使用的编译命令不同
1
| cargo rustc -- -C link-args="/ENTRY:_start /SUBSYSTEM:console"
|
也可以在 rust 目录下的 .cargo
文件夹下创建 config.toml
文件,输入
==注意;如果同时包含 config 和 config.toml 请二选一,如果同时存在,无后缀的会被加载==
1 2 3 4 5 6 7 8
| [target.'cfg(target_os = "linux")'] rustflags = ["-C", "link-arg=-nostartfiles"]
[target.'cfg(target_os = "windows")'] rustflags = ["-C", "link-args=/ENTRY:_start /SUBSYSTEM:console"]
[target.'cfg(target_os = "macos")'] rustflags = ["-C", "link-args=-e __start -static -nostartfiles"]
|
上述只是拓展的方法,之后的编译都使用裸机,输入如下代码
1
| rustup target add thumbv7em-none-eabihf
|
编译命令
1
| cargo build --target thumbv7em-none-eabihf
|
另附:使用 nightly 版本