MTK 平台串口日志
MTK 平台,串口的波特率:921600 (高通平台是:115200)
MTK 平台,可以不用在焊接串口线的情况下,通过usb口来打印串口日志。User版本打开各个阶段uart log(UART log),修改如下:
1. Preloader 阶段
文件:bootloader/preloader/platform/${plateform}/default.mak
修改:CFG_USB_UART_SWITCH :=1
注意:有些平台改成了 MTK_UART_USB_SWITCH
2. LK 阶段
文件:rlk6795_lwt_m.mk (根据平台选择文件)
修改:DEFINES += WITH_DEBUG_UART=1(1=enable)
3. cmdline的修改
文件:vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
修改:
1 2 3 4 5 | #ifdef USER_BUILD sprintf(cmdline, "%s%s" ,cmdline, " printk.disable_uart=0" ); // 需修改此文件所有的disable_uart=1, 1->0, 即可打开uart log #else sprintf(cmdline, "%s%s" ,cmdline, " printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"" ); #endif |
4. Kernel 阶段
文件:config 文件
修改:MTK_UART_USB_SWITCH = yes(yes = enable)
5. 开机到桌面后
开机到桌面后,手机uart log停止输出?
5.1 老一点的平台
文件:kernel-3.18/kernel/printk/printk.c
修改:
1 2 3 4 5 6 | void mt_disable_uart( void ) { if (mt_need_uart_console == 0) - printk_disable_uart = 1; + printk_disable_uart = 0; } |
5.2 新平台
文件:drivers/misc/mediatek/mtprintk/mtk_printk_ctrl.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #ifdef CONFIG_PRINTK_MTK_UART_CONSOLE /* * printk_ctrl: * 0: uart printk enable * 1: uart printk disable * 2: uart printk always enable * 2 only set in lk phase by cmline */ #ifdef CONFIG_MTK_ENG_BUILD int printk_ctrl; #else int printk_ctrl = 1; #endif module_param_named(disable_uart, printk_ctrl, int , 0644); |
这里,我们可以看到,将 printk_ctrl 设置为0 是开启uart log,1 是关闭uart log,2 是一直打开uart log,并且只能在lk中设置。
这个值是cmdline 里传过来的。所以修改如下:(这里以userdebug为例)
修改文件:vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | case BUILD_TYPE_USERDEBUG: if ((g_boot_mode == META_BOOT) && is_meta_log_disable && #ifdef LOG_STORE_SUPPORT (is_meta_log_disable() == 1) && (g_boot_arg->log_dynamic_switch == 0)) #else (is_meta_log_disable() == 1)) #endif cmdline_append( "mtk_printk_ctrl.disable_uart=1 slub_debug=O" ); #ifdef LOG_STORE_SUPPORT else if (boot_ftrace && g_boot_arg->log_dynamic_switch == 0) #else else if (boot_ftrace) #endif cmdline_append( "mtk_printk_ctrl.disable_uart=1 slub_debug=-" ); else { - cmdline_append( "mtk_printk_ctrl.disable_uart=0" ); + cmdline_append( "mtk_printk_ctrl.disable_uart=2" ); #ifdef MTK_DYNAMIC_UART_CONSOLE_REGISTER cmdline_append( "console=ttyS0,921600n1" ); #endif } break ; |
这样,我们就可以在一直打印串口日志了。
可以查看cmdline 中的值,看看修改是否生效。
adb shell cat /proc/cmdline
mtk_printk_ctrl.disable_uart=2
总结:
1. 查看了修改,基本思想是设置usb 的寄存器,应该是设置成串口模式了,所以可以吐出串口日志。
2. cmdline 里面,传入了不同的参数,kernel会通过这些参数加载串口驱动。(user版本要注意这一点)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix