嵌入式linux,如何在按下按钮时切换串口的使用?

嵌入式linux,如何在按下按钮时切换串口的使用?,linux,embedded,serial-port,Linux,Embedded,Serial Port,我是一名具有几年Linux管理经验的商业程序员。我从嵌入式Linux开始。昨天,我们正在讨论一种新的设备设计,有人问了我几个问题,我没有答案 工程师们想在电子板上安装一些带有串口的按钮。操作系统是Linux 通常,当用户连接到串行端口时,一个协议将应答他,而不是Linux登录提示。但是,如果他按下设备上的一系列按钮,Linux提示符将在串行端口上回答他 把Linux驱动程序处理按键中断的处理放在一边,怎么能把串口的基本使用切换成那样呢?有没有人有关于如何做这件事的URL参考?(最好带有一些示例代

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

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

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

把Linux驱动程序处理按键中断的处理放在一边,怎么能把串口的基本使用切换成那样呢?有没有人有关于如何做这件事的URL参考?(最好带有一些示例代码)

注意:我建议为一个给定的用户提供一个很好的登录菜单,但是没有办法

谢谢你的建议

致以最良好的祝愿,
Bert

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

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

  • 等待按钮事件

  • 让协议进程关闭串行端口-完全终止该进程也可以

  • 启动一个
    *getty
    进程-或嵌入式目标使用的任何程序在串行端口上显示登录提示

  • 完成后恢复协议进程

  • 编辑:

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

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


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

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

    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中的第一个串行端口上运行
    协议
    命令;但是运行级别2中的getty。

    我明白了。请原谅我的无知,因此telnet或SSH linux登录提示符与串行端口提示符不受同一进程的控制?@quadmore:一般来说,不是。一个是
    getty
    进程,另一个是网络服务器。您的协议过程可能是完全不同的