This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

1G ddr 升 2GDDR 时, 板子启动卡死到Uncompressing Linux... done, booting the kernel.



   开发包版本:DVRRDK3.5, 8168芯片,板子是公司自己生产。

1G DDR 时, 启动板子、加载内核以及运行程序都没有任何问题。最近公司想升级为2G 内存,所以我按照install文档修改rules.make文件,以及修改uboot启动参数。新修改的参数为:

setenv bootargs 'console=ttyO2,115200n8 noinitrd mem=512M rootdelay=5 root=/dev/nfs nfsroot=192.168.1.91:/home/work/dm8168/DVRRDK_03.50.00.05/target/rfs_816x, rw ip=192.168.1.92:192.168.1.109:192.168.1.254:255.255.0.0::eth0:off vram=20M notifyk.vpssm3_sva=0xbfb00000 stdin=serial ddr_mem=2048M vmalloc=476M'


板子可以启动了,但是在执行init.sh以及load.sh时,都无法执行,下面是错误信息:

root@dm816x:/opt/dvr_rdk/ti816x# sh init.sh *** Bootargs Validated for mem param *** *** Bootargs Validated for notifyk.vpssm3 params *** *** This RDK version requires LINUX_BASE_ADDRESS=0xc0000000.Recompile uImage *** Cmd to rebuild uImage@0xc0000000:mkimage -A arm -O linux -T kernel -C none -a 0xc0008000 -e 0xc0008000 -n 'Linux-2.6.37' -d arch/arm/boot/zImage uImage Refer processors.wiki.ti.com/.../DM816x_AM389x_PSP_User_Guide Kernel bootargs mismatch.!!!!ABORTING!!!

于是我又按照网上查到的资料,将内核起始地址改为C0000000, 使用命令为:

mkimage -A arm -O linux -T kernel -C none -a 0xc0008000 -e 0xc0008000 -n 'Linux-2.6.37' -d arch/arm/boot/zImage uImage
重新生成uImage, 重启板子以后出现了下面这种情况,无法继续往下运行了。

Load address: 0x81000000 Loading: T ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################### done Bytes transferred = 2590672 (0x2787d0) ## Booting kernel from Legacy Image at 81000000 ... Image Name: Linux-2.6.37 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2590608 Bytes = 2.5 MiB Load Address: c0008000 Entry Point: c0008000 Verifying Checksum ... OK

Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel.

我参考了其他帖子,但是我还是无法解决这个问题。请专家帮忙看一下这个问题,多谢。

另外,是否3.5的DVRRDK包不支持2G的DDR?

  • 你好,

    你修改了Linux在DDR上的起始地址,你是否也修改了bld文件?

  • 专家你好,内核加载失败我已经解决了。我发现使用mkimage修改内核入口地址不可行,我的方法是修改内核里面的makefile。boot文件,将基地址修改为0xC0000000,同时修改uboot参数loadaddr地址0xC0000000,,然后内核就可以正常启动了。

    bld文件是按照install文档里面的来配置,基本上没有做太大修改,只给DSP_DATA_SIZE和DSP_CODE_SIZE分别增加了40M、10M,也将SR1_SIZE进行了减50M。

    但是在执行load.sh时又报出了新的问题,运行后板子跑飞了。

  • 你好,

    默认的2G bld把Linux放到了0xE0000000,你需要修改bld文件,把linux使用的DDR放到0xC0000000。

  • 多谢你的答疑,我找到我的bld文件,现在内容如下。不过我计算了下,配置应该没有问题吧,请专家再指点一下。

    var DDR3_ADDR = 0x80000000;
    var DDR3_SIZE = 2048*MB;

    var OCMC0_ADDR = 0x40300000;
    var OCMC1_ADDR = 0x40400000;
    var OCMC0_RUN_ADDR = 0x00300000;
    var OCMC1_RUN_ADDR = 0x00400000;
    var OCMC_SIZE = 256*KB;

    var L2_SRAM_ADDR = 0x55024000;
    var L2_SRAM_SIZE = 128*KB;
    var L2_SRAM_RUN_ADDR = 0x20004000;

    var DUCATI_WB_WA_ADDR = 0x20000000;

    var TOTAL_MEM_SIZE = 2048*MB;


    /* FIRST + SECOND 512MB */
    /* var SR1_SIZE = 278 * MB;*/    /*向dsp分配50*MB*/
    var SR1_SIZE = 228 * MB;
    var VIDEO_M3_CODE_SIZE = 3 * MB;
    var VIDEO_M3_BSS_SIZE = 15 * MB;
    var VIDEO_M3_DATA_SIZE = 3 * MB;
    var DSS_M3_CODE_SIZE = 2 * MB;
    var DSS_M3_BSS_SIZE = 20 * MB;
    var DSS_M3_DATA_SIZE = 6 * MB;
    /*var DSP_CODE_SIZE = 1 * MB;*/    /*分配50*MB给dsp端*/
    var DSP_CODE_SIZE = 11 * MB;
    /*var DSP_DATA_SIZE = 24 * MB;*/
    var DSP_DATA_SIZE = 64 * MB;
    var SR2_FRAME_BUFFER_SIZE = 640 * MB;
    var VIDEO_M3_EXCEPTION_CTX_SIZE = 128*KB;
    var VPSS_M3_EXCEPTION_CTX_SIZE = 128*KB;
    var SR0_SIZE = 22 * MB + 768 * KB;
    var HDVPSS_DESC_SIZE = 2 * MB;
    var HDVPSS_SHARED_SIZE = 2 * MB;
    var NOTIFY_SHARED_SIZE = 2 * MB;
    var REMOTE_DEBUG_SIZE = 1 * MB;
    var SHARED_MEMORY_SIZE = 2 * MB;

    /* THIRD 512MB */
    var TILER_SIZE = 256 * MB;
    var SR3_FRAME_BUFFER_EXTRA_SIZE = 256 * MB;

    /* LAST 512MB */
    var LINUX_SIZE = 512 * MB;

    /* first and second 512MB */
    var SR1_ADDR = DDR3_ADDR;
    var VIDEO_M3_CODE_ADDR = SR1_ADDR + SR1_SIZE;
    var VIDEO_M3_DATA_ADDR = VIDEO_M3_CODE_ADDR + VIDEO_M3_CODE_SIZE;
    var VIDEO_M3_BSS_ADDR = VIDEO_M3_DATA_ADDR + VIDEO_M3_DATA_SIZE;
    var VIDEO_M3_BSS_MAPPED_ADDR = (VIDEO_M3_BSS_ADDR - DDR3_ADDR) + DUCATI_WB_WA_ADDR;
    var DSS_M3_CODE_ADDR = VIDEO_M3_BSS_ADDR + VIDEO_M3_BSS_SIZE;
    var DSS_M3_DATA_ADDR = DSS_M3_CODE_ADDR + DSS_M3_CODE_SIZE;
    var DSS_M3_BSS_ADDR = DSS_M3_DATA_ADDR + DSS_M3_DATA_SIZE;
    var DSS_M3_BSS_MAPPED_ADDR = (DSS_M3_BSS_ADDR - DDR3_ADDR) + DUCATI_WB_WA_ADDR;
    var DSP_CODE_ADDR = DSS_M3_BSS_ADDR + DSS_M3_BSS_SIZE;
    var DSP_DATA_ADDR = DSP_CODE_ADDR + DSP_CODE_SIZE;
    var SR2_FRAME_BUFFER_ADDR = DSP_DATA_ADDR + DSP_DATA_SIZE;
    var VIDEO_M3_EXCEPTION_CTX_ADDR = SR2_FRAME_BUFFER_ADDR + SR2_FRAME_BUFFER_SIZE;
    var VPSS_M3_EXCEPTION_CTX_ADDR = VIDEO_M3_EXCEPTION_CTX_ADDR + VIDEO_M3_EXCEPTION_CTX_SIZE;
    var SR0_ADDR = VPSS_M3_EXCEPTION_CTX_ADDR + VPSS_M3_EXCEPTION_CTX_SIZE;
    var HDVPSS_DESC_ADDR = SR0_ADDR + SR0_SIZE;
    var HDVPSS_SHARED_ADDR = HDVPSS_DESC_ADDR + HDVPSS_DESC_SIZE;
    var NOTIFY_SHARED_ADDR = HDVPSS_SHARED_ADDR + HDVPSS_SHARED_SIZE;
    var REMOTE_DEBUG_ADDR = NOTIFY_SHARED_ADDR + NOTIFY_SHARED_SIZE;
    var SHARED_MEMORY_ADDR = REMOTE_DEBUG_ADDR + REMOTE_DEBUG_SIZE;

    var LINUX_ADDR = DDR3_ADDR + 1 * GB;   #DDR3_ADDR  上面标明的是0x8000 0000, 在这里我计算了下,应该没错的。
    var SR3_FRAME_BUFFER_EXTRA_ADDR = LINUX_ADDR + LINUX_SIZE;
    var TILER_ADDR = SR3_FRAME_BUFFER_EXTRA_ADDR + SR3_FRAME_BUFFER_EXTRA_SIZE;

  • 你好,我也遇到了你这样的问题,我是8148板子,内存想由512M升为1024M,我想知道你的1024M的.bld配置文件可不可以通过附件的形式发给我,我想你参考参考,谢谢你