2 个不稳定版本

0.2.0 2023年8月20日
0.1.0 2023年8月12日

2060解析器实现

每月下载 29

MIT 许可证

165KB
4.5K SLoC


Tux, the pinguin

用 Rust 编写的 Kconfig 解析器。

Build status code coverage Minimum supported rust version: 1.56.0 or plus crates.io Version

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.116.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