1 个不稳定版本

0.1.0 2023年8月20日

#2260解析器实现

MIT 许可证

83KB
2.5K SLoC


用 Rust 编写的 Config.in 解析器。

Rust version Minimum supported rust version: 1.56.0 or plus crates.io Version

由于已被 Kconfig 替代,此解析器不再积极维护。此库已测试过从 Linux 内核 1.02.5.44(542 个版本)。

Config.in 文件看起来是这样的

# 2.5.0/arch/i386/config.in
mainmenu_name "Linux Kernel Configuration"

define_bool CONFIG_X86 y
define_bool CONFIG_ISA y
define_bool CONFIG_SBUS n

define_bool CONFIG_UID16 y

mainmenu_option next_comment
comment 'Code maturity level options'
bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
endmenu

入门

cargo add nom-config-in
use nom_config_in::{parse_config_in, ConfigInFile, ConfigInInput};
use std::path::PathBuf;

// curl https://cdn.kernel.org/pub/linux/kernel/v2.5/linux-2.5.0.tar.xz | tar -xJ -C /tmp/
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config_in_file = ConfigInFile::new(
        PathBuf::from("/tmp/linux/"),
        PathBuf::from("/tmp/linux/arch/i386/config.in"),
    );
    let input = config_in_file.read_to_string().unwrap();
    let config_in = parse_config_in(ConfigInInput::new_extra(&input, config_in_file));
    println!("{:?}", config_in);
    Ok(())
}

资源

依赖

~4–13MB
~150K SLoC