CentOS7在终端打印内核日志消息
在内核编程中,编写一个内核模块并将其插入后,需要实时查看内核模块所打印的消息。一般情况下都是在内核日志中查看。由于内核模块使用的打印函数是内核打印函数printk( ),它会将内核内核的输出信息放到内核日志中,在终端用dmesg命令来查看。但是这样不能做到实时查看,最好时在模块插入后,就能立刻在终端将内核模块的打印消息输出。
CentOS是基于RedHat的,但是RedHat默认是没有/var/log/kern.log这个文件的。所以,需要在/etc/rsyslog.conf中进行配置,来决定系统如何写入。
操作如下
第一步
进入记录系统日志消息的目录下,创建一个kern.log的文件,然后我们会对系统进行配置,将来自内核的消息专门的放到kern.log中,以后终端打印的内核日志消息就是从这个文件中来读取
$ cd /var/log
$ touch kern.log
然后ls一下,查看kern.log是否已经创建
第二步
在系统的配置文件中进行配置,要做的动作就是将内核的消息单独导入到刚才创建的kern.log中
$ cd /etc
$ sudo vim rsyslog.conf
在rsyslog.conf中加入这句话
kern.* /var/log/kern.log
第三步
关闭系统的日志服务
$ service rsyslog stop
第四步
重新打开系统的日志服务
$ service rsyslog start
第五步
查看系统日志服务是否开启,绿色表示服务开启
$ service rsyslog status
第六步
现在就可以在终端实时打印内核日志消息。在插入内核模块后,模块里的打印消息就可以直接在终端输出了,不需要使用dmesg命令来查看了。
插入模块之前,现在终端输入这句话
$ tail -f /var/log/kern.log & //终止按Ctrl+c
该命令只对当前终端有效,&表示在当前终端打印
现在,有一个编译好的hello.ko模块,把它插入内核,在终端实时查看内核模块的输出。
插入模块
$ sudo insmod hello.ko
卸载模块
$ sudo rmmod hello