telnet 输入输出重定向

telnet 输入输出重定向

一、起因
 先说明一下我是因为什么问题才去了解这部分知识。ko 模块里注册了一个 shell 命令,对应的函数里创建了一个线程,线程里有一些打印。在串口上敲 shell 命令,线程打印都在串口上;但在 telnet 上敲 shell 命令,线程打印依旧在串口上。如果换做应用程序里创建线程加点打印,在串口上运行,打印都在串口上;在 telnet 上运行,打印都在 telnet 上。同样的代码一个是内核线程下创建的另一个是应用程序进行下创建的,现象怎么就会不一样了呢?
二、分析
        大家都知道在 bspInit.c 中 halStdFileInit 函数中会将串口的文件描述符设置为全局输入输出。那么我们先来了解一下 telnet 的输入输出是怎么被修改的?
        sylixos 监听到 telnet 客户端请求,在 t_ptyserver 任务中建立 t_ptyproc 服务线程和 t_tshell 终端线程。t_tshell 线程一开始就会将线程的输入输出修改为 pty.hst 设备的文件描述符,所以 telnet 上的打印不会打到串口上。创建内核线程,在线程控制块里将输入输出使用全局输入输出,也就是内核线程的标准输入输出用的是串口。而应用程序进程会继承 telnet 的输入输出,所以在应用程序中的打印会输出到 telnet 上。
三、解决方法
既然知道内核线程使用的是串口的输入输出,那么将输入输出重定向到 telnet 上就可以了。因为 t_tshell 线程本身使用就是 telnet 输入输出,所以调用 API_IoTaskStdGet 接口获取当前输入输出,再调用 API_IoTaskStdSet 接口设置当前输入输出为 telnet 即可解决。

    • Related Articles

    • 重定向串口回环测试方法

      Q:是否支持重定向串口回环测试?怎么使用?  A:使用 cat 获取串口信息、 echo XXX  >/dev/ttys  重定向信息。 具体操作如下: 注:推荐使用串口测试程序进行串口功能测试 (附件为串口测试程序)。
    • printk 在 telnet 终端输出打印信息

      Q:printk 在 telnet 终端上输出打印信息 通过logfiles命令查看文件描述符是否添加成功。 更多扩展知识: 参考文章:telnet 输入输出重定向
    • SylixOS 协议栈学习(三)ICMP 处理

           ICMP(Internet control message protocol)是网络控制报文协议,用于在IP主机跟路由器之间传输控制信息的。 控制信息指网络不通、主机是否可达、路由是否有用等。  之前在将ip4_input时,涉及到三次ICMP的东西:         1、在转发过程中,如果TTL变为0,则要用icmp_time_exceeded函数向源主机发送一份超时ICMP信息。         2、会通过ip报头,判断是否是ICMP报文,如果是,则调用icmp_input函数。 ...
    • 解决 CppTest 插件在 RealEvo IDE 只能扫描到第一个文件

      问: CppTest 插件在 RealEvo IDE 中扫描信息只能扫描到第一个文件,如何解决? 答:通过查看,CppTest 在同一目录级别下含有编译生成的 Debug 目录或者 Release 目录时, 会无法扫描到全部文件,当删除 Debug 目录时,则可以扫描全部文件。 有以下两种解决方法: 解决方法1:通过编译器的指令将 Debug 移除到其他目录下。 可以通过配置 properties 下 SylixOS projec 下的 link setting ->  command ...
    • 如何登录和退出 SylixOS

      登录和退出 SylixOS? 1、连接方式 SylixOS 支持 Telnet 和 Console 方式登录 SylixOS 2、登录工具 Telnet 和 Console工具可以使用 Putty,XShell、SecureCRT等工具。 3、SylixOS 设备 SylixOS 设备可以是虚拟机设备,也可以是物理设备。 4、登录步骤 1)输入设备IP地址,开始连接,如设备正常连通,则会提示输入用户名和密码,       如无法连接,请使用 ping 命令检查设备网络。 ...