user版本如何打开uart,让android log从串口kernel log输出

来源:互联网 发布:淘宝上哪个宠物店可信 编辑:程序博客网 时间:2024/05/16 23:49

user版本打开uart

  1. 如何在user版本中使用串口(uart)

    bootable/bootloader/lk/app/mt_boot/mt_boot.c

    582 #ifdef USER_BUILD                583         sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=1");584 #else585         sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");586 #endif
    • 1
    • 2
    • 3
    • 4
    • 5
    • 1
    • 2
    • 3
    • 4
    • 5

    将上面的printk.disable_uart=1改成printk.disable_uart=0,然后重新编译lk, download lk 即可;或者直接download eng版本的lk。

  2. 如何开启Uart 的控制台(console/sh) 
    system/core/rootdir/init.rc

    515 service console /system/bin/sh516     class core517     console518     disabled519     user shell520     seclabel u:r:shell:s0521 522 on property:ro.debuggable=1523     start console
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注释掉on property:ro.debuggable=1,然后重新编译bootimage 即可。

  3. 如何在Uart 上抓取上层LOG 
    Uart 上进行输入,实际就是开启了一个sh 对接起来,所以绝对不能在uart 上输入一个长命令(不可中断),否则uart 将被卡住,不能再输入。 
    抓取上层log, 我们通常需要使用logcat, 但logcat 是不可中断的,将导致uart 不能再输入。 
    处理的方法即将logcat 转入后台执行,如下操作即可:

    Main log: logcat -v time &Radio log: logcat -v time -b radio &Event log: logcat -v time -b events &
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    如果想关闭上层log, 直接ps 查阅前面开启的logcat process pid, 然后kill -9 pid 杀掉即可。 
    注意一定要带“&”,否则将block 住uart输入

让android log从串口kernel log输出

分析无法开机问题,如串口RX/TX连接正常,可正常输入,请参考上面第3点。 
如确认RX/TX连接正常,但不能输入,则可能是下面原因导致:

  1. 数据流控制是否正确,一般需关闭,下面为RS232的三种流控制模式介绍: 
    DTR/DSR:硬件上要有对应接口,软件上实现对应协议,才能实现此流控制。具体实现起来,一般好像是和RTS/CTS一直搭配使用。

    RTS/CTS:硬件上要有对应接口,软件上实现对应协议,才能实现此流控制。一般常见的也就是这种。但是很多开发板用secureCRT连接开发板的时候,往往都是在Uboot阶段,那时候还没有实现对应的RTS/CTS的流控制,所以此处需要取消此选择,否则,secureCRT就会去一直检测对应的RTS(Request To Send)pin脚,发现一直是无效,所以就一直没有接受到数据,就“卡”在那了。同样,你要输入数据,就是secureCRT要发送数据,所以其先发了个RTS给开发板,然后就一直检测自己的CTS是否有效,直到自己的CTS有效后,才能发送数据,而此处由于开发板上的驱动没有实现RTS/CTS,所以secureCRT就一直检测CTS,就“卡”死了,即你无法输入数据。

    XON/XOFF:软件上实现的流控制,硬件上无需像上面的RTS/CTS或DTR/DSR那样要增加对应的引脚。但是由于XON/XOFF分别对应的两个二进制的值,所以如果本身传输数据中包括该值,那么此软件的流控制就失效了。现在好像也很少用此种流控制了。

  2. 是否打开回显

串口分析kernel log正常但adb连不上时,并且串口只能输出时,希望让Android log也从串口输出,可以尝试此方法,以下是一个验证过的示例。 
原理上就是根据kernel log能够从串口输出,只要将logcat重定向到kmsg即可实现,因此各个平台的原理是一样的应该通用。(但须注意这样打印虽然能够有android log从串口输出,但串口输出量过大可能会出现丢log的情况) 
system/core/rootdir/init.rc中添加:

chmod 0660 /proc/kmsg################################################################ redirect logs(LOGE, LOGI...) to linux console###############################################################service logcat /system/bin/logcat -f /dev/kmsg *:D class main user root group log
0 0
原创粉丝点击