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

简介: 获取串口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日志并进行多维度分析。
目录
相关文章
|
4月前
|
DataWorks DataX
请仔细检查DataX报告的脏数据日志信息,或者调整脏数据阈值。
请仔细检查DataX报告的脏数据日志信息,或者调整脏数据阈值。
485 1
|
4月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
60 0
|
3月前
|
Kubernetes 关系型数据库 MySQL
seata启动问题之指针异常如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题。
68 0
项目中常见NPE空指针异常
项目中常见NPE空指针异常
|
2月前
|
存储 SQL 运维
揭秘如何通过日志服务实现个人敏感信息保护
【2月更文挑战第3天】阿里云日志服务SLS(Simple Log Service)为保护个人敏感信息提供了全面的数据安全策略。在数据采集阶段,客户端可以对包含敏感信息的日志进行AES加密后上报至SLS中心Logstore,利用HTTPS加密链路保障传输安全。在存储环节,SLS支持对敏感字段进行专门的脱敏处理,如替换、哈希或截断等手段,确保原始敏感信息不被明文暴露。对于需要使用日志数据的业务方,SLS允许在分发前对敏感数据进行解密并再次脱敏,以满足合规性和安全性要求。通过精细的权限管理和审计功能,SLS可记录所有访问和操作日志,确保任何对敏感数据的操作都可追溯。
|
2月前
|
安全 IDE Java
终结空指针异常:Java开发者的生存指南
终结空指针异常:Java开发者的生存指南
60 1
|
2月前
|
安全 IDE Java
【2024java面试题无需C币下载】终结空指针异常:Java开发者的生存指南
【2024java面试题无需C币下载】终结空指针异常:Java开发者的生存指南
45 1
|
3月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
49 0
|
3月前
|
存储 监控 Serverless
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况
在处理阿里云函数计算3.0版本的函数时,如果遇到报错但没有日志信息的情况【1月更文挑战第23天】【1月更文挑战第114篇】
63 5
|
8月前
selenium--记录日志信息
selenium--记录日志信息

热门文章

最新文章