user版本打开uart

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

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

2

3

4

5

1

2

3

4

5582 #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.rc 1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9515 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 转入后台执行,如下操作即可: 1

2

3

1

2

3Main 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中添加:

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8chmod 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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐