#disk-image #kernel #os #bootloader #bootable #binary #cargo

bin+lib bootimage

从内核二进制文件创建可引导 OS 图像的工具

60 个版本

0.10.3 2021 年 4 月 1 日
0.10.2 2020 年 12 月 10 日
0.10.1 2020 年 8 月 3 日
0.9.0 2020 年 7 月 17 日
0.2.1 2018 年 3 月 31 日

#363文件系统

Download history 562/week @ 2024-03-13 532/week @ 2024-03-20 580/week @ 2024-03-27 667/week @ 2024-04-03 562/week @ 2024-04-10 534/week @ 2024-04-17 612/week @ 2024-04-24 551/week @ 2024-05-01 540/week @ 2024-05-08 567/week @ 2024-05-15 587/week @ 2024-05-22 571/week @ 2024-05-29 555/week @ 2024-06-05 519/week @ 2024-06-12 513/week @ 2024-06-19 480/week @ 2024-06-26

2,147 每月下载量

MIT/Apache

52KB
1K SLoC

bootimage

从 Rust 操作系统内核创建可引导磁盘镜像。

安装

> cargo install bootimage

使用方法

首先,您需要将 bootloader crate 添加为依赖

# in your Cargo.toml

[dependencies]
bootloader = "0.6.4"

注意:由于 bootimage 0.7.0 需要 bootloader 版本至少为 0.5.1,因此至少需要此版本。对于早期 bootloader 版本,请使用 bootimage 0.6.6

如果您想使用具有不同名称的自定义 bootloader,可以使用 Cargo 的 重命名功能

构建

现在,您可以通过运行以下命令构建内核项目并从中创建可引导磁盘镜像

cargo bootimage --target your_custom_target.json [other_args]

该命令将调用 cargo build,并将所有传递的选项转发。然后,它将构建指定的 bootloader 与内核一起创建可引导磁盘镜像。

运行

要在 QEMU 中运行您的内核,您可以在 .cargo/config 文件中将 bootimage runner 设置为自定义 runner

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

然后,您可以通过以下方式运行您的内核

cargo xrun --target your_custom_target.json [other_args] -- [qemu args]

所有在 -- 后的参数都将传递给 QEMU。如果您想使用自定义运行命令,请参阅下面的 配置 部分。

测试

bootimage 集成了对您的内核进行单元和集成测试的支持。为此,您需要使用 Rust 的 custom_tests_framework 功能,具体说明请参阅 此处

配置

配置通过在内核的 Cargo.toml 文件中的 [package.metadata.bootimage] 表格中完成。以下是一些可用的选项

[package.metadata.bootimage]
# The cargo subcommand that will be used for building the kernel.
#
# For building using the `cargo-xbuild` crate, set this to `xbuild`.
build-command = ["build"]
# The command invoked with the created bootimage (the "{}" will be replaced
# with the path to the bootable disk image)
# Applies to `bootimage run` and `bootimage runner`
run-command = ["qemu-system-x86_64", "-drive", "format=raw,file={}"]

# Additional arguments passed to the run command for non-test executables
# Applies to `bootimage run` and `bootimage runner`
run-args = []

# Additional arguments passed to the run command for test executables
# Applies to `bootimage runner`
test-args = []

# An exit code that should be considered as success for test executables
test-success-exit-code = {integer}

# The timeout for running a test through `bootimage test` or `bootimage runner` (in seconds)
test-timeout = 300

# Whether the `-no-reboot` flag should be passed to test executables
test-no-reboot = true

许可证

根据以下任一许可证授权:

根据您的选择。

除非您明确表示否则,根据 Apache-2.0 许可证定义,您提交的任何有意包含在工作中的贡献,将按上述方式双重许可,不附加任何额外的条款或条件。

依赖项

~1.3–2.1MB
~46K SLoC