在Linux内核模块中设置动态变量
我已经制作了一个新的
Linux TCP cong算法实现,并且在这段代码中有一些静态变量,我希望它们通过使用一些配置方法是动态的.
根据我在内核级编程中的理解,我们无法加载一些文本文件并将值放在那里并通过程序读取它. 但我需要其他东西来使这些值动态化,以便用户可以在不用每次用户更改值时编译内核代码的情况下更改它们. 我听说过可以帮助我们的proc条目,但我不确定这是否是正确的方法.不确定ioctl()是否也可以提供帮助. 有人可以给出一些关于如何使这些变量变为动态的想法,以便我们在飞行中更改它们并设置值. 解决方法
我建议使用模块参数.
包括#include< linux / moduleparam.h>在内核模块中. 使用module_param()变量和module_param_array()将数组传递给内核模块. 请参阅如何将值传递给模块Passing an array as command line argument for linux kernel module 这是module_param()的示例程序 #include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> #include "MyHeader.h" int a = 0,b = 0,op = 0; module_param(a,int,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); module_param(b,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); module_param(op,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); int __init init_module(void) { printk("n Second Module Loaded...... n"); if((a == 0) && (b == 0) && (op == 0)) { printk("n Supply Module Parameters...... n"); printk("n insmod <modulename>.ko op=<1-4> a=<int data> b=<int data> n"); return 0; } switch(op) { case 1: printk("n Result of Addition:%d n",add(a,b)); break; case 2: printk("n Result of Subtraction:%d n",sub(a,b)); break; case 3: printk("n Result of Multiplication:%d n",mul(a,b)); break; case 4: printk("n Result of Division:%d n",div(a,b)); break; default: printk("n Unknown Operation... n"); } return 0; } void cleanup_module() { printk("n Second Module UN--Loaded...... n"); } 另一个将数组传递给内核模块的示例. #include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> int a[5]; int count; module_param_array(a,&count,0); int init_module(void) { int i = 0; printk("n Welcome to sample kernel module n"); for(i = 0; i < count; i++) { printk("na[%d] = %d",i,a[i]); } return 0; } void cleanup_module() { printk("n Exit success n"); } 除了模块参数之外,还在以下链接中提出了其他替代方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |