命令行配置TTY设备

时间:2012-08-15 20:09:21

标签: linux serial-port tty termios

我目前的任务是将一个驱动程序从QNX移植到Linux上的16550兼容芯片。该芯片提供多个UART,每个UART都被视为标准的16550串口,尽管有一些扩展。

现在,在QNX中,整个设备驱动程序被打包成一个独立的可执行文件,既可作为驱动程序,也可作为所提供UART的初始配置程序(波特率,环回模式等)。这在QNX中很自然,因为设备驱动程序在用户空间中运行,并且只是标准可执行文件。

在Linux上,OTOH,驱动程序现在实现为内核模块,可随意加载。更多,该模块由生产者提供,因此我不想过多地修改或修补它。

对我来说,剩下的任务是提供一些设置这些UART参数的机制。它们被视为/ dev / ttyPREFIXX设备。我打算通过在感兴趣的串行端口上调用标准termios(即tcsetattr()或ioctls)的标准C编程可执行文件来做到这一点。

这引出了我的问题:我的方法是对的吗?并且,如果是,那么如何实现持久配置?当我看到事实时(从这个例子:http://www.easysw.com/~mike/serial/serial.html),termios函数作用于OPEN设备。简而言之:他们打开一个设备,他们设置参数,他们读或写,然后关闭端口。关闭端口后,配置(波特率等)是否丢失?我希望它不是,因为它已经存储在硬件中。

somebodey可以向我确认配置是持久的吗?而且,如果没有,如何实现持久性,为未来的应用程序再次打开该端口并期望它具有一些预先建立的参数?如果没有,我应该修改模块内核以接受一些参数,然后在加载时进行配置吗?

我现在打算采用的方法是编写打开端口的C可执行文件,设置其配置,然后关闭端口。我希望后面的应用程序会看到具有所需配置的端口。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可能需要查看sttysetserial。令人尊敬的Serial-HOWTO(哇,这是我最后一次向任何人推荐HOWTO的时候?)可能也是一个很好的起点。

答案 1 :(得分:0)

嗯,我在这里找到答案:http://www.gnu.org/software/libc/manual/html_node/Mode-Functions.html#Mode-Functions

引用:“虽然tcgetattr和tcsetattr指定带有文件描述符的终端设备,但属性是终端设备本身的属性而不是文件描述符的属性。这意味着更改终端属性的效果是持久的;如果是另一个进程稍后打开终端文件,它将看到更改的属性,即使它与您最初在更改属性时指定的打开文件描述符没有任何关系。“

这解决了这个问题。