2 个不稳定版本
0.2.0 | 2023年8月20日 |
---|---|
0.1.0 | 2023年8月12日 |
2060 在 解析器实现
每月下载 29 次
165KB
4.5K SLoC
用 Rust 编写的 Kconfig 解析器。
Kconfig 是一种描述 Linux 内核配置选项的语言。其语法如下所示
# https://github.com/torvalds/linux/blob/master/arch/riscv/Kconfig#L771
config EFI
bool "UEFI runtime support"
depends on MMU
default y
select EFI_STUB
help
This option provides support for runtime services provided
by UEFI firmware.
- 文件以一个
config
条目开始:我们定义了一个名为EFI
的配置。接下来的几行是这个条目的属性。 EFI
是一个布尔配置。EFI
依赖于 配置MMU
。- 它的默认值是
y
。 - 如果
EFI
等于true
,则启用EFI_STUB
。 help
属性定义了面向最终用户的帮助文本。
Kconfig 语言中有许多其他关键字,更多详细信息请参阅官方文档。
功能
- 这是一个解析器。
- 该库中没有任何语义分析。
- 此库仅支持 UTF-8 编码的文件。
- 支持的条目列表可以在 此处 找到。
- 支持的属性列表可以在 此处 找到。
- 当遇到
source
时,它将读取并解析指定的配置文件。 - 此库大量使用
clone()
。不要期望惊人的性能。 - 此解析器已在从 2.6.11 到 6.4.9 (3733 个版本) 的 Linux 内核仓库上进行了测试。
入门指南
cargo add nom-kconfig
use std::path::PathBuf;
use nom_kconfig::{kconfig::parse_kconfig, KconfigInput, KconfigFile};
// curl https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.4.9.tar.xz | tar -xJ -C /tmp/
fn main() -> Result<(), Box<dyn std::error::Error>> {
let kconfig_file = KconfigFile::new(
PathBuf::from("/tmp/linux-6.4.9"),
PathBuf::from("/tmp/linux-6.4.9/Kconfig")
);
let input = kconfig_file.read_to_string().unwrap();
let kconfig = parse_kconfig(KconfigInput::new_extra(&input, kconfig_file));
println!("{:?}", kconfig);
Ok(())
}
资源
依赖关系
~3–4.5MB
~78K SLoC