user版本打开uart
如何在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 #else 585 sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\""); 586 #endif将上面的printk.disable_uart=1改成printk.disable_uart=0,然后重新编译lk, download lk 即可;或者直接download eng版本的lk。
如何开启Uart 的控制台(console/sh)
system/core/rootdir/init.rc515 service console /system/bin/sh 516 class core 517 console 518 disabled 519 user shell 520 seclabel u:r:shell:s0 521 522 on property:ro.debuggable=1 523 start console注释掉on property:ro.debuggable=1,然后重新编译bootimage 即可。
如何在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 &如果想关闭上层log, 直接ps 查阅前面开启的logcat process pid, 然后kill -9 pid 杀掉即可。
注意一定要带“&”,否则将block 住uart输入
让android log从串口kernel log输出
分析无法开机问题,如串口RX/TX连接正常,可正常输入,请参考上面第3点。
如确认RX/TX连接正常,但不能输入,则可能是下面原因导致:
数据流控制是否正确,一般需关闭,下面为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分别对应的两个二进制的值,所以如果本身传输数据中包括该值,那么此软件的流控制就失效了。现在好像也很少用此种流控制了。
- 是否打开回显
串口分析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
本文档介绍了如何在Android User版本中启用UART,包括修改LK配置、开启UART控制台以及通过串口捕获Kernel和上层LOG。针对可能出现的问题,如UART卡死、数据流控制和回显等进行了分析,并提供了解决方案,如关闭数据流控制、后台运行logcat以及将logcat重定向到kmsg。
635

被折叠的 条评论
为什么被折叠?



