7 个版本
0.1.7 | 2024年2月11日 |
---|---|
0.1.6 | 2024年2月10日 |
0.1.5 | 2023年10月29日 |
#170 in 构建工具
215KB
204 行
包含 (ELF 可执行文件/库, 1MB) 测试二进制文件
bootloader-linker
一个简单的程序,可以将使用 bootloader_api 包创建的可执行文件与实际的 bootloader 包链接到磁盘镜像中。还支持使用 qemu 运行磁盘镜像。
bootloader_linker -V
bootloader_linker 0.1.6 using bootloader 0.11.6
安装
可以通过 cargo 直接安装。您需要一个带有 llvm-tools-preview
和 rust-src
组件的 nightly 编译器。
rustup component add llvm-tools-preview
rustup component add rust-src
cargo install bootloader_linker
使用方法
bootloader_linker -h
A simple program that links your executables created using bootloader_api with the actual bootloader.
Usage: bootloader_linker [OPTIONS] <COMMAND> <INPUT_FILE> [EXTRA_ARGS]...
Arguments:
<COMMAND> [possible values: build, run, build-run]
<INPUT_FILE> The binary/.img file to operate on
[EXTRA_ARGS]... Extra args to pass to qemu
Options:
-u, --uefi
Sets the loader to use uefi instead of bios
-o, --out-dir <OUT_DIR>
The directory to put output files in. Ignored if not building a disk image [default: ./]
-q, --qemu-path <QEMU_PATH>
The name of the qemu executable. Ignored if not running a disk image [default: qemu-system-x86_64]
-m, --mount-file <FILES_TO_MOUNT>
Extra files to mount to the FAT filesystem
-H, --min_height <MINIMUM_FRAMEBUFFER_HEIGHT>
Specifies the minimum frame buffer height desired. If it is not possible, the bootloader will fall back to a smaller format
-W, --min_width <MINIMUM_FRAMEBUFFER_WIDTH>
Specifies the minimum frame buffer width desired. If it is not possible, the bootloader will fall back to a smaller format
-l, --log-level <LOG_LEVEL>
The minimum level of logging to still display [default: trace] [possible values: off, trace, debug, info, warn, error]
-f, --frame_logging
Whether the bootloader should print log messages to the framebuffer during boot
-s, --serial_logging
Whether the bootloader should print log messages to the serial port during boot
-a, --args <ARGS>
Extra args to pass to qemu. You can also put them after -- at the end of the command
-h, --help
Print help (see more with '--help')
-V, --version
Print version
请注意,为了运行磁盘镜像,您需要安装 qemu。如果可执行文件不在 PATH 中,您可以使用 --qemu-path 指定它。
示例
bootloader_linker build-run test_binary -o ./target -- -serial stdio
// Bootloader booting info...
Hello world!
用于创建此输出的测试二进制文件在仓库中,并使用类似于以下源代码构建
#![no_std]
#![no_main]
use core::panic::PanicInfo;
use bootloader_api::entry_point;
entry_point!(main);
fn main(_info: &'static mut bootloader_api::BootInfo) -> ! {
qemu_print::qemu_print!("Hello world!");
loop {}
}
#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
loop {}
}
还有三个子命令的缩写
build
可以缩写为b
run
可以缩写为r
build-run
可以缩写为br
高级使用
与 cargo run 一起使用
bootloader-linker 适合与 cargo run 一起使用。将这些行添加到您的 .cargo/config.toml 文件中
[target.'cfg(target_os = "none")']
runner = ["bootloader_linker", "br", "-o", "./target", "-u"]
现在,cargo run
将调用 bootloader_linker 而不是直接尝试运行可执行文件。
如果您想将额外的参数传递给 qemu,不能使用正常的 -- 符号,因为 cargo 会将额外的参数放在二进制文件之前。因此,例如,
runner = ["bootloader_linker", "br", "--", "-serial", "stdio"]
将产生以下命令
bootloader_linker br -- -serial stdio [BINARY]
这将不会工作。
如果您想传递额外的参数,您必须使用 -a 参数逐个传递它们。
bootloader_linker br -a"-serial" -a"stdio" [BINARY]
因此,您的runner字段应该看起来像这样
runner = ["bootloader_linker", "br", "-o", "./target", "-u", "-a'-serial'", "-a'stdio'"]
如果您的额外参数不包含空格,您也可以移除引号
runner = ["bootloader_linker", "br", "-o", "./target", "-u", "-a-serial", "-astdio"]
挂载额外文件
如果您需要将其他文件挂载到.img文件系统,请使用--mount-file(或-m)指定它们
bootloader_linker br [BINARY] --mount-file [FILE] -u -o ./target
如果您需要挂载多个文件,请多次包含该参数
bootloader_linker br [BINARY] --mount-file [FILE_A] --mount-file [FILE_B] -u -o ./target
报告错误
此命令行实用程序尚未经过充分测试。如果您有任何问题,请在github上的仓库中报告。
依赖项
~8–18MB
~231K SLoC