首页 / LINUX / 在Linux内核模块中设置动态变量
在Linux内核模块中设置动态变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Linux内核模块中设置动态变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2171字,纯文字阅读大概需要4分钟。
内容图文
![在Linux内核模块中设置动态变量](/upload/InfoBanner/zyjiaocheng/965/f192fb354aae4a85b0ad6316a6505db7.jpg)
我已经制作了一个新的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, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
module_param(op, int, 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, int, &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");
}
除了模块参数之外,还在以下链接中提出了其他替代方案.
http://kernelnewbies.org/FAQ/WhyWritingFilesFromKernelIsBad
内容总结
以上是互联网集市为您收集整理的在Linux内核模块中设置动态变量全部内容,希望文章能够帮你解决在Linux内核模块中设置动态变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。