/proc/kmsg 文件节点映射 Kernel Log Buffer,或者 dmesg dump Kernel Log Buffer 实际都是直接从 Buffer 里面获取 Log。在 Kernel Log 章节有讲过,所有的 Kernel Log 都会一字不漏的全部写入的 Buffer 中,所以通过访问 Log Buffer 的方式获取的 Kernel Log 是最完整的。
在 Kernel Log 章节也有提到 Kernel Log 除了输出到 Buffer 之外,还会将一部分 Log 输出的到 Console。所以通过 UART 也是可以获取 Kernel Log的。(具体输出哪些 Log 取决于设定的 log level。更详细的信息请参考 Kernel Log 章节。)
UART 用于 Logging 是极其广泛的,除了 Linux Kernel 默认将其作为 Console 以外,系统其它的部分,如 bootloader 的 Debug 也和 UART Log 紧密相关。所以 UART Log 对于整个系统的 Debug,尤其是开机和关机流程至关重要。
但是 Phone 或者 Tablet 通常都不会留出直接的 UART 接口,而只是在电路板上面留出 UART 测试点,所以抓取 UART Log 就会相对麻烦一点,首先就要准备 UART cable 以及搭建抓取 UART Log 的环境。
UART Cable
UART Cable 的样子通常如下所示,一头的 USB 插口内部内置了 USB 转 UART 的芯片,可以在 PC 端模拟一个 UART COM 口。而另一头通常为了方便通常做成夹子或者钩子的方式,也可以直接焊接在板子的焊点上面。
但是有一点务必要注意:UART Cable 一定要是 1.8V 标准的,否则会抓不到 UART Log。
UART Port 配置
抓取 UART Log 的时候应该把 UART Cable 连接到哪一个 UART Port呢?这取决于 Preloader 里面的客制化。
对于 ABS Turnkey