ARM和linux虚拟机串口通信,ARM端打不开串口设备。

我用的MINI2440的板子,接收串口的程序如下:#include<stdio.h>#include<string.h>#include<malloc.h>#includ... 我用的MINI2440的板子,接收串口的程序如下:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <math.h>

int main()
{
FILE *spfd;
char hd[16];
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttySAC0 ","r");
//spfd=open( "/dev/ttySAC0 ",O_RDWR|O_NOCTTY);
if(spfd == NULL)
{
perror( "fopen /dev/ttySAC0");
return -1;
}
printf( "the discriptor of file is %d\n ",fileno(spfd));
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);

printf( "ready for receiving data...\n ");
retv=fread(hd,sizeof(char),16,spfd);
/*
if(retv==-1)
{
perror( "read ");
return -1;
}
*/
printf( "the number received is %d\n ",retv);
printf( "/dev/ttySAC0 received message :%s\n ",hd);
fclose(spfd);
return 0;
}

在板子上运行却显示: no such file or directory。

但是在虚拟机里用echo ok > /dev/usb0
在minicom里输入 cat /dev/ttySAC0 却能收到消息。请教各位,怎样才能让ARMread到消息,ARM端的设备符号是什么。
下面是我在linux上运行的写串口的程序:

int main()
{
//int spfd;
FILE *spfd;
char fname[16];
//char *sbuf;
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttyUSB0 ","w+");
//spfd=open( "/dev/ttyS0 ",O_RDWR|O_NOCTTY|O_NONBLOCK);
if(spfd == NULL)
{
perror( "fopen /dev/ttyUSB0 ");
return -1;
}
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);
printf( "ready for sending data...\n ");
fname[0]= '1';
fname[1]= '2';
fname[2]= '6';
fname[3]= '\0';

//retv=write(spfd,fname,4);
printf("sending : %s \n",fname);
retv = fwrite(fname,sizeof(char),strlen(fname)+1,spfd);
if(retv==-1)
perror( "write ");
printf( "the number sent is %d\n ",retv);
fclose(spfd);
return 0;
}
展开
 我来答
sunyqg
2012-04-24 · TA获得超过1084个赞
知道小有建树答主
回答量:477
采纳率:75%
帮助的人:631万
展开全部
查一下板子上的串口设备有没有:
grep tty /proc/devices
如果有ttyS设备,再看/dev/有没有ttySx,如没有就建立一个:
mknod /dev/ttyS0 c 4 64
追问
grep tty /proc/devices
后是这个怎么办撒?
4 tty
5 /dev/tty
188 ttyUSB
我按照你的方法新建了一个ttyS0,但是还是no such file or directory。。。郁闷啊
追答
你的板子的设备中没有标准串口设备ttyS0,也没有ttySAC0 。/dev下应该有一个USB串口:/dev/ttyUSB0,就用它。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MichaelYehBook
2012-04-23 · TA获得超过969个赞
知道小有建树答主
回答量:888
采纳率:66%
帮助的人:630万
展开全部
我对MINI2440不熟,但是由你的描述看来,就是没有这个驱动。
所以,建议你在 ARM 端的 Linux 下的 /dev 查看看有哪些设备符号。
追问
你知道怎么用套接字监听端口的动态么?就是pc机发出一个数据,ARM机子里的套接字程序可以立即反应,并且显示。 我现在要解决的关键问题是这个。  给我满意的答案追加100分
追答
不需要给我分数,虽然我写软件十五年,但是也很久没摸了。
我找到这个资料让你看看,我大概看了一下,里面介绍的还算详尽。你可以叁考。Good Luck
http://wenku.baidu.com/view/669534d333d4b14e8524681a.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9dae29d
2012-07-20
知道答主
回答量:1
采纳率:0%
帮助的人:1602
展开全部
楼主,我也在做串口通信,遇到和你一样的问题,在arm端跑的时候打不开串口设备,请问你是怎么解决的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式