我有一个运行嵌入式Linux的基于TI Cortex的Pengwyn板,我试图用来从USB-ftdi外设读取原始串行数据,因此我可以将其处理成数据包 .

为此,我编写了一个简单的程序(使用Qt)和termios框架 . 这在我的桌面(Ubuntu VM)机器上没有问题 - 它打开/ dev / ttyUSB0,配置串口,读取和处理数据没有问题 .

当我在pengwyn板上运行相同的程序(显然交叉编译)时遇到问题... read()函数调用不会填充缓冲区 - 尽管它返回一个非错误值,表示数量已读取的字节???

(我还必须为pengwyn板重建linux内核以包含USB-ftdi串行驱动程序 . )

我怀疑这是一个目标配置问题,但我已经比较了两个平台之间的文件权限和termios设置,看起来没问题 . 我是这个平台和串口/ termios的新手,所以我毫无疑问地看了一些东西,但我查看了“POSIX操作系统的串行编程指南”并搜索了有关arm和usb-ftdi读取问题的类似帖子,但是还没找到任何东西 .

有什么建议/意见吗?

测试程序的相关摘录:

void Test::startRx(void)

{

bool retval = false;

m_fd = open(m_port.toLocal8Bit(),O_RDONLY |O_NOCTTY | O_NDELAY);

if (m_fd == -1)

{

qDebug() << "Unable to open: " << m_port.toLocal8Bit() << strerror(errno);

}

else

{

m_isConnected = true;

qDebug() << m_port.toLocal8Bit() << "is open...";

fcntl(m_fd, F_SETFL, 0);

struct termios options;

if (tcgetattr(m_fd, &options)!=0)

{

qDebug() << "tcgetattr() failed";

}

//Set the baud rates to 9600

cfsetispeed(&options, B9600);

cfsetospeed(&options, B9600);

//Enable the receiver and set local mode

options.c_cflag |= (CLOCAL | CREAD);

//Set character size

options.c_cflag &= ~CSIZE; /* Mask the character size bits */

options.c_cflag |= CS8; /* Select 8 data bits */

//No parity 8N1:

options.c_cflag &= ~PARENB;

options.c_cflag &= ~CSTOPB;

options.c_cflag &= ~CSIZE;

options.c_cflag |= CS8;

//Disable hardware flow control

options.c_cflag &= ~CRTSCTS;

//Disable software flow control

options.c_iflag &= ~(IXON | IXOFF | IXANY);

//Raw output

options.c_oflag &= ~OPOST;

//Raw input

options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

//Set the new options for the port...

tcsetattr(m_fd, TCSANOW, &options);

int status;

ioctl(m_fd, TIOCMGET, &status );

qDebug() << "current modem status:" << status;

QThread* m_reader_thread = new QThread;

m_serial_port_reader = new SerialPortReader(0, m_fd);

if (m_serial_port_reader)

{

qDebug() << "creating serial port reader thread...";

m_serial_port_reader->moveToThread(m_reader_thread);

connect(m_serial_port_reader, SIGNAL(notifyRxPacketData(QByteArray *)), this, SLOT(processRxPacketData(QByteArray*)));

//connect(m_serial_port_reader, SIGNAL(error(QString)), this, SLOT(errorString(QString)));

connect(m_reader_thread, SIGNAL(started()), m_serial_port_reader, SLOT(process()));

connect(m_serial_port_reader, SIGNAL(finished()), m_reader_thread, SLOT(quit()));

connect(m_serial_port_reader, SIGNAL(finished()), m_serial_port_reader, SLOT(quit()));

connect(m_reader_thread, SIGNAL(finished()), m_reader_thread, SLOT(deleteLater()));

m_reader_thread->start();

retval = true;

}

....

void SerialPortReader::readData(int i)

{

m_socket_notifier->setEnabled(false);

if (i == m_fd)

{

unsigned char buf[BUFSIZE] = {0};

int bytesRead = read(m_fd, buf, BUFSIZE);

//qDebug() << Q_FUNC_INFO << "file decriptor:" << m_fd << ", no. bytes read:" << bytesRead;

if (bytesRead < 0)

{

qDebug() << Q_FUNC_INFO << "serial port read error";

return;

}

// if the device "disappeared", e.g. from USB, we get a read event for 0 bytes

else if (bytesRead == 0)

{

//qDebug() << Q_FUNC_INFO << "finishing!!!";

return;

}

//process data...

}

m_socket_notifier->setEnabled(true);

}

linux java usb 串口_嵌入式linux usb-ftdi串口读取问题相关推荐

  1. arm linux 识别新硬盘_嵌入式Linux系列第13篇:USB摄像头拍照

    1.引言 本篇介绍USB摄像头的使用,实现的功能是通过摄像头进行拍照,生成jpg格式图片. 2.环境介绍 2.1.硬件 1) NUC972开发板 2) USB摄像头 2.2.软件 1) Uboot继续 ...

  2. arm linux 识别新硬盘_嵌入式Linux 的NTFS移动硬盘支持

    本文大部分参考了 我的两个学生移植工作 大部分是重做一遍. 测试环境S3C6410开发板 内核 linux 2.6.28.6 编译器 arm-linux-gcc 4.4.1 一.内核配置 高版本的Li ...

  3. 嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植

    嵌入式linux项目开发(一)--BOA移植 项目目标:使用BOA.CGIC.SQLite搭建嵌入式web服务器 一.嵌入式web服务器BOA简介 在嵌入式设备的管理与交互中,基于Web方式的应用成为 ...

  4. linux java转码_用Linux shell脚本批量转换java源文件编码(支持命令行选项)

    最近在用ant给java项目打jar包,但是程序运行出来之后,全部乱码,于是想到用Linux的iconv命令给java源文件转码,但是总不能一个一个地转吧,效率太低下了,于是便写了个Linux she ...

  5. linux pwm 调屏_嵌入式Linux系统基于PWM机制的液晶屏背光Backlight功能配置

    在研发嵌入式产品时,往往会用到LCD(液晶屏)来显示图形界面,而液晶屏的显示亮度则需要背光系统去调节. 调光方法: 1.数字调光,又称波宽控制调光(Pulse Width Modulation,简称P ...

  6. linux java性能监控工具_常用Linux 性能监测工具

    执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime.除此之外,iostat还对创建一个服务器磁盘子系统的活动报告.该报告包含两部分:CPU使用情况和磁盘使用情况. iostat ...

  7. linux java 安装配置_类Linux环境安装jdk1.8及环境变量配置详解

    配置很简单,但是每次都要查一下,索性就记录下 1. 安装前准备 1.1 创建安装目录,习惯上通常安装在/usr/local/jdk8目录下 mkdir /usr/local/jdk8 1.2 查看是否 ...

  8. linux zigbee开发板,基于嵌入式Linux的ZigBee网关设计与实现

    摘要: 从ZigBee联盟诞生以来,随着ZigBee协议的相关标准不断完善,协议栈持续改进等因素,基于 ZigBee无线传感网络的开发与应用也越来越多.由于其低功耗,低成本,低延时,安全可靠以及自组网 ...

  9. 尚观linux视频配套教程,尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备...

    尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备 5.jpg (67.09 KB, 下载次数: 0) 2018-4-16 09:34 上传 1.jpg (44.17 ...

最新文章

  1. 【转】BLE 学习记录
  2. 手写自己的MyBatis框架-V2.0配置文件
  3. prometheus 发送恢复 值_Prometheus监控神器-Rules篇
  4. [python] 之 常用内建函数
  5. 四、物理优化(1)范式化
  6. Docker 容器遇到的乱码问题
  7. AI持续赋能,搜狗S1会给录音笔行业带来哪些新变化?
  8. 在datasnap 中使用unidac 访问数据(客户端)
  9. Perl命令行应用介绍
  10. 套接字超时选项(SO_RCVTIMEO 与 SO_SNDTIMEO)
  11. Windows Shell 编程学习总结
  12. 使用apipost工具快速生成在线接口文档
  13. co作为前缀的意思_智课雅思词汇---十五、前缀co-com-con-col-cor-是什么意思
  14. 风变python基础语法第11关_风变编程-Python基础语法
  15. 电信设备商进入企业网市场需适应不同渠道模式(转载)
  16. [机器学习与数据分析] 数据分析常用方法
  17. 一个几乎免费的云服务器和虚拟主机平台
  18. 电脑发到,电脑发送到手机的文件在哪里
  19. [Luogu P4168] [BZOJ 2724] [Violet]蒲公英
  20. 虚拟数字人市场现状研究分析-

热门文章

  1. VB.NET构造函数
  2. iOS指定页面屏幕旋转,手动旋转
  3. Python统计学之样本和总体的关系
  4. 天空卫士C++ 一面(技术面、61min)
  5. 关系代数中除法的SQL实现
  6. python代码封装加密_对Python源码加密及反编译前后对比
  7. oracle复制数据库文件,史上最简单的方法复制或迁移Oracle数据库
  8. Perfectly Clear Workbench Mac(图像校正工具) 破解版
  9. dsge模型难做吗_DSGE模型到底有用吗?
  10. avro数据序列化/反序列化