linux内核串口初始化,正确的Linux串口初始化序列

我写了一个必须在Linux上使用串口的应用程序,尤其是ttyUSB.使用标准的select()/ read()循环和write()执行读写操作,并且它们可能没有任何问题,但初始化代码(或缺少某些部分)会损坏tty子系统中的某些内容.这里是:

vuxboot(string filename,unsigned baud = B115200) : _debug(false) {

_fd = open(filename.c_str(),O_RDWR | O_NOCTTY);

if(_fd < 0) throw new io_error("cannot open port");

// Serial initialization was written with FTDI USB-to-serial converters

// in mind. Anyway,who wants to use non-8n1 protocol?

tcgetattr(_fd,&_termios);

termios tio = {0};

tio.c_iflag = IGNPAR;

tio.c_oflag = 0;

tio.c_cflag = baud | CLOCAL | CREAD | CS8;

tio.c_lflag = 0;

tcflush(_fd,TCIFLUSH);

tcsetattr(_fd,TCSANOW,&tio);

}

另一个tcsetattr(_fd,TCSANOW和& _termios)位于析构函数中,但它无关紧要.

无论有没有这个termios初始化,在应用程序退出后系统中都会发生奇怪的事情.有时普通猫(或高清)每次都会立即打印任何东西或相同的东西,有时候它正在等待并且不显示任何肯定会发送到端口的数据;和close()(read(),但不是每次都发出一个奇怪的警告到dmesg referring to usb-serial.c.

我检查了硬件和固件几十次(即使在不同的机器上),我确信它按预期工作;此外,我剥离固件只是一遍又一遍地打印相同的消息.

如何在不破坏任何东西的情况下使用串口?谢谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值