我现在想用以太网口将内存里的数据用UDP协议传输到主机电脑,用抓包软件抓包。。。
我想问一下专家能不能给我一个思路,就究竟该怎么做?步骤应该怎么样?
谢谢
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.
我现在想用以太网口将内存里的数据用UDP协议传输到主机电脑,用抓包软件抓包。。。
我想问一下专家能不能给我一个思路,就究竟该怎么做?步骤应该怎么样?
谢谢
你可以使用TI提供的NDK,里面有UDP的例子,你可以参考。或者直接给予NDK的架构把你们自己的代码移植上去,就可以利用NDK提供的工具来进行UDP packet传输。
NDK的例子好像没有牵涉到底层是如何配置的,比如说如何将内存中某个地址的数传给主机。。
NDK提供了完整的TCP/IP协议栈,在例子中是有做硬件初始化和队列资源分配的,你可以参考client的例子。如果需要发送数据,可以open一个socket,然后将利用协议栈提供的函数将包组好,随后直接push到发送Queue中即可。
Zhang Xiang
你好,通过你的回复,我看了参考了client这个例子,其中有好几个问题想请您解答一下:
1。 例子的DATA BUFFER是一个什么概念,指针指向的是一段什么样的地址?比如说,我要发一串数据的话,指针是不是就指向我要发的那串数组?
2。 DaemonNew里的比如dtask_udp_echo这些函数的定义在哪里,SendRawEth和SendRawEth这两个函数在什么时候被处罚?
3“可以open一个socket,然后将利用协议栈提供的函数将包组好,随后直接push到发送Queue中即可”你所说的这些我有点不太明白。
不好意思,我是一个初学者。。多多指教。谢谢
其实我最关键的问题是,不知道怎么样将BUFFER与我想要传输的数据关联起来,可能就是你所说的push。比如说我的数据放在L2中,或者是DDR中,我该怎么和BUFFER关联起来呢,直接用指针指么?
1.你需要看看 NDK的文档,里面有所用函数的介绍
2.在6678中,如果要通过网口发送数据,需要使用描述符,描述符中有待发送数据的地址,这里牵扯到很多外设,QMSS, PA, CPSW,其中CPSW用来控制PHY, PA对ethernet的包进行加速, QMSS是整个keystone外设的基础,将所有数据流变成包的形式来传输。
哦,那意思是如果要实现功能就要结合client和QMSS的例子一起学习咯?
光是client中的代码无法实现么?
还有就是,我重写client代码的时候在连接的时候报错了,我觉得是我的配置问题,
CSL_chipReadReg C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_channelClose C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_channelEnable C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_configureRxFlow C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_init C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_initDescriptor C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_open C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_rxChannelOpen C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_setCpdmaLoopback C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Cppi_txChannelOpen C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_addMac C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_create C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_downloadImage C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_forwardResult C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_getBufferReq C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Pa_resetControl C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_ackInterrupt C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_disableAccumulator C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_getQueueNumber C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_init C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_insertMemoryRegion C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_programAccumulator C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_queueClose C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_queueOpen C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_setEoiVector C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
Qmss_start C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
platform_get_phy_addr C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
platform_write ./event.obj
qmssLObj C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_9_beta2\packages\ti\transport\ndk\nimu\lib\debug\ti.transport.ndk.nimu.ae66<nimu_eth.obj>
undefined first referenced
symbol in file
我在linker里设置了lib和路径以后,其他的错没了
就剩下两个没有详细提示的错误
error: errors encountered during linking; "UDP_send_test.out" not built
>> Compilation failure
gmake: *** [UDP_send_test.out] Error 1
gmake: Target `all' not remade because of errors.
除了这个其他什么也没有了
**** Build of configuration Debug for project send ****
C:\Program Files\Texas Instruments\ccsv5\utils\gmake\gmake -k all
'Building file: ../send.cfg'
'Invoking: XDCtools'
"C:/Program Files/Texas Instruments/xdctools_3_20_08_88/xs" --xdcpath="C:/Program Files/Texas Instruments/bios_6_31_04_27/packages;C:/Program Files/Texas Instruments/ndk_2_20_03_24/packages;C:/Program Files/Texas Instruments/pdk_C6678_1_0_0_9_beta2/packages;C:/Program Files/Texas Instruments/mcsdk_2_00_00_beta2/demos;" xdc.tools.configuro -o configPkg -t ti.targets.elf.C66 -p ti.platforms.evm6678 -r debug -b "C:/Users/lefeibaby/workspace/send/.config/xconfig_send/config.bld" -c "C:/Program Files/Texas Instruments/ccsv5/tools/compiler/c6000" "../send.cfg"
making package.mak (because of package.bld) ...
generating interfaces for package configPkg (because package/package.xdc.inc is older than package.xdc) ...
configuring send.xe66 from package/cfg/send_xe66.cfg ...
will link with ti.ndk.config: ../lib/C66/miniPrintf.lib
will link with ti.ndk.config: ../lib/C66/netctrl.lib
will link with ti.ndk.config: ../lib/C66/nettool.lib
will link with ti.ndk.config: ../lib/C66/os.lib
will link with ti.ndk.config: ../lib/C66/hal/hal_ser_stub.lib
will link with ti.ndk.config: ../lib/C66/hal/hal_timer_bios.lib
will link with ti.ndk.config: ../lib/C66/hal/hal_userled_stub.lib
will link with ti.ndk.config: ../lib/C66/hal/hal_eth_stub.lib
will link with ti.ndk.config: ../lib/C66/cgi.lib
will link with ti.ndk.config: ../lib/C66/console.lib
will link with ti.ndk.config: ../lib/C66/hdlc.lib
will link with ti.ndk.config: ../lib/C66/servers.lib
will link with ti.ndk.config: ../lib/C66/stack.lib
remark: the selected profile (debug) does not generate optimized code. 'debug' and 'release' profiles should only be used for source-level debugging of BIOS code. While these profiles build faster, the code runs slower and requires extra stack space. 'whole_program' profile is recommended for optimized code.
cle66 package/cfg/send_xe66.c ...
'Finished building: ../send.cfg'
' '
makefile:105: *** unterminated variable reference. Stop.
这又是啥错误啊,上网都没搜到
Zhang Xiang,您好,请教你一个问题:我最近改写NDK中helloworld 例子,用来实现DSP向PC传送数据,而数据由FPGA自通过UPP传送到DSP,我建立了两个工程,一个用来实现UPP接收FPGA的数据,一个用来实 现DSP和PC之间的通信,现在两个工程单独仿真都能达到目标,我想把两个工程合并成一块,我在UPP接受函数里定义了volatile int16_t xmit_buffer[LEN]; 用以接收来自FPGA传送过来的数据,volatile变量是全局变量吧,在接收完数据后,我调用了TCP发送函数,想利用send( s, &xmit_buffer[0], sizeof(xmit_buffer), 0 )对xmit_buffer直接访问,将里面的数据发送到PC上,但是在编译时出错了
,send函数里面用得是void* 但是upp里开的buffer必须是volatile吧,这个问题该怎么解决啊?
除了这种方法还有其他更好的方法可行么?现在接受的数据在xmit_buffer里面。我想问一下用什么样的函数将其打包啊?