2010-08-22 73 views
3

我试图将一个纯粹的Linux应用程序移植到OS X Snow Leopard(10.6.4)。它是一个通过串口向目标硬件发送二进制文件的应用程序。该应用程序几乎运行,但我遇到了串行端口写入有趣的问题。OS X与Linux - 串行端口处理

使用与Linux相同的设置(115.2k是波特率),OS X串行数据发送似乎比Linux慢10倍或更多。在Linux中需要3秒,需要30-40秒,到那时接收端的目标固件超时:)。

挖掘到串口写功能,我看到它正在使用select()系统调用来查找设备(或文件描述符)是否准备好写入数据。每个写系统调用在OS X中写入1024个字节的数据,在Linux中写入1087个字节的数据(这就是写入的返回值)。对于一级二进制文件,我的数据大小约为50KB(这是一个小型的引导加载程序,可以在下一级加载更大的二进制文件)。

伪代码

select() configuration with 1s time out and observing the serial port file descriptor for write ready. 
while(true) 
{ 
rc=select(...) 
if(rc>0){write(...) and other logic to get out of while if done} 
if(rc==0){//try again} 
if(rc<0){//error} 
} 

我观察到,在linux下,写发生的时间此起彼伏。一系列的写入,它以jiffy的形式出现在函数中。但是,在OS X中,如同3个写入然后选择两次(2秒后)再返回一些写入和选择超时等等,使功能慢很多。

任何线索?

说明: 该应用程序使用termios lib API来控制串行端口。

回答

1

我可以通过更改多产品芯片设备驱动程序来解决此问题。默认情况下,它使用的是非标准的开源驱动程序,我从多产网站下载了OS X驱动程序,并且工作正常。 感谢Nils和其他人的支持!