#include <linux/module.h> //所有模块都需要的头文件
#include <linux/init.h> // init&exit相关宏
#include <linux/kernel.h>
#include <linux/moduleparam.h>
int param_int = 10;
unsigned short param_ushort = 20;
char *param_str = "hello";
int param_arr[3] = {10, 20, 30};
module_param(param_int, int, 0644);
module_param(param_ushort, ushort, 0644);
module_param(param_str, charp, 0644);
module_param_array(param_arr, int, NULL, 0644);
static int __init param_init(void)
{
printk("param_int=%d.\n", param_int);
printk("param_ushort=%d.\n", param_ushort);
printk("param_arr:%d %d %d.\n", param_arr[0], param_arr[1], param_arr[2]);
printk("param_str:%s.\n\n\n", param_str);
printk(KERN_EMERG"KERN_EMERG 0000000\n");
printk(KERN_ALERT"KERN_ALERT 1111111\n");
printk(KERN_CRIT"KERN_CRIT 2222222\n");
printk(KERN_ERR"KERN_CRIT 3333333\n");
printk(KERN_WARNING"KERN_CRIT 4444444\n");
printk(KERN_NOTICE"KERN_CRIT 5555555\n");
printk(KERN_INFO"KERN_CRIT 6666666\n");
printk(KERN_DEBUG"KERN_CRIT 7777777\n");
printk(KERN_WARNING "hello world.\n");
return 0;
}
static void __exit param_exit(void)
{
printk("param_int=%d.\n", param_int);
printk("param_ushort=%d.\n", param_ushort);
printk("param_arr:%d %d %d.\n", param_arr[0], param_arr[1], param_arr[2]);
printk("param_str:%s.\n\n\n", param_str);
printk(KERN_EMERG"KERN_EMERG 0000000\n");
printk(KERN_ALERT"KERN_ALERT 1111111\n");
printk(KERN_CRIT"KERN_CRIT 2222222\n");
printk(KERN_ERR"KERN_CRIT 3333333\n");
printk(KERN_WARNING"KERN_CRIT 4444444\n");
printk(KERN_NOTICE"KERN_CRIT 5555555\n");
printk(KERN_INFO"KERN_CRIT 6666666\n");
printk(KERN_DEBUG"KERN_CRIT 7777777\n");
printk(KERN_WARNING "hello exit!\n");
}
module_init(param_init);
module_exit(param_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lqd");
MODULE_DESCRIPTION("module");
#if 0
模块传参使用方法:
1、安装的时候传参
insmod module_param.ko param_int=111 param_ushort=222 param_str='hhhhhh' param_arr=9,8,7
2、安装成功后,可以通过修改/sys/module/模块名/parameters/参数 文件里面的内容。如:
echo 9999999 > /sys/module/module_param/parameters/param_int
echo 'this is ok' > /sys/module/module_param/parameters/param_str //会多一个换行符
echo -n 'this is ok' > /sys/module/module_param/parameters/param_str //会多一个换行符
echo 777,888,999 >/sys/module/module_param/parameters/param_arr //数组个数可以少给,少给,后面的值不会改变。不能多给
#endif
#if 0
打印等级控制:
方式一:打印等级控制文件:
[root@FriendlyARM /]# cat /proc/sys/kernel/printk
6 4 1 7
6:表示小于6优先级消息才会被输出到控制台
4:表示默认的printk消息优先级别,即printk(“hell world”);优先级为4, 由于4<7,故可以被打印到控制台。
1:表示可接收的最高优先级,当printk disable控制台输出时,设置第一个参数为1,但是,从内核等级来看,还有优先级0,这个是printk最高级优先级,一般用于内核严重消息打印。
比如内存错误或者 watchdog reset.也可以设置第一个和第三个参数为0
7:默认控制台优先级,即第一个参数的默认优先级。
方式二:
uboot传参时,在bootargs里面添加 loglevel=4
loglevel即设置的等级
#endif
#if 0
#define KERN_EMERG "<0>" /* systemis unusable */
#define KERN_ALERT "<1>" /* actionmust be taken immediately */
#define KERN_CRIT "<2>" /*critical conditions */
#define KERN_ERR "<3>" /* errorconditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normalbut significant */
#define KERN_INFO "<6>" /*informational */
#define KERN_DEBUG "<7>" /*debug-level messages */
#endif
#if 0
权限在include/linux/stat.h中有定义
比如:
#define S_IRWXU 00700
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100
#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010
#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001
#endif
参考链接:
module_param()用法_晓默的Linux之路-CSDN博客_module_param
/proc/sys/kernel/printk 打印log设置_u012385733的专栏-CSDN博客_kernel/printk