大家都知道在 bspInit.c 中 halStdFileInit 函数中会将串口的文件描述符设置为全局输入输出。那么我们先来了解一下 telnet 的输入输出是怎么被修改的?
sylixos 监听到 telnet 客户端请求,在 t_ptyserver 任务中建立 t_ptyproc 服务线程和 t_tshell 终端线程。t_tshell 线程一开始就会将线程的输入输出修改为 pty.hst 设备的文件描述符,所以 telnet 上的打印不会打到串口上。创建内核线程,在线程控制块里将输入输出使用全局输入输出,也就是内核线程的标准输入输出用的是串口。而应用程序进程会继承 telnet 的输入输出,所以在应用程序中的打印会输出到 telnet 上。