• RK3288 st7703 mipi屏指令过长,程序跑飞


    本文为博主原创文章,转载请注明出处:https://www.cnblogs.com/lialong1st/p/11218433.html

    CPU:RK3288

    系统:Android 5.1

    调试 mipi 屏前,先关闭了 uboot 的 logo 显示

    rockchip,uboot-logo-on = <0>;

    屏调试完成后,打开 uboot 的 logo 显示

    rockchip,uboot-logo-on = <1>;

    但是开机时,系统竟然进不了 kernel,一直在 uboot 重启,log 如下:

    #Boot ver: 2019-07-20#2.30
    empty serial no.
    checkKey
    vbus = 1
    no fuel gauge found
    no fuel gauge found
    read logo on state from dts [1]
    pll_src = 0, dclk_hz = 66000000, dclk_div = 6
    undefined instruction
    pc : [<0000009c>]          lr : [<05971c18>]
    sp : 05735938  ip : 0001741c     fp : 00019094
    r10: 00000033  r9 : 05746a38     r8 : 0000003b
    r7 : 0000003c  r6 : fa8b95c7     r5 : 00000028  r4 : 0000000a
    r3 : ffffffff  r2 : 00000004     r1 : 0001741c  r0 : 00000000
    Flags: NzCv  IRQs on  FIQs off  Mode SVC_32
    Resetting CPU ...
    
    resetting ...

    原因: mipi 屏的指令太长,超出了定义的范围,程序跑飞了。

    解决办法:

    1、首先找到定义指令的数组,文件路径如下,打开文件搜索 cmds

    path:u-boot/drivers/video/screen/lcd_mipi.c

    在 rk_mipi_screen_init_dt 函数中定义的 cmds 数组长度只有 20,但是 mipi 屏最长的指令高达 64。

    u32 i,cmds[20];

    增大 rk_mipi_screen_init_dt 函数中 cmds 数组的长度,要超过 mipi 屏最长的指令长度。

    u32 i,cmds[128];

    2、编译 uboot 烧录后,系统虽然没有一直重启,但是卡在 uboot,进不了 kernel,提示内存申请失败,log如下

    #Boot ver: 2019-07-20#2.30
    empty serial no.
    checkKey
    vbus = 1
    no fuel gauge found
    no fuel gauge found
    read logo on state from dts [1]
    pll_src = 0, dclk_hz = 66000000, dclk_div = 6
    ERROR: [show_resource_image]: Failed to load image:logo.bmp
    no fuel gauge found
    malloc for bl levels fail
    Hit any key to stop autoboot:  0 
    ERROR : memory not allocated

    3、找到定义指令数组的结构体,文件路径如下,打开文件搜索 cmds

    path:u-boot/drivers/video/transmitter/mipi_dsi.h

    cmds 数组定义在 struct dcs_cmd 结构体中,长度只有 32

    int cmds[32];

    增大 struct dcs_cmd 结构体中 cmds 数组的长度,要超过 mipi 屏最长的指令长度。

    u32 i,cmds[128];

    4、此时编译烧录,完美解决问题。

    注:如果还没有打开 uboot 显示 logo,处在调试 mipi 阶段,程序还是因为 mipi 屏指令长度跑飞,有两种解决办法,如下:

    1、从 rochchip 更新代码,最新的 kernel 代码中已经解决指令长度过长问题。

    2、如果不想更新代码或者其他原因没办法更新代码,就需要手动增大指令数组的长度,类似与 uboot

      kernel/drivers/video/rockchip/screen/lcd_mipi.c

      kernel/drivers/video/rockchip/transmitter/mipi_dsi.h

  • 相关阅读:
    第六周作业----测试自动化工具
    第六周作业----内聚耦合
    HTML 滚动条实现
    mysql练习(一)
    flume本地调试
    -Dmaven.multiModuleProjectDirectory system propery is not set
    Cannot read property 'substring' of undefined
    JVM的几个介绍
    storm(二)消息的可靠处理
    storm(一)
  • 原文地址:https://www.cnblogs.com/lialong1st/p/11218433.html
Copyright © 2020-2023  润新知