MTK Nucleus平台软件log抓取方法


[DESCRIPTION]
 
MTK 以Nucleus Plus OS为kernel的产品,包括feature phone(6260,6261),M2M(6261),Wearable(2501,2502),软件在开机过程经历了bootrom,bootloader,Nucleus kernel init,kernel schedule这些阶段,每个阶段抓取log的方式也不一样,如有需要某个阶段的log,请按以下说明抓取,如若在使用catcher进行抓取log时候也遇到死机,建议将dump一并抓取分析。
 
 
[SOLUTION]
 
1、brom log和bootloader log抓取方法一致:
只能使用uart连接PC,使用Putty或者超级终端等串口工具,设定好对应com口,波特率为115200.如若抓取的log里面有 bye bye bootloader,说明bootloader已经顺利走完。
 
2、Nucleus Kernel init log:
工程makefile中将 KAL_RECORD_BOOTUP_LOG 设为TRUE,make new
只能使用uart连接PC,使用catcher连接抓取,波特率设置为921600.
 
3、Kernel scheduler后:
只能使用Catcher进行抓取log
这个阶段的log可以自行设置为uart(包括波特率)或者usb,TST-PS config和TST-L1 config设定要一致,并与PS config不一致,如若设置为uart,建议波特率设置为921600,太慢会丢更多的log,设置方法有3种如下:
1)拨号*#3646633#进入工模,Device->Set Uart->Uart Setting
2)连接meta设定NVRAM,Other LID->NVRAM_EF_PORT_SETTING_LID->1
可将tst_port_ps和tst_port_l1设置为0, 1, 4, 5,分别代表UART1,UART2,USB1,USB2
tst_baudrate_ps和tst_baudrate_l1设定为921600。
此时port_ps就不能设置与上述设定一致,如若关闭可设为99 
 
3)以上两种设定都是将修改值保存在nvram中,如若有格式化fs区域,设定就会失效,可以修改代码,使用默认配置,这一般使用在遇到开机死机无法进行上述的操作时候采用,并且格式化后依然有效。
在custom\common\hal\nvram\nvram_data_items.c定位到NVRAM_EF_PORT_SETTING_DEFAULT结构,修改成员tst_port_ps、tst_baudrate_ps、tst_port_l1、tst_baudrate_l1,如若ps_port设定有一致,也请修改
 
这个结构的原形定义在:interface\hal\peripheral\dcl_uart.h
typedef struct
{
kal_uint16 tst_port_ps;
kal_uint16 ps_port;  
UART_baudrate tst_baudrate_ps;
UART_baudrate ps_baudrate;
kal_bool High_Speed_SIM_Enabled;
kal_uint8 swdbg;  
kal_uint8 uart_power_setting; /* For DCM, Start [Set UART POWER], CTI */
kal_uint8 cti_uart_port;
UART_baudrate cti_baudrate;
kal_uint8 tst_port_l1;
UART_baudrate tst_baudrate_l1;
kal_uint8 tst_output_mode;
kal_uint8 usb_logging_mode;
kal_uint16 tst_port_dsp;
UART_baudrate tst_baud_rate_dsp;
kal_uint8 usb_cdrom_config;
} port_setting_struct;
 
这里面好多宏控制着好几个分支,不清楚自己的工程是在哪个分支,可以对文件做一个备份,然后把每一个分支都改成一样,
 
修改后执行编译命令,make remake_dep custom\common\hal\nvram\nvram_data_items.c
format&download



###############################################################################################################
[DESCRIPTION]
 
MTK Nucleus平台系统开机会经过bootrom,bootloader,kernel init以及init后进入调度四个阶段,所以无法开机问题在以上各个阶段都有可能发生死机重启,hang住的可能,需要一步一步从log定位到是在哪个阶段出问题。
请提交上出问题对应阶段的log,如若有死机,还需要同时抓取dump提交,并附上elf。
 
[SOLUTION]
       各个阶段log抓取方法,请参考FAQ15179
 
1、如若设备有带屏幕,观察下开机失败时候屏幕是否已经有show logo,或者动画,有logo则已经顺利走过bootloader阶段,有可能在Kernel init或者调度一开始某个task出现问题,如若已经出现动画则一定完成了kernel init,只需要关心系统进入调度后的log。如若没有看到动画或者没有带屏幕,可以按以下步骤来抓取log
 
2、 可以优先抓取系统调度后的log,因为在这个阶段出现问题可能性最大,如若能抓取到log就可以忽略前面阶段的log,如果设定好端口还抓不到log,继续抓取前面阶段的log分析。
 
3、抓取bootrom bootloader阶段log,
观察是否有吐出log?
没有:BB没有上电,建议提交问题至硬件部门帮忙初步分析
有:继续观察是否有吐出 bye bye bootloader?
有: 说明bootloader阶段已经顺利走过,问题出在接下来的阶段中;
没有:说明问题出现在在bootloader中,提交log至软件部门帮忙分析。
 
4、抓取Kernel init阶段的log:
如若有出现 Enter task init - INDX_TST 说明这个阶段已经结束,没有的话就是在这个阶段出问题,如有遇到死机,请修改代码来打开memorydump开关抓取dump,方法如下:
(1)在application_initialize之前extern kal_uint32 INT_MemoryDumpFlag;
(2)在一进入application_initialize添加INT_MemoryDumpFlag = 0x26409001;

你可能感兴趣的:(mtk)