内核模块参数传入与符号导出

一:模块参数

#include<linux/module.h>
//#include<linux/moduleparam.h>
//#include<linux/stat.h>
#define CNT 1
static int cnt = CNT;
static char *hi = "Hi,Linux\n";
static int arr[] = {1,2,3,4,5,6};
static int nums = sizeof(arr)/sizeof(int);

/*类型支持布尔(bool invbool)*/
module_param(cnt, int, S_IRUGO);
/*字符指针(charp)*/
module_param(hi, charp, S_IRUGO);
/*整形(int long short uint ulong ushort)*/
module_param_array(arr, int, &nums, S_IRUGO);  //赋值不能超过数组大小,否则报错

/*S_IRUGO是权限的意思,文件只有读权限
*/

static void prt(void)
{
     printk(KERN_INFO "this is hello module\n");
}

static int __init hello_init(void)  
{
    int i;
    printk(KERN_INFO "HELLO LINUX MODULE\n");
    for(i = 0; i < cnt; i++)
    {
        printk(KERN_INFO "i = %d\n",i);
    }
    
    printk(KERN_INFO "hi = %s\n",hi);
    
    for(i = 0; i < 6; i++)
    {
        printk(KERN_INFO "%d\n",arr[i]);
    }
    printk(KERN_INFO "nums:%d\n",nums);
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "GOODBYE LINUX\n");
}

module_init(hello_init);
module_exit(hello_exit);


/*符号导出*/
EXPORT_SYMBOL(hi);
EXPORT_SYMBOL(prt);


MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("xxx");
MODULE_VERSION("V1.0");

在这里插入图片描述
移除模块以后重新插入:
在这里插入图片描述
在相关目录下可以看到,这三个参数,
在这里插入图片描述
二:符号导出
我们在上面的代码当中通过

EXPORT_SYMBOL(hi);
EXPORT_SYMBOL(prt);

导出了两个符号,我们需要在另一个模块当中使用他们。

#include<linux/module.h>
extern char * hi;
extern void prt(void);
static int __init printp_init(void) 
{
    printk(KERN_INFO "printp:%s",hi);
    prt();
    return 0;
}

static void __exit printp_exit(void)
{
    printk(KERN_INFO "printp_exit\n");
}

module_init(printp_init);
module_exit(printp_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("xxx");
MODULE_VERSION("V1.0");

这里需要注意模块的插入顺序和移除顺序,不然会报错。
在这里插入图片描述
可以通过查看相关文件,看导出的符号,如果没有符号导出,这个文件应该是什么也没有的。
在这里插入图片描述
makefile:

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

obj-m	:=hello.o printp.o

all:
	make -C $(KERNELDIR) M=$(PWD) modules

clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.mod *.order *.symvers


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值