Kconfig Tools API¶
概述¶
The Kconfig tools provide Python APIs for managing configuration files, validating Kconfig syntax, and generating C header files.
模块: generate_hal_config¶
配置 Header Generation¶
- generate_header(config_dict, output_file=None)¶
生成 C header file from configuration dictionary.
- 参数:
- 返回:
生成d header content as 字符串
- 返回类型:
示例:
from generate_hal_config import generate_header config = { 'CONFIG_PLATFORM_STM32': 'y', 'CONFIG_UART1_BAUDRATE': '115200', 'CONFIG_OSAL_FREERTOS': 'y' } header = generate_header(config, 'nexus_config.h')
- parse_config_file(config_path)¶
Parse .config file and return configuration dictionary.
示例:
from generate_hal_config import parse_config_file config = parse_config_file('.config') print(f"Platform: {config.get('CONFIG_PLATFORM_NAME')}")
- generate_default_config(platform=None)¶
生成 default configuration for specified platform.
示例:
from generate_hal_config import generate_default_config # Generate default for STM32 config = generate_default_config('STM32') # Generate default for current platform config = generate_default_config()
模块: validate_kconfig¶
Kconfig 验证¶
- class KconfigValidator(root_dir='.')¶
Validator for Kconfig files.
- 参数:
root_dir (str) -- Root directory for resolving paths
- validate_file(kconfig_path, is_included=False)¶
验证 a single Kconfig file.
- 参数:
kconfig_path (Path) -- Path to Kconfig file
is_included (bool) -- Whether file is included via source/rsource
- 返回:
Tuple of (errors, warnings)
- 返回类型:
示例:
from pathlib import Path from validate_kconfig import KconfigValidator validator = KconfigValidator('.') errors, warnings = validator.validate_file(Path('Kconfig')) if errors: print(f"Errors: {errors}") if warnings: print(f"Warnings: {warnings}")
- validate_all(kconfig_file)¶
验证 Kconfig file and all included files.
- 参数:
kconfig_file (Path) -- Root Kconfig file path
- 返回:
True if 验证 passed, False otherwise
- 返回类型:
示例:
from pathlib import Path from validate_kconfig import KconfigValidator validator = KconfigValidator('.') success = validator.validate_all(Path('Kconfig')) if not success: validator.print_results()
- validate_dependencies()¶
验证 dependencies and selects.
- validate_ranges()¶
验证 范围约束 and default values.
- print_results()¶
Print 验证 results to stdout.
模块: kconfig_migrate¶
配置 Migration¶
- migrate_config(input_file, output_file, target_version=None)¶
迁移 configuration file to new version.
- 参数:
- 返回:
True if migration succeeded
- 返回类型:
示例:
from kconfig_migrate import migrate_config success = migrate_config( 'old.config', 'new.config', target_version='2.0' ) if success: print("Migration completed successfully")
- detect_version(config_file)¶
Detect configuration file version.
模块: kconfig_diff¶
配置 Comparison¶
- diff_configs(config1_path, config2_path, format='text')¶
Compare two configuration files.
- 参数:
- 返回:
Difference report
- 返回类型:
示例:
from kconfig_diff import diff_configs # Text format diff_text = diff_configs('.config', 'platforms/native/.config') print(diff_text) # JSON format diff_json = diff_configs( '.config', 'platforms/native/.config', format='json' )
- parse_config(config_path)¶
Parse configuration file.
- format_diff_text(diff_dict)¶
Format difference dictionary as text.
模块: generate_config_docs¶
文档生成¶
- generate_docs(kconfig_file, output_file=None, format='markdown')¶
生成 documentation from Kconfig files.
- 参数:
- 返回:
生成d documentation
- 返回类型:
示例:
from generate_config_docs import generate_docs # Generate markdown documentation docs = generate_docs('Kconfig', 'config_reference.md') # Generate reStructuredText docs = generate_docs('Kconfig', 'config_reference.rst', format='rst')
- extract_config_options(kconfig_file)¶
Extract all configuration options from Kconfig file.
- format_option_markdown(option)¶
Format configuration option as markdown.
命令行接口¶
nexus_config.py¶
Unified configuration management tool.
用法:
python scripts/nexus_config.py <command> [options]
Commands:
generate- 生成 configuration header filevalidate- 验证 Kconfig filesmigrate- 迁移 configuration to new versiondiff- 比较配置文件info- 显示配置信息
生成 Command:
python scripts/nexus_config.py generate [options]
Options:
-c, --config FILE Input configuration file
-o, --output FILE Output header file
-d, --default Generate default configuration
-p, --platform NAME Platform name for default config
验证 Command:
python scripts/nexus_config.py validate [kconfig_file]
Arguments:
kconfig_file Root Kconfig file (default: Kconfig)
迁移 Command:
python scripts/nexus_config.py migrate input_file [options]
Arguments:
input_file Input configuration file
Options:
-o, --output FILE Output configuration file
-t, --target-version VERSION Target version
Diff Command:
python scripts/nexus_config.py diff config1 config2 [options]
Arguments:
config1 First configuration file
config2 Second configuration file
Options:
-f, --format FORMAT Output format (text or json)
-o, --output FILE Output file
数据结构¶
配置 Dictionary¶
配置 dictionaries map symbol names to values:
{
'CONFIG_PLATFORM_STM32': 'y',
'CONFIG_STM32F407': 'y',
'CONFIG_UART1_BAUDRATE': '115200',
'CONFIG_UART1_MODE_DMA': 'y',
'CONFIG_OSAL_FREERTOS': 'y',
'CONFIG_OSAL_TICK_RATE_HZ': '1000'
}
符号 Information¶
Symbol information dictionaries contain metadata:
{
'name': 'UART1_BAUDRATE',
'type': 'int',
'default': '115200',
'range': (9600, 921600),
'help': 'Baud rate for UART1',
'file': 'platforms/STM32/src/uart/Kconfig',
'line': 42
}
验证 Results¶
验证 results contain errors and warnings:
{
'errors': [
'Kconfig:10: Unclosed if block',
'platforms/STM32/Kconfig:25: Undefined symbol INVALID_SYMBOL'
],
'warnings': [
'platforms/native/Kconfig:15: default outside of config block'
]
}
Difference Report¶
Difference reports show configuration changes:
{
'added': {
'CONFIG_NEW_FEATURE': 'y'
},
'removed': {
'CONFIG_OLD_FEATURE': 'y'
},
'changed': {
'CONFIG_UART1_BAUDRATE': {
'old': '9600',
'new': '115200'
}
},
'unchanged': {
'CONFIG_PLATFORM_STM32': 'y'
}
}
错误处理¶
异常¶
- exception KconfigError¶
Base exception for Kconfig-related errors.
- exception ValidationError¶
Raised when 验证 fails.
- exception ParseError¶
Raised when parsing fails.
- exception GenerationError¶
Raised when header generation fails.
示例:
from validate_kconfig import KconfigValidator, ValidationError
try:
validator = KconfigValidator('.')
success = validator.validate_all(Path('Kconfig'))
if not success:
raise ValidationError("Validation failed")
except ValidationError as e:
print(f"Error: {e}")
validator.print_results()
最佳实践¶
验证¶
Always validate before generating:
from pathlib import Path
from validate_kconfig import KconfigValidator
from generate_hal_config import generate_header, parse_config_file
# Validate first
validator = KconfigValidator('.')
if not validator.validate_all(Path('Kconfig')):
print("Validation failed!")
validator.print_results()
exit(1)
# Then generate
config = parse_config_file('.config')
generate_header(config, 'nexus_config.h')
错误处理¶
Handle errors gracefully:
try:
config = parse_config_file('.config')
except FileNotFoundError:
print("Config file not found, using defaults")
config = generate_default_config()
except Exception as e:
print(f"Error parsing config: {e}")
exit(1)
日志记录¶
Use logging for debugging:
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
validator = KconfigValidator('.')
logger.debug("Starting validation")
success = validator.validate_all(Path('Kconfig'))
logger.info(f"Validation {'passed' if success else 'failed'}")
另请参阅¶
Kconfig 配置系统 - Kconfig user guide
贡献指南 - Contributing guidelines
Scripts README:
scripts/Kconfig/README.md