调试串口日志和dmesg日志的区别?

总结一下Linux内核中日志种类的区别:

1、dmesg包含所有的内核日志

2、console日志的其中一部分是内核日志的一部分

3、printk:在内核源码中用来记录日志信息的函数,只能在内核源码范围内使用。printk在内核源码中用来记录日志信息的函数,只能在内核源码范围内使用。用法和printf非常相似

printk函数主要做两件事情:第一件就是将信息记录到log中,第二件事就是调用控制台驱动来将信息输出。

4、碰到串口日志有一部分日志,而在kernel日志中没有这部分日志的情况,比如reboot日志,或者mount挂载分区日志

可能的原因是:

a、reboot后system log服务进程被系统杀掉,所以相关日志没有被记录到内核日志中。

b、mount挂载分区的报错日志只在串口中打印,没有在kernel日志中打印:

命令如:mount -t ext4 -o rw /dev/mmcblk0p2 /hirain_data/

执行报错结果如下:

mount: mounting /dev/mmcblk0p2 on /hirain_data/ failed: Invalid argument
mount: mounting /dev/mmcblk0p3 on /hirain_vendor/ failed: Invalid argument
mount: mounting /dev/mmcblk0p5 on /hirain_conf/ failed: Invalid argument
mount: mounting /dev/mmcblk0p6 on /hirain_extdata/ failed: Invalid argument

是因为mount属于应用程序,可以自己定义打印的输出路径导致的

一、uboot日志如何查看?

1、通过串口日志查看

二、调试串口打印的是什么日志?

1、串口日志抓取开机过程uboot阶段日志

2、部分主要内核启动日志

三、dmesg打印的是什么日志 ?

1、在dmesg里我们可以查看到内核启动日志,printk产生的信息、内核调试信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。

2、dmesg:  打印linux内核调试信息,dmesg打印内核的环形缓冲区的内容。因此dmesg只打印系统写入内核日志的内容

dmesg命令用于打印Linux系统开机启动信息,kernel会将开机信息存储在ring buffer中。

dmesg 打印内核启动过程的所有信息,/proc/kmsg也是打印内核的信息, 但是与dmesg 有不同, 第一次执行/proc/kmsg 打印到目前位置的所有内核信息,再次执行/proc/kmsg,不打印打印过了的信息,打印第一次执行之后的信息。

您若是开机时来不及查看信息,可利用dmesg来查看(print or control the kernel ring buffer)。开机信息亦保存在/var/log/dmesg的文件里。某些硬件设备(比如七号信令卡、语音卡之类)在安装的时候,通常会安装驱动程序(内核模块),会打印一些信息,就可以通过dmesg命令来查看。

四、 如何抓取android日志:dmesg与logcat

        Android的log信息分为内核空间和用户空间中LOG,查看用户空间(也就是app等上层的log)的log直接用logcat就可以了,查看内核空间的log可以使用dmesg命令。

dmesg与logcat的区别: Logcat——这在Android中使用,为了查看Android中活动管理器编写的不同消息,你可以看到Android也使用linux内核,但是它的作用是,一旦内核启动(硬件初始化/探测已经处理好了),android启动一个名为init的进程,它解析包含所有android系统活动的init.rc文件,我的意思是android启动的基本进程,在这个init.rc文件中有一个名为zyte的进程,它启动Dalvik虚拟机,然后所有其他活动管理器,它将被应用程序用来与硬件交互。所以它基本上是来自VM的消息,供应用程序程序员调试。

Dmesg——是来自内核的消息,假设你写了一个驱动程序,它可以作为调试驱动程序和其他内核代码的工具,其中大部分是驱动程序消息它的一种很好的调试方式,内核、驱动程序等。。

Logcat仅适用于android,其他操作系统不提供Logcat。

dmesg打印内核的环形缓冲区的内容。因此dmesg只打印系统写入内核日志的内容,logcat只输出android应用的日志。

抓取机器的日志,连接好USB线,待系统自动安装好驱动,WIN+R输入CMD打开命令提示符窗口输入以下命令,即可抓到机器日志:

adb shell dmesg > dmesg.log adb shell logcat > logcat.log