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版本要注意这一点)

 

posted @   皓然123  阅读(1098)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示