Linux内核模块参数解析优先级详解
模块参数解析优先级
在Linux内核模块中,参数的解析优先级通常遵循以下顺序(从高到低):
1. 命令行参数 (模块加载时指定)
- 优先级最高
通过insmod
或modprobe
加载模块时直接传递的参数会覆盖其他来源。1
insmod mymodule.ko param1=value1 param2=value2
2. 设备树 (Device Tree) 或 ACPI 表
- 次高优先级
设备树(常见于嵌入式系统)或 ACPI 表(常见于 x86 系统)中定义的参数会被模块读取,但会被命令行参数覆盖。1
2
3
4&mydevice {
param1 = <0x100>;
param2 = "custom-config";
};
3. 模块内默认值
- 最低优先级
模块源代码中通过module_param()
或module_param_named()
定义的默认值,仅在所有其他来源未提供参数时生效。1
2static int param1 = 10;
module_param(param1, int, 0644);
补充说明
运行时参数修改(如 sysfs)
通过/sys/module/<module>/parameters/
动态修改的参数仅影响运行时的行为,不参与初始化优先级的竞争。例如:1
echo 20 > /sys/module/mymodule/parameters/param1
模块依赖关系
如果模块依赖其他模块(如通过modprobe
自动加载依赖项),依赖模块的参数可能由modprobe.d
配置文件(如/etc/modprobe.d/*.conf
)设置。
流程图解
1 | 命令行参数 (最高优先级) |
通过这一优先级规则,开发者可以灵活地通过不同层级的配置控制模块行为。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!