You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从命令行向Rust编写的Linux内核模块传递参数?

向Rust开发的Linux内核模块传递命令行参数的实现方法

Rust for Linux框架已提供与C侧module_param()完全等价的官方公开能力,你之前找到的kernel::miscdev::Registration::register_with_options()是misc字符设备注册的配置接口,其依赖的Options是内核内部使用的注册配置结构体,和命令行模块传参需求无关,不需要在该接口上做尝试。

  • 核心实现接口:使用框架公开的kernel::module_param!宏定义模块参数,宏会自动完成命令行参数解析、sysfs参数节点生成、访问权限控制全流程,行为和C侧module_param()完全对齐。
  • 基础用法示例:
use kernel::prelude::*;

// 模块元信息声明
module! {
    type: MyDemoModule,
    name: "rust_demo_mod",
    author: "dev",
    description: "Demo for module params",
    license: "GPL",
}

// 定义命令行可传入的模块参数
module_param! {
    /// 整数类型测试参数
    my_int: i32 {
        default: 42,
        permissions: 0o644,
        description: "Sample integer parameter from cmdline",
    },
    /// 字符串类型测试参数
    my_str: str {
        default: "init_val",
        permissions: 0o644,
        description: "Sample string parameter from cmdline",
    },
    /// 布尔类型测试参数
    my_enable: bool {
        default: false,
        permissions: 0o644,
        description: "Sample bool switch from cmdline",
    }
}

struct MyDemoModule;
impl kernel::Module for MyDemoModule {
    fn init(_name: &'static CStr, _module: &'static ThisModule) -> Result<Self> {
        // init执行前参数已经完成解析,直接读取即可
        pr_info!(
            "Module loaded, my_int={}, my_str={:?}, my_enable={}\n",
            my_int.read(),
            my_str.read(),
            my_enable.read()
        );
        Ok(Self)
    }
}
  • 使用注意事项:
    • 参数定义需要和module!宏放在同一代码顶层,不要写在函数或结构体内部
    • 框架内置支持所有整数类型、布尔类型、C字符串类型的参数解析,自定义类型可通过实现ModuleParamtrait接入自定义解析逻辑
    • 定义参数时设置的权限值和C侧module_param()的perm参数规则一致,会直接作用于/sys/module/下对应的参数节点
    • 参数值在模块init流程执行前就已完成校验和赋值,不需要自行实现解析逻辑
  • 传参方式:和C编写的内核模块完全一致,加载时直接在命令行拼接参数名=值即可,示例:
    insmod rust_demo_mod.ko my_int=123 my_enable=1 my_str="custom_val"
    加载后也可通过/sys/module/rust_demo_mod/parameters/路径下的节点查看、按权限修改参数值。
  • 版本适配说明:module_param!宏从Linux 6.1(首个正式支持Rust开发的稳定内核版本)开始对外开放,如果你使用的是更早的Rust内核开发分支,切换到6.1及以上稳定版本或最新的rust-next分支即可直接使用,不需要修改内核核心代码。

内容的提问来源于stack exchange,提问作者Haoan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:27:16