mtk 串口读取uart log

平台: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,注释掉这一句就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值