Linux驱动-printk打印等级和模块传参

#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

参考链接:

Linux驱动(已完结)_哔哩哔哩_bilibili

module_param()用法_晓默的Linux之路-CSDN博客_module_param

/proc/sys/kernel/printk 打印log设置_u012385733的专栏-CSDN博客_kernel/printk

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monkey_llll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值