在调试pcie板卡驱动的过程中由于要搭建测试环境,在web前端与pcie板卡之间采用socket进行通信。要测试的就是linux系统的pc机能发送一个文件给pcie板卡,然后再接收到pcie板卡处理后的文件。
工程是之前的同事留下的,没有交接。调试过程及出现的问题如下所述:
(1)编译pcie驱动源码。
(2)加载该驱动模块。
(3)编译服务(测试环境)源码,包含socket server.
(4)运行服务,运行了socket server。
该服务已经被添加到系统中,linux下查看服务的命令:$ps aux,通过该命令可以看到服务的pid号,运行状态等信息。
该服务中包含两个子线程,每个子线程绑定一个端口。在调试过程中添加了打印信息,第一次运行server的时候可以看到socket创建成功,绑定端口成功 。但是再次运行该服务,server就会出现端口绑定失败,用命令查看该端口号:
可以看到该端口已经被之前运行的服务占用,服务的pid号为2568。
这时需要先“杀死”(关闭)之前运行的相同名字的服务,所使用的命令为:
这样的话,编译之后的服务就可以再次正常的运行了。需要注意的是再次运行服务的时候先把之前的进程关掉把端口释放出来。
(5)编译客户端(client)并运行。
运行client后,server端打印:打开文件失败。分析client端传送的数据可知,client端发送给server的只是文件目录而非文件。
于是调试linux下socket发送文件的问题,参考网上相关文件,需要在client端首先打开文件并写入buffer中。
然而在client端打开文件的时候又报错,这时就考虑到应该是文件目录没有正确给出。
之前写的文件目录为:fromfile="/home/xilinx/test/guangmang-1.ts";
修改之后的文件目录为:fromfile="/home/lcy/xilinx/test/guangmang-1.ts";
修改之后client可以正确打开文件。出现这个问题的原因就是自己对Linux了解的太少。
回过头来想想client端可以这样打开文件,那么server端应该也能这样打开文件啊,于是修改pcie驱动server端文件目录格式,编译运行(别忘了先关闭之前的服务),运行client,可以看到server端能正确打开文件。
socket的调试完成。