AIX系统中使用bsdlog函数输出内核信息
(1)修改syslogd进程的配置文件/etc/syslog.conf,使用echo命令在文件末尾添加内容“kern.info /tmp/kerninfo.log”
echo “kern.info /tmp/kerninfo.log” >> /etc/syslog.conf
(2)使用touch命令创建kerninfo.log文件,用此文件作为kernel info级别消息的输出文件
touch /tmp/kerninfo.log
(3)重启syslogd进程,重启syslogd进程有两种方式
1.使用kill -hup pid来重启syslogd进程
使用ps命令或使用cat /etc/syslog.pid查看syslogd进程的pid
ps -ef | grep syslogd
root 3604610 2555940 0 12:31:26 - 0:00 /usr/sbin/syslogd
cat /etc/syslog.pid
3604610
kill -hup 3604610
2.refresh -s syslogd 重启syslogd进程
0513-095 The request for subsystem refresh was completed successfully.
扩展:
startsrc -s syslogd 开启syslogd进程
stopsrc -s syslogd 关闭syslogd进程
注意:若删除了/tmp/kerninfo.log文件,然后再重新创建了/tmp/kerninfo.log文件,那么必须重启sysylogd进程
(3)在内核代码中使用bsdlog函数添加相关代码,例如
int hello_init(int cmd, struct uio *uio)
{
bsdlog(LOG_INFO | LOG_KERN, "Enter hello_init::command = 0x%x \n",cmd);
if (cmd == CFG_INIT)
bsdlog(LOG_INFO | LOG_KERN, " Initializing Hello World KernExt \n");
else if (cmd == CFG_TERM)
bsdlog(LOG_INFO | LOG_KERN, " Terminating Hello World KernExt \n");
else
bsdlog(LOG_INFO | LOG_KERN, " Unknown command to Adv KernExt \n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
内核模块加载,执行了bsdlog部分代码后,查看/tmp/kerninfo.log文件就可以看到内核中bsdlog输出的信息了。例如
kern:info unix: Enter hello_init::command = 0x1
kern:info unix: Enter hello_init::command = 0x2