通过串口log信息解决无限重启问题——空指针异常

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 获取串口log过程SecureCRT 配制串口log信息log来源函数为87工模添加lcm节点信息参考TP fl10802添加lcm节点信息添加st7701 lcm节点信息获取串口log过程SecureCRT 配制波特率:92160 RTS/CTS串口线 1.

获取串口log过程

SecureCRT 配制

波特率:92160
RTS/CTS

串口线
1. 黑线:GND
2. 蓝线:RX (板子recive)
3. 白线:TX(板子send)

串口log信息

[1380] DISP/ DSI read long packet size: 3
lcm_compare_id,lk ST7701S id = 0x88,id1 = 0x 2

[    1.534724]<3>.(2)[1:swapper/0][DDP/IRQ]register callback on 0
[    1.535214]<3>.(2)[1:swapper/0][DEVINFO LCM]Num:[0] type:[LCM] module:[JD-45FS0005-V0] vendor:[JUNDA] ic:[ILI9806E] info:[480*854] used:[false]
[    1.535231]<3>.(2)[1:swapper/0][DEVINFO LCM]Num:[1] type:[LCM] module:[TXDY450SFWPC-15] vendor:[TONGXINGDA] ic:[FL10802] info:[480*854] used:[false]
[    1.535245]<3>.(2)[1:swapper/0][DEVINFO LCM]Num:[2] type:[LCM] module:[(null)] vendor:[(null)] ic:[(null)] info:[(null)] used:[true]
[    1.535253]<3>.(2)[1:swapper/0][DISP]func|disp_lcm_probe
[    1.535261]<3>.(2)[1:swapper/0][DISPCHECK]plcm_name=st7701_fwvga_dsi_vdo_gt
[    1.535312]<3>.(2)[1:swapper/0][DISP][disp_lcm_probe #230]ERROR:FATAL ERROR: can't found lcm driver:st7701_fwvga_dsi_vdo_gt in linux kernel driver
[    1.535326]<3>.(2)[1:swapper/0][DISPCHECK][LCM], name: st7701_fwvga_dsi_vdo_gt
[    1.535334]<3>.(2)[1:swapper/0][DISPCHECK][LCM] resolution: 480 x 854
[    1.535342]<3>.(2)[1:swapper/0][DISPCHECK][LCM] physical size: 0 x 0
[    1.535350]<3>.(2)[1:swapper/0][DISPCHECK][LCM] physical size: 0 x 0


[    1.904048]<2>.(0)[100:frame_update_wo][DEVINFO LCM]registe LCM device!num:<0> type:<LCM> module:<JD-45FS0005-V0> vendor<JUNDA> ic<ILI9806E> version<(null)> info<480*854> used<false>
[    1.904057]<2>.(0)[100:frame_update_wo][DEVINFO] devinfo_check!
[    1.904122]<2>.(0)[100:frame_update_wo][DEVINFO LCM]registe LCM device!num:<1> type:<LCM> module:<TXDY450SFWPC-15> vendor<TONGXINGDA> ic<FL10802> version<(null)> info<480*854> used<false>
[    1.904129]<2>.(0)[100:frame_update_wo][DEVINFO] devinfo_check!
[    1.904137]<2>-(0)[100:frame_update_wo][DEVINFO] dev type:LCM
[    1.904143]<2>-(0)[100:frame_update_wo][DEVINFO] dev list type:LCM
[    1.904157]<2>.(0)[100:frame_update_wo][DEVINFO LCM]registe LCM device!num:<2> type:<LCM> module:<(null)> vendor<(null)> ic<(null)> version<(null)> info<(null)> used<true>
[    1.904163]<2>.(0)[100:frame_update_wo][DEVINFO] devinfo_check!
[    1.904171]<2>-(0)[100:frame_update_wo][DEVINFO] dev type:LCM
[    1.904177]<2>-(0)[100:frame_update_wo][DEVINFO] dev list type:LCM
[    1.904192]<2>-(0)[100:frame_update_wo]Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    1.904199]<2>-(0)[100:frame_update_wo]pgd = c0004000
[    1.904211]<2>-(0)[100:frame_update_wo][00000000] *pgd=00000000
[    1.904223]<2>-(0)[100:frame_update_wo][KERN Warning] ERROR/WARN forces debug_lock off!

M]Num:[2] type:[LCM] module:[(null)] vendor:[(null)] ic:[(null)] info:[(null)] used:[true]

registe LCM device!num:<2> type:<LCM> module:<(null)> vendor<(null)> ic<(null)> version<(null)> info<(null)> used<true>

Unable to handle kernel NULL pointer dereference at virtual address 00000000

从log信息来看,是我们刚添加的lcm节点信息问题,lcm节点没有数据,导致空指针异常。

log来源函数

下面是lcm节点信息传入的函数,由于该函数没有检测空指针问题而导致异常。

kernel/drivers/dev_info/dev_info.c


/*********************************************************************************
 * This functions is designed to check if declared already, and add new device if not yet;
 * Input:   devinfo_struct
 * Output:  1 / 0
 * Note: return 1 for there have a same device registed,0 for new device
 * *******************************************************************************/
int devinfo_check_add_device(struct devinfo_struct *dev)
{
    int result = 0;
    unsigned long irqflags;
    struct devinfo_struct *dev_all;
    printk("[DEVINFO] devinfo_check!\n");
    spin_lock_irqsave(&dev_lock, irqflags);
    if(list_empty(&active_devinfo_list) != 1)
    list_for_each_entry(dev_all, &active_devinfo_list, device_link) {
    printk("[DEVINFO] dev type:%s\n",dev->device_type);
    printk("[DEVINFO] dev list type:%s\n",dev_all->device_type);
    if((strcmp(dev_all->device_type,dev->device_type)==0) && (strcmp(dev_all->device_module,dev->device_module)==0) &&
        (strcmp(dev_all->device_vendor,dev->device_vendor)==0) && (strcmp(dev_all->device_ic,dev->device_ic)==0) &&
            (strcmp(dev_all->device_version,dev->device_version)==0) &&(strcmp(dev_all->device_info,dev->device_info)==0))// && shaohui mods here
        // It will be replaced if there is a used device found! Do not mention HOT plug device! 2013.01.31 
        //  (strcmp(dev_all->device_used,dev->device_used)==0))
    {
        if(strcmp(dev_all->device_used,dev->device_used)==0)
        {
            printk("[DEVINFO] find the same device\n");
        }else if(strcmp(dev_all->device_used,DEVINFO_UNUSED)==0)
        {
        //we belive that we find a existed device! del the unexisted one!
            printk("[DEVINFO] find device,but unused state!\n");
            list_del(&dev_all->device_link);
            list_add_tail(&dev->device_link, &active_devinfo_list);
        //  list_replace(&dev_all->device_link, &active_devinfo_list);
            spin_unlock_irqrestore(&dev_lock, irqflags);
            return 0;   
        }else{
        //If a for-existed device is found lost,Do nothing~
            printk("[DEVINFO] find device,but used state!\n");
        }

        spin_unlock_irqrestore(&dev_lock, irqflags);
        return 1;
    }

    }
    list_add_tail(&dev->device_link, &active_devinfo_list);
    spin_unlock_irqrestore(&dev_lock, irqflags);
    return 0;
}

为*#87#工模添加lcm节点信息

下面添加相对应的节点信息,解决空指针异常。

参考TP fl10802添加lcm节点信息

static void lcm_get_params(LCM_PARAMS *params)
{       // Video mode setting       
        params->dsi.intermediat_buffer_num = 2;
        #ifdef SLT_DEVINFO_LCM
        params->module="TXDY450SFWPC-15";
        params->vendor="TONGXINGDA";
        params->ic="FL10802";
        params->info="480*854";
        #endif
        params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;

添加st7701 lcm节点信息


#if defined(LCT_ADD_TP_VERSION)
static int gtp_info_read_proc(struct file *file, char *buffer, size_t count,  loff_t *ppos)
{

#LCM himax_852xES

        #ifdef SLT_DEVINFO_LCM
        params->module="TXDY450SFWPC-15";
        params->vendor="TONGXINGDA";
        params->ic="FL10802";
        params->info="480*854";
        #endif
...

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《移植mtk平台的lcm过程要点》: http://blog.csdn.net/u014134180/article/details/78124180

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
Java Shell
「sh脚步模版自取」测试线排查的三个脚本:启动、停止、重启、日志保存
「sh脚步模版自取」测试线排查的三个脚本:启动、停止、重启、日志保存
40 1
|
14天前
|
测试技术 开发工具 git
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
为了高效地发现、定位和解决预发问题,闲鱼团队研发了一套异常日志问题自动追踪-定位-分发机制。这套机制通过自动化手段,实现了异常日志的定时扫描、精准定位和自动分发,显著降低了开发和测试的成本,提高了问题解决的效率。
写了BUG还想跑——闲鱼异常日志问题自动追踪-定位-分发机制
|
2月前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
39 2
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
52 1
|
3月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。
|
2月前
|
存储 缓存 网络协议
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
157 0
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
4月前
|
Kubernetes 数据安全/隐私保护 容器
【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)
【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)
|
4月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息