平台:mt6582 + android 4.4
mtk通过串口连接机器读取uart log信息,但是在系统启动完成之后在uart log中会出现这样的信息:
<< printk console disable >>
通过搜索在kernel/kernel/printk.c中的mt_disable_uart函数打印出来的。
#ifdef CONFIG_MT_PRINTK_UART_CONSOLE
extern int mt_need_uart_console;
inline void mt_disable_uart()
{
if(mt_need_uart_console == 0){
printk("<< printk console disable >>\n");
printk_disable_uart = 1;
}else{
printk("<< printk console can't be disabled >>\n");
}
}
inline void mt_enable_uart()
{
if(mt_need_uart_console == 1){
if(printk_disable_uart == 0)
return;
printk_disable_uart = 0;
printk("<< printk console enable >>\n");
}else{
printk("<< printk console can't be enabled >>\n");
}
}
#endif
通过上面代码猜测如果要取消disable uart功能,即在系统启动完成之后也要能够看到uart log信息,需要取消CONFIG_MT_PRINTK_UART_CONSOLE配置,然后继续搜索,在mediatek/config/mt6582/autoconfig/kconfig/platform中找到了这个配置,但是这个文件在开始处就说明了是自动生成的,那么我们在修改这个文件时也最好自动生成它,而不是强制修改它。
根据以往的经验,platform这个文件应该是make menuconfig生成的.config文件,所以将这个文件放到kernel目录下,并重命名为.config,然后运行make menuconfig命令,但是会提示TARGET_PRODUCT/PROJECT is not set这样的错误,指定project,输入命令make TARGET_PRODUCT=hexing82_cwet_kk menuconfig,然后做如下的配置:
[*] MediaTek Properitary Configuration ---> Kernel Configurations ---> [ ] MTK printk UART controller
然后在编译的时候有可能会编译错误,会提示需要输入make mrproper命令,还是在kernel目录下输入命令make TARGET_PRODUCT=hexing82_cwet_kk mrproper,重新编译即可。
// 2016.04.22 add
平台:mt6735 Android版本:5.1
user版本默认进入内核串口是没有log输出的,但是本人就遇到了一个问题,eng版本可以正常开机,而user版本在kernel处不断重启,没有办法,必须抓一下log,要在user版本下抓串口log,需要修改lk传递给kernel的命令行参数,修改内容如下(bootable/bootloader/lk/app/mt_boot/mt_boot.c):
#ifdef USER_BUILD
- sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=1");
+ sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0");
#else
sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");
#endif
也就是将命令行参数printk.disable_uart的值由1改成0。
// 2016.11.25 add
在串口抓log输出<< printk console disable >>这个信息之后,就不会再有出来log了,除了改配置以外,还有3种方式可以再出log。
1. 接串口,在终端里面输入任意字符。
2. 在adb shell里面输入adb shell echo 1 > /proc/mtprintk。
3. 在adb shell里面输入setprop persist.uartconsole.enable 1。
如果需要禁止第一种方式,需要修改mtk的uart.c的mtk_uart_irq()函数,在该函数中,如果接收到了任意字符,并且该串口是log串口的话,会把printk_disable_uart置0,注释掉这一句就可以了。