1.增加系统日志消息缓冲最大数量

在使用printk的时候,经常会碰到已经加了打印语句,但是终端上却并没有显示出来信息这种情况,原因是系统默认的缓冲大小有限,而打印信息又比较多,从而导致后面的打印信息覆盖了前面的信息,造成打印丢失。

解决方法是修改base中的LW_CFG_MAX_LOGMSGS这个宏,系统默认的值是20,其所在的文件路径为“libsylixos/SylixOS/config/system/system_cfg.h”,如下图所示:

SylixOS内核打印调试方法_sylixos

2.printk输出定向到文件

本操作主要用于x86平台驱动调试,因为x86平台主板一般没有串口输出,printk的信息是输出到屏幕的,当有大量调试信息时,通过屏幕不能查看完整的调试信息,这时可以将printk的信息输出到文件中,然后查看,方法如下所示:

int log_init (void)

{

        int fd;

        int width;

        fd_set fdset;


        fd = open("/apps/log1.txt", O_RDWR | O_CREAT | O_TRUNC);

        if (fd < 0) {

                printf("open /apps/log1.txt fail\n");

                return -1;

        }


        logFdGet(&width, &fdset);

        FD_SET(fd, &fdset);

        logFdSet(max(fd,width)+1, &fdset);


        return 0;

}

只要在驱动初始化的时候调用上面函数,就可以将调试信息记录到log1.txt中。

2.printk输出输出到网络终端

a.telnet登录到系统;

b.输入files命令查看当前系统打开的文件描述符,如下图所示:

SylixOS内核打印调试方法_调试_02

c.查看/dev/pty/xx.hst对应的fd,如上图中是12;

d.输入logfileadd 12;

e.在驱动中使用printk输出的信息就会同步输出到网络终端上;