Skip navigation.
主页

reachcool的Blog

reachcool 的图片

从命令行传递参数给内核模块

其实关于MODULE_PARM的问题前几天就看到过了.也大致的学习了一下,但是没有认真的把这些东西记下来.以便以后遇到了又不懂的时候查看.
MODULE_PARM()宏,定义在linux/module.h中,用于将参数从传递给那和模块.
如果我们想用这个宏来传递命令行参数,那么在我们的模块中定义一个全局变量.在insmod模块时,便可以用参数的形式,将具体的实参传递给模块中的那个全局变量.
MODULE_PARM(name,type)有两个参数,一个是这个全局变量的名称,另一个是这个全局变量的类型.
而他的类型有一下几种:

reachcool 的图片

VA家族

说来也比较奇怪.以前读代码的时候,总是囫囵吞枣的样子,遇到不懂的东西,总是一带而过.没有把它们认真的弄明白.我深知自己有这种偷懒的缺点.但是总是无法控制自己一错再错.昨天ken还不厌其烦的给我鼓励.今天我稍微的认真了一把,便发现了va_list/va_start/va_arg/va_end等函数,我不明白.
于是便找了一些资料.让自己彻底的弄清楚这些东西是干吗用的!
下面我说说我对它们的理解!
在ANSI C标准中,va的宏定义在stdarg.h中,它们有:va_list,va_start,va_arg,va_end,va_copy,等家族成员.下面我用我看到的一个例子结合我自己的理解来描述一下这些函数的具体功能.

reachcool 的图片

IOCTL向内核传递参数

/*********************************

*###此文中有引用别人的文章############

*###出处:http://www.cublog.cn/opera/showart.php?blogid=21968&id=144911

*###正是这段文章帮助我有了后面的理解

********************************/

//begiin

一、应用层

uint16 data16;

if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

printf("socket failed\n\r");

}

if(ioctl(fd, SIOCSIFVLAN_PVID_PRI, &data16) < 0)

{

printf("ioctl pvid failed\n\r");

}

二、linux内核

1、 在sockios.h中定义

Syndicate content