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.

AM57xx DSP裸跑 mailbox

Other Parts Discussed in Thread: AM5728

麻烦问一下,我最近使用TI AM5728,实现了DSP采用RTOS的IPC通信,现在想要完成DSP裸跑,ARM和DSP之间通过Mailbox通信。

ARM端采用RT-LINUX最新06.03版本的SDK,内核版本为04.19。参考了一下论坛应用三例程:

 

该例程Makefile中使用交叉编译工具为4.0版本,我将该Mailbox例程中的交叉编译工具都替换掉,成功编译出dsp_mailbox.ko模块。但是将其移植到开发板上后,执行insmod命令,报错“insmod: ERROR: could not insert module dsp_mailbox.ko: Invalid parameters”:


使用dmesg查看内核打印信息为:

[  110.678317] dsp_mailbox: no symbol version for module_layout

[  110.678945] insmod dsp mailbox driver

[  110.678956] --->>> DSP Initialization is in progress ... <<<---

[  110.679005] DEBUG: Clock is active ...

[  110.679017] DEBUG: Checking for data integrity in DSPSS L2RAM ...

[  110.679027] DEBUG: Data integrity check in GEM L2RAM is sucessful!

[  110.679034] --->>> DSPInitialization is DONE! <<<---

[  110.679040] --->>> DSP Initialization is in progress ... <<<---

[  110.679087] DEBUG: Clock is active ...

[  110.679098] DEBUG: Checking for data integrity in DSPSS L2RAM ...

[  110.679109] DEBUG: Data integrity check in GEM L2RAM is sucessful!

[  110.679116] --->>> DSPInitialization is DONE! <<<---

[  110.679124] failed to register mailbox interrupt:-22

 

 

查了资料,说是缺少Module.symvers,但是我发现该例程下面是有该文件的。为了验证,我将RT-Linux内核源码下的Module.symvers文件替换了到该例程下,依旧出现该问题。

还是说是因为该例程只针对4.0版本?如果是这样应该如何修改以适配我当前版本?

请教一下,如何解决这个问题?

  • 我忽略掉“[ 110.678317] dsp_mailbox: no symbol version for module_layout”,根据最后一行报错“[ 110.679124] failed to register mailbox interrupt:-22”将该工程中的驱动代码,将request_irq中断申请函数注释掉,这样可以insmod成功。但是最后执行发送未成功,因此我觉得应该是中断号申请错误???

    PS.通过查询,中断注册函数-22错误是无效参数的原因,但是我不知具体参数错误。该工程中设置第三个参数为IRQF_SHARED,共享中断。并且,在该工程给出的驱动代码中,中断申请和释放中断函数中的中断号并不一致?具体如下图:

    以下是将中断注册函数注释后,成功insmod;并加载DSP1、DSP2软件;运行mailbox_test测试程序进行  ARM->DSP1->DSP2->ARM  的环路测试结果:

    (最后ARM发送DSP1,不确定是否DSP1成功发送信息到DSP2,但是DSP2未发送消息回到ARM)

    另外,在DSP裸跑情况下,如何知道DSP是否成功发送,能否打印信息?

    以下是AM57xx的技术手册:

    如果是中断服务号的问题,那么ARM使用Mailbox13,应该选user几?

  • 我已经转给相关工程师,请等待回复,谢谢!
  • 通过”cat /proc/interrupts”可知MAILBOX对应ARM核中断号 

    用系统预先定义好的

  • 很感谢您的回复。但是cat /proc/interrupts 命令只能查询到已经注册过的中断,我还未注册成功,是看不到的。

    除此之外,我采取了以下几种措施:

    1.  根据技术参考手册中mailbox13终端设置,设置中断注册函数第一个参数为381,依旧显示 “-22错误,无效参数”错误。

    2.  查看设备树,

    发现中断号26,我按照您说的在“”cat /proc/interrupts“ 中查询对应的中断号,为39,设置中断注册函数第一个参数为39,显示报错”已经被占用“

    但是我不明白上图中 00002084 和 00002004 的意义是什么。

    3.  我随便将中断注册函数第一个参数设置为180(因为我发现我cat /proc/interrupts截止到179,因此我尝试180),此时没有报错,注册成功,insmod dsp_mailbox.ko成功,但是依旧只能看到 ARM发送0x1出去,并没有接受到返回的消息。我猜测这个的原因也是因为中断号的设置错误导致..

    问题一:该例程中,中断注册函数的第一个参数中断号究竟如何确认?

    问题二:在目前无法形成环路的情况下,无法判断DSP1是否收到ARM发过来的消息,无法判断DSP1是否发送消息给DSP2。

    问题三:若将该工程中  DSP2发送消息回ARM  改成  DSP1收到ARM消息直接返回ARM  ,需要修改DSP1部分代码将发送到DSP2改为ARM,除此之外,dsp_mailbox驱动中的中断注册函数的中断号还需要进行改正吗?

    Look forward to your reply!

    通过”cat /proc/interrupts”可知MAILBOX对应ARM核中断号 

    用系统预先定义好的

  • 感谢,原来是在未删除lib/firware/下的dsp和ipu的时候查看系统预定义好的,我之前是删除了这些文件后查看中断。

    Denny%20Yang99373 说:

    通过”cat /proc/interrupts”可知MAILBOX对应ARM核中断号 

    用系统预先定义好的