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
修改:
#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
修改:
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
#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
修改:
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版本要注意这一点)
浙公网安备 33010602011771号