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版本?如果是这样应该如何修改以适配我当前版本?
请教一下,如何解决这个问题?
GuangKai Meng:
我忽略掉“[ 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几?
,
Nancy Wang:
我已经转给相关工程师,请等待回复,谢谢!
,
Denny%20Yang99373:
通过”cat /proc/interrupts”可知MAILBOX对应ARM核中断号
用系统预先定义好的
,
GuangKai Meng:
很感谢您的回复。但是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核中断号
用系统预先定义好的
,
GuangKai Meng:
感谢,原来是在未删除lib/firware/下的dsp和ipu的时候查看系统预定义好的,我之前是删除了这些文件后查看中断。
Denny%20Yang99373 说:
通过”cat /proc/interrupts”可知MAILBOX对应ARM核中断号
用系统预先定义好的
TI中文支持网









