Thread 中讨论的其他器件:DA8XX、 OMAP-L138
工具/软件:Linux
我正在尝试从最近的 Processor SDK Linux/RTOS v4.0运行 IPC MessageQ 示例。 但该示例不起作用。
Linux 端日志:
root@omapl138-lcdk:~# MessageQApp using numLoops:100;ProcID:1 输入 MessageQApp_execute Local MessageQId:0x80 root@omapl138-lcdk:~# cat /tmp/LAD/lad.txt [0.426633] 正在初始化 LAD ... [0.440095] 正在打开 FIFO:/tmp/LAD/LADCMDS [116.768588]正在检索命令... [116.770189] LAD _连接: [116.770338] 客户端 FIFO 名称=/tmp/LAD/385 [116.770430] 客户端 PID = 385 [116.770501] 分配的客户端句柄= 0 [116.770901] 创建 FIFO /tmp/LAD/385 [116.772257] FIFO /tmp/LAD/385已打开进行写入 [116.772702] 已发送响应 [116.772830]完成 [116.772914]检索命令... [116.773899]正在发送响应... [116.774480]正在检索命令... [116.775092] LAD 多处理器_getconfig:正在调用 MultiProc_getconfig ()... [116.775249] MultiProc_getconfig ()- 2个处理器 [116.775338]#集群处理器:2 [116.775407]集群基 ID:0 [116.775471]处理器 ID 0 -"host" [116.775539]处理器 ID 1 -"DSP" [116.775595] 状态= 0 [116.775654]完成 [116.775707]发送响应... [116.775862]正在检索命令... [116.776416] LAD 名称服务器_Setup:正在调用 nameserver_setup()…… [116.776624] nameserver_setup:已输入、refcount=0 [116.777045] nameserver_setup:正在创建侦听器线程 [116.778029] nameserver_setup:正在退出、refcount=1 [116.778441] 状态= 0 [116.778553]完成 [116.778630]发送响应... [116.779119]正在检索命令... [116.779355] LAD_MessageQ_getconfig:调用 MessageQ_getconfig ()... [116.779468] 状态= 0 [116.779552]已完成 [116.779618]发送响应... [116.780117]正在检索命令... [116.780353] LAD MessageQ_Setup:Calling MessageQ_setup()…… [116.780468] MessageQ_setup:已输入、refcount=0 [116.780559] nameserver_create ():'messageQ' [116.780827] MessageQ_setup:正在退出、refcount=1 [116.780952] 状态= 0 [116.781039]完成 [116.781111]发送响应... [116.782380]正在检索命令... [116.782671] nameserver_attach:--> ProcID=1,refcount=0 [116.783439] listener_CB:输入的侦听器线程。 [116.783641] nameserver:等待 unblockFd:2和 SOCKS:maxfd:2 [116.952160] nameserver_attach:已创建 send 套接字:5、ProcID 1 [116.952542] nameserver_attach:连接失败:ProcID=1、errno=22 (无效参数) [116.952860] 正在关闭发送套接字:5 [116.953061] nameserver_attach:<- refcount=0、status=-1 [116.953181]正在发送响应... [116.954561]正在检索命令... [116.954810] LAD_MessageQ_create:调用 MessageQ_create (0x2c7fc、0x2c81c)... [116.954927] MessageQ_create:创建'host' [116.955046] MessageQ_create:返回 obj=0x315d8、qid=0x80 [116.955218] 状态= 0 [116.955305]已完成 [116.955369]正在发送响应... [116.955915]正在检索命令... [116.956152] LAD MessageQ_Announce:调用 MessageQ_Announce (0x2c7fc、0x315d8)... [116.956270] MessageQ_Announce:宣布0x315d8 [116.956396] nameserver_add:输入的密钥:'host'、数据:0x80 [116.956566] 状态= 0 [116.956676]完成 [116.956742]发送响应... [116.973196]正在检索命令... [116.973446] LAD 名称服务器_GETUINT32:调用 nameserver_getUInt32 (0x314f0、'Slave_DSP')... [116.973596] nameserver_getLocal:输入键:找不到'slave_DSP'! [116.973708] nameserver_getRemote:处理器1没有插槽连接 [116.973802] 值= 0x80 [116.973880] 状态=-5 [116.997252]完成
DSP 侧日志:
root@omapl138-lcdk:~# cat /debug/remoteproc/remoteproc0/trace0 3个位于0xc3100000 MessageQ_single.c 的资源条目:main:MultiProc id = 1 在61上使用主机 tsk1Fxn 注册 rpmsg-proto:created MessageQ:slave_dsp;QueueID:0x10080 等待主机发送同步消息...
此外、在加载内核模块 da8xx_remoteproc 期间、我会看到 strage 警告:
root@omapl138-lcdk:~ modprobe da8xx_remoteparteremoveproc0:为 DSP remoteproc remoteproc0供电:启动 FW 映像 rproc-dsp-FW,大小为4216832 root@rpomap138-lcdk:~# rpmodvirtio_rpmsg_tirtio_bus tio0:0xstirdc-to-line-to-virtirdc-to-video--创建主机:rmpirtirtirtirtirtos- [在此处剪切]----- 警告:CPU:0 PID:402 at net/rpmsg/rpmsg_proto:117 rpmsg_sock_get_proc_id+0x44/0x60 [rpmsg_proto ] 链接的模块:da8xx_remote_rpci_proto Hawtio_rpmsg_bus rpmsgird_core autotirtio ohotio renti_ring_decrent_rack_ring_decu.4xx :dam_dcpu_dcpu_dam4xx 硬件:tirtid_dam_damdam_g_r_r_govers_rack_rack_dam4xx vid_damdam_g_r_govers_govers_dam_dam_rack_r_rack_r_r_g_rack_ ](dump_backtrace)从[ ](show_stack+0x18/0x1c) r7:00000009 R6:00000000 R5:bf0a8d78 R4:00000000 [ ](show_stack)从[ ](dump_stack+0x20/0x28) [ ](dump_stack)从[ ](_warn+0xdc/0x104) [ ](__warn)从[ ](warn_slespath_null+0x28/0x30) R9:c0684e74 R8:00000000 r7:00000008 R6:c60c2e80 R5:bf0a906c R4:ffffffed [ ](warn_slowpath_null)、来自[ ](rpmsg_sock_get_proc_id+0x44/0x60 [rpmsg_proT]) [ ](rpmsg_sock_get_proc_id [rpmsg_proT])、来自[ ](rpmsg_proTO_probe + 0x20/0x134 [rpmsg_proto ]) R5:bf0a906c R4:c6bf2200 [ ](rpmsg_proTO_probe [rpmsg_proT])、来自[ ](rpmsg_dev_probe +0x98/0x144 [rpmsg_core]) r7:00000008 r6:c60c2e80 r5:bf0a906c r4:c6bf2200 [ ](rpmsg_dev_probe [rpmsg_core])、来自[ ](driver_probe_device+0x20c/0x2c0) r6:bf0a906c r5:c0684e98 r4:c6bf2200 [ ](driver_probe_device)从[ ](_DEVICE_ATE_DRIVER+0xa0/0xd4) R9:c0684e74 R8:00000000 r7:00000001 R6:c6bf2200 R5:c63d1d38 R4:bf0a906c [ ](_device_attach_driver)、来自[ ](bus_for_each _drv+0x6c/0x9C) r7:00000001 R6:c02cad40 R5:c63d1d38 R4:00000000 [ ](bus_for_each _drv)从[ ](_device_attach+b54/0x11c) r6:c6bf2200 r5:c6bf2234 r4:c6bf2200 [ ](_device_attach)从[ ](DEVICE_INTRIGE+0x14/0x18) r7:00000000 R6:c6bf2200 R5:bf09baac R4:c6bf2208 [ ](DEVICE_INTERY_PROBE)从[ ](bus_probe_device+0x8c/0x94) [ ](bus_probe_device)、来自[ ](device_add+0x3d0/0x580) r7:00000000 R6:c6bf2200 R5:c60f5a30 R4:c6bf2208 [ ](device_add)从[ ](DEVICE_REGISTER+0x1c/0x20) R10:c62dd8c8 R9:bf0a12c4 R8:00000000 r7:c62dd880 R6:c60f5a30 R5:00000000 R4:c6bf2200 [ ](DEVICE_REGISTER)从[ ](rpmsg_register_device+0x58/0x94 [rpmsg_core]) R5:00000000 R4:c6bf2200 [ ](rpmsg_register_device [rpmsg_core])、来自[ ](rpmsg_ns_CB+0x160/0x22c [virtio_rpmsg_BUS]) R5:00000000 R4:c6bf2200 [ ](rpmsg_ns_CB [virtio_rpmsg_BUS])、来自[ ](rpmsg_recv_done + 0xd4/0x290 [virtio_rpmsg_bus]) r7:c60c2e4c r6:c62dd880 r5:c60c2e40 r4:c3040000 [ ](rpmsg_recv_done [virtio_rpmsg_BUS])、来自[ ](vring_interrupt+0x40/0x58 [virtio_ring]) r10:c057a264 r9:c0649c85 r8:c005fe14 r7:c063e278 r6:00000001 r5:c063e278 r4:c6070c00 [ ](vring_interrupt [virtio_ring])、来自[ ](rproc_vq_interrupt+0x4c/0x70 [remoteproc]) [ ](rproc_vq_interrupt [remoteproc])、来自[ ](handle_event+0x1c/0x30 [da8xx_remoteproc]) [ ](handle_event [da8xx_remoteproc])、来自[ ](IRQ_thread_fn+0x24/0x5c) R5:c063e278 R4:c62ae200 [ ](IRQ_THREAD_Fn)、来自[ ](IRQ_thread+0x100/0x1e4) r7:c063e278 R6:00000001 R5:c63d0000 R4:c62ae200 [ ](IRQ_THread)、来自[ ](kthread+0xdc/0xFC) R10:00000000 R9:00000000 R8:c005ff9c r7:c62ae200 R6:c63d0000 R5:00000000 R4:c6359ee0 [ ](kthread)、来自[ ](RET_FAND_FANK+0x14/0x24) R8:00000000 r7:00000000 R6:00000000 R5:c003e4cc R4:c6359ee0 --[结束跟踪659ed63e3e519576 ]--远程处理器 远程处理器0:注册的 virtio0 (类型7) DSP 远程处理器0:远程处理器模块0:远程处理器0 da8xx_remoteproc 使用的大小 3778 0 rpmsg_proto 6108 0 virtio_rpmsg_BUS 8812 1 rpmsg_proto rpmsg_core 7463 2 rpmsg_proto、virtio_rpmsg_bus remoteproc 27194 2 da8xx_remoteproc、rpmsg_proto virtiio 7667 2 virtio_rpmsg_bus、remoteproc virtio_ring 15185 2 virtio_rpmsg_bus、remoteproc firmware_class 8629 1 remoteproc ohci_da8xx 4776 0 ohci_hcd 30175 1 ohci_da8xx usbcore 195973 2 ohci_hcd、ohci_da8xx USB_common 4500 1 usbcore phy_da8xx_usb 3357 1 DaVinci_WDT 2654 0 自动4 26170 0
aslo 简单程序:
int main(){
int sock;
socklen_t len;
struct sockaddr_rpmsg dstAddr;
int err;
sock = socket (AF_RPMSG、 SOCK_SEQPACKET、0);
if (sock < 0){
printf ("无法创建套接字%s (%d)\n"、errno、strerror (errno));
return -1;
}/*
连接到远程服务*/
memset (&dstAddr、0、sizeof (dstAddr));
dstAddr.family = AF_RPMSG;
//将 MultiProc 'clusterid'转换为 remoteproc 索引*/
dstAddr.vproc_id = 0;
dstAddr.addr = 61;
len = sizeof (struct sockaddr_rpmsg);
err = connect (sock、(struct sockaddr *)&dstAddr、len);
if (err < 0){
printf ("连接失败:%s (%d)\n"、strerror (errno)、errno);
返回(-1);
}
printf("Socket connect OK\n");
关闭(SOCK);
返回0;
}
使用 errno -22 (EINVAL)连接期间失败。
我尝试了两个选项:
- 使用 Processor SDK Linux/RTOS v4.0中的模块和示例预编译内核
- 按照 IPC 安装指南 Linux 中的说明、使用 SDK 中的模块手动重建内核4.9.28、 但不应用补丁(因为补丁适用于内核3.8.0):
make ARCH=arm CROSS_COMPILE=/some_path/arm-linux-gnueabi- distclean make ARCH=arm CROSS_compil=/some_path/arm-linux-gnueabi- tisdk_omapl138-lcdk_defconfig make ARCH=arm CROSS_COMPILE=/se_path/arm-linux-gnueabi- target=/target=/target_modules=/linux-target_modules=/linux-target_modules=/linux-target_install_arch/target_path=/target_ar_arch/target=/linux-target_arch/target=/linux-target=/
,但结果相同。
我出了什么问题? 为什么函数 rpmsg_sock_get_proc_id()(/net/rpmsg/rpmsg_proto.c)在检索 rproc id 时失败? 这是正常的吗?