通过串口实时打印Android内核调试log信息

2023-05-16

一、前言    

在调试Android的Linux内核时,我们往往会通过打开对应模块的调试Log来查看一些关键信息。通常我们可以使用一些简单的查看方法,比如:

    在pc端装有adb工具时,使用adb shell dmesg >D:/Kernel.log

    但是dmesg通常只能打印部分Log信息,如果连续输入命令,在保存的日志文件中可能会出现很多重复内容,这是因为dmesg会打印启动后到目前的Log信息。

    或者使用:adb shell cat /proc/kmsg

    proc/kmsg,不会再打印已经打印的信息,只打印上一次执行之后打印出来的新的信息,但是同样因为缓冲区的原因,kmsg会出现中断。如果在主机端编写脚本定制调用kmesg,由于每次Kmesg结束的时间可能不固定,所以很难设置时间间隔,从而导致Log日志文件出现先后顺序不一样的打印,对于我们分析Log非常不利。

    如何让一台android调试手机,能够像Android开发板一样在串口实时打印信息呢?通过各种尝试终于找到了一种解决方案。

二、开发环境

    软件环境:android 8.0.0 原生代码,msm内核源码,win7系统+CH341驱动。(要使用对应的源码分支和内核分支)

    硬件环境:Pixel 手机一部,CH341 USB转串口板2(淘宝上大把卖,大概十几块钱一个)

    首先请保证你的开发环境可以正常使用,pixel手机可以正常运行你编译的android系统和内核。

三、配置过程

    1.在内核编译时,使用make menuconfig或者是直接修改.config文件(如果你有按照android官方内核编译步骤进行过一次config配置,就会生成这个隐藏的.config文件),需要打开这几个配置:CONFIG_USB_SERIAL; CONFIG_USB_SERIAL_CH341;

        编译好新内核后,烧入手机。

     2.添加CH341的串口设备到内核打印终端列表。这里涉及到了Linux的内核启动和printk的打印机制,推荐大家可以了解下关于这方面的相关知识。

    推荐个地址:https://blog.csdn.net/Luoshengyang/article/details/6595744 老罗写的,虽然内核版本有点老了,但是基本原理都是一样的。

        https://blog.csdn.net/code__L/article/details/68061455。关于printk的。

    这一步的总体思路是这样的,当Linux启动时,boot会传入一些启动参数,其中就包括内核打印使用的串口终端。通过解析console_cmdline参数。例如console=ttyS0,115200 console=tty0,115200

 通过一个type CUSB的数据线将手机和CH341接起来然后用adb shell查看串口设备名称,比如插拔后新增了ttyUSB0。把这个名称记下来。

如果你能找到boot的启动参数,在console_cmdline中增加console=ttyUSB0,115200即可。

如果找不到,就需要修改printk的代码了。

static int __init console_setup(char *str)代码中解析了console_cmdline的参数,然后通过__add_preferred_console加入控制台列表中,可以添加参数实现,具体的分析就不累述了。

或者__add_preferred_console(buf, idx, options, brl_options);在这后面重新调用__add_preferred_console(ttyUSB, 0, 115200, brl_options);也可实现。

修改后重新编译内核,烧入手机。

三、连接调试

 

 

 


按上图连接好后,在PC上就可以打开串口软件查看内核的打印信息了。

 

本文仅供参考学习,如要转载请注明出处,谢谢!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过串口实时打印Android内核调试log信息 的相关文章

  • 字符串通配符(递归)

    题目描述 问题描述 xff1a 在计算机中 xff0c 通配符一种特殊语法 xff0c 广泛应用于文件搜索 数据库 正则表达式等领域 现要求各位实现字符串通配符的算法 要求 xff1a 实现如下2个通配符 xff1a xff1a 匹配0个或
  • 数据结构 实验报告01

    一 实验目的和要求 完成尽可能多的数据排序 xff0c 并显示运行时间 二 实验环境 编译器 xff1a Vscode DevC 43 43 系统 xff1a Windows10 CPU xff1a i5 8265U 64 1 60GHz
  • eclipse中java代码自动补全设置

    下面介绍一个eclipse自动补全的设置1 在eclipse页面 xff0c 点击顶部的Window选项选择进入Preferences选项 xff1a 2 点击java gt Editor gt Content Assist选项 xff1a
  • Java两种方法去除字符串末尾的数字

    问题 xff1a 如何去除这个字符串中末尾的数字 xff1a sdf12 432fdsf gfdf32 xff1f 这个问题的解决关键是要先把字符串进行反转操作 方法一 xff1a public static String removeNu
  • The word 'jsp' is not correctly spelled. Eclipse 拼写检查出错处理办法

    The word 39 jsp 39 is not correctly spelled Eclipse 拼写检查出错处理办法 用Eclipse开发程序 xff0c 发现输入JSP时 xff0c 系统提示The word 39 jsp 39
  • prepareStatement与Statement的区别

    prepareStatement与Statement的区别 1 区别 xff1a stmt 61 conn CreateStatement resultSet rs 61 stmt executeQuery sql 上面是statement
  • Java集合类详解

    Collection List LinkedList ArrayList Vector Stack Set Map Hashtable HashMap WeakHashMap Collection接口 Collection是最基本的集合接口
  • MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题以及error 1406:data too long for column 'name' at row 1

    MySQL中涉及的几个字符集 character set server default character set xff1a 服务器字符集 xff0c 默认情况下所采用的 character set database xff1a 数据库字
  • 网页的基底网址

    基底网址的实质是统一设置超级链接的属性 xff0c 基底网址标签是 lt base gt 它有两个属性 xff0c href和 target href用于设置基底网址的路径 xff0c target用于设置超级外国链接的打开文式 通过基底网
  • Python实现word转pdf

    Python实现word转pdf 在做word转未pdf的功能过程中找了很多java的实现 xff08 POI xff09 xff0c 对于普通的文档还是支持的还可以 xff0c 但是对于文档里面涉及图片 表格 水印等就会出现很多样式上的问
  • Java遍历集合四种方法

    import java util ArrayList import java util Iterator import java util List public class Test public static void main Str
  • Spring事务管理中@Transactional的参数配置

    Spring作为低侵入的Java EE框架之一 xff0c 能够很好地与其他框架进行整合 xff0c 其中Spring与Hibernate的整合实现的事务管理是常用的一种功能 所谓事务 xff0c 就必须具备ACID特性 xff0c 即原子
  • tomcat7在myeclipse中启动不了 出现严重: Error waiting for multi-thread deployment of directories to completehos

    问题解决 在 eclipse 中 xff0c window gt preferences gt Java gt Installed JREs 选中 JRE 点击 Edit 写入这句话 Xms800m Xmx800m XX MaxNewSiz
  • sql 模式,外模式,内模式 二级映像

    早上备课的时候 xff0c 发现教材第二章的2 2节数据库设计概述中有些概念性的错误 xff0c 从而使我想到 xff0c 对于外模式 模式 内模式的概念学生也不一定能理解透彻 xff0c 于是想通过博客再谈仔细 首先 xff0c 谈谈模式
  • Java关键字final、static使用总结

    一 final 根据程序上下文环境 xff0c Java关键字final有 这是无法改变的 或者 终态的 含义 xff0c 它可以修饰非抽象类 非抽象类成员方法和变量 你可能出于两种理解而需要阻止改变 xff1a 设计或效率 final类不
  • 抽象类是否可继承实体类

    一道java 常见面试题 xff0c 网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题 题目如下 xff1a 问 xff1a 抽象类是否可继承实体类 concrete class 答 xff1a 抽象类是可以继承实体类 x
  • 运行时异常与一般异常有何异同?

    ava提供了两类主要的异常 runtime exception和checked exception checked 异常也就是我们经常遇到的IO异常 xff0c 以及SQL异常都是这种异常 对于这种异常 xff0c JAVA编译器强制要求我
  • Mybatis----resultMap结果类型

    resultMap 结果类型 解决实体类和数据库字段不对应 项目结构 概述 resultMap 标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系 从而实现封装 在 select 标签中使用 resultMap 属性指定引用即可
  • Android应用开发(1)Android Studio开发环境搭建

    Android应用开发学习笔记 目录索引 本章介绍搭建Android Studio应用开发环境 xff0c 创建并编译App工程 xff0c 运行和调试App 一 搭建AndroidStudio开发环境 1 下载AndroidStudio
  • VSCode setting.json格式化 + eslintrc配置记录

    做个记录 xff0c 方便下次使用直接copy使用 vscode setting json eslintrc js setting json span class token punctuation span span class toke

随机推荐