【问题标题】:embedded linux, how to switch the use of the serial port at the push of a button?嵌入式linux,如何一键切换串口的使用?
【发布时间】:2011-02-01 13:20:06
【问题描述】:

我是一名具有几年 Linux 管理经验的业务程序员。我开始使用嵌入式 Linux。昨天,我们正在讨论一种新的设备设计,有人问了我一些我没有答案的问题。

工程师希望在带有串行端口的电子板上安装一些按钮。操作系统是 Linux。

通常,当用户连接到串行端口时,协议会回答他,而不是 Linux 登录提示。但是,如果他按下设备上的一系列按钮,Linux 提示符将在串行端口上回答他。

处理按钮中断处理的Linux驱动不谈,你怎么能这样切换串口的基本使用呢?有没有人有关于如何做到这一点的 URL 参考? (最好有一些示例代码)

注意:我建议为给定用户提供一个不错的登录菜单,但不能这样做。

感谢您的建议。

最好的问候, 伯特

【问题讨论】:

    标签: linux embedded serial-port


    【解决方案1】:

    主要问题是实现您的设备协议的进程可能会保持串行端口打开。

    在这种情况下,您可能应该:

    1. 等待按钮事件

    2. 让协议进程关闭串行端口 - 完全终止该进程也可能对您有用

    3. 启动 *getty 进程 - 或任何您的嵌入式目标用于在串行端口上显示登录提示的任何东西

    4. 完成后恢复协议进程

    编辑:

    在上述步骤中,我假设控制串行端口的进程(例如pppd)无法充当getty 替代品以提供登录提示的更常见情况。它通常也与提供 telnet/SSH/任何登录的进程不同。

    也就是说,在定制的嵌入式 Linux 系统上,一个进程很有可能做不止一件事。在这种情况下,您必须配置或修改该流程以在适当的时候切换操作模式。

    如果没有关于您的嵌入式目标的更多信息,就不可能提供更具体的答案。

    【讨论】:

    • 我明白了。恕我无知,所以 telnet 或 SSH linux 登录提示不是由与串口提示相同的进程控制的吗?
    • @quadmore:一般不会。一个是getty 进程,另一个是网络服务器。您的协议流程可能完全不同
    【解决方案2】:

    getty进程通常在串口上启动,通过/sbin/init提供登录提示,在/etc/inittab中配置。

    init 具有“运行级别”的概念。每个运行级别定义一组单独的进程,init 将继续运行。实现这一点的一种优雅方法是设计您的“协议”流程,使其由init 启动,与getty 相同。然后,您可以告诉init 在某些运行级别中运行您的进程,并在其他运行级别中运行getty,并在运行级别之间进行按钮切换。例如,您的 /etc/inittab 可能包括:

    T0:2:respawn:/sbin/getty -L ttyS0 9600 vt100
    P0:345:respawn:/sbin/protocol ttyS0 9600
    

    这将在运行级别 3、4 和 5 的第一个串行端口上运行您的 protocol 命令;但 getty 在运行级别 2。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多