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.

ucLinux下Multicore Navigator的驱动问题

您好!

              我参照论坛提供的Keystone1工程里多核导航器的例子,将多核导航器的驱动移植到

       6678evm的ucLinux(Mcsdk linux)系统下。1. 过将中断去掉了,接收数据时是通过轮询寄存器,

      而不是通过中断的方式。2. 将多核导航器当成一个字符驱动设备,以模块的方式装载到ucLinux内核。

      在驱动程序的入口函数里对 多核导航器进行一次初始化,并进行了一次DRR到DRR的数据传输。

      不过遇到了一个严重的问题,一直没找出来,请各位不吝指教。问题具体如下:

              在用insmod装载该模块后,数据能正确的传输过去,不过之后系统马上崩溃了,表现为:1. 连接开发板

      系统的超级终端对继续输入的命令(如 ls)没有反应。2. 主机无法通过telnet命令连接开发板系统。

             请各位帮我分析下,该程序移植前是可以正常在开发板上(非linux系统)跑的。感激不尽,谢谢!

  • 看你写的数据已经传输完成了?是否写了系统使用的内存区域?

    需要具体的调试才能知道

  • 您好!

                   1.数据确实传输完成了。但之后系统对超级终端的命令(如ls)可以显示,就是不执行。

                    2.我主要配置了MultiCore Navigator的一些寄存器,

             我把描述符和数据buf都放在0x90000000之后,系统使用的内存区域好像在

             0x80000000到0x90000000之间,其它内存区域我没动过。

                   3.请问怎么调试这个内核。谢谢!

  • 您好!

           在今天的调试中我进一步发现,1. 只要把KeyStone_QMSS_Linking_RAM_init()方法中的几行(红色标记)注释掉

     就不会出现系统没有反应的情况 2. 还有系统没有反应后再用telnet命令连接系统会出现 kernel panic - not syncing:bug 的提示,

     具体如下:

    void KeyStone_QMSS_Linking_RAM_init(unsigned long long * linkingRAM1,
    Uint32 linkingRMA1NumEntry)
    {
    int i;

    /*use QMSS internal linking RAM for region 0*/
    gpQM_configRegs->LINKING_RAM_REGION_0_BASE_ADDRESS_REG= QMSS_LINKING_RAM_OFFSET;
    gpQM_configRegs->LINKING_RAM_REGION_0_SIZE_REG= QMSS_LINKING_RAM_REGION_0_DEFAULT_SIZE;
    //numLinkingEntry= QMSS_LINKING_RAM_REGION_0_DEFAULT_SIZE+1;

    /*configure linking RAM region 1*/
    if(NULL!=linkingRAM1&&linkingRMA1NumEntry)
    {
    gpQM_configRegs->LINKING_RAM_REGION_1_BASE_ADDRESS_REG= GLOBAL_ADDR(linkingRAM1);
    numLinkingEntry+= linkingRMA1NumEntry;
    }

    //empty all queues
    //for(i=0; i<8192 ; i++)
    //gpQueueManageRegs[i].REG_D_Descriptor= 0;

    }

           请大家帮帮我,谢谢!

    Multicore navigator.zip