CSHUDXM 2014-10-16 08:18 采纳率: 0%
浏览 4263

将centos6.5控制台重定向到串口,centos接收数据不完整

在centos6.5环境下,想通过串口来登录,于是做如下操作:
1、创建/etc/init/ttyS0.conf,添加内容:
# ttyS0 - agetty
#
# This service maintains a agetty on ttyS0.
stop on runlevel [S016]
start on runlevel [23]
respawn
exec /sbin/agetty -h -L -w /dev/ttyS0 9600 vt102

2、在/etc/securetty文件最后一行添加:ttyS0

本人在centos5.5已经通过了测试,并未修改grub文件,但是由于在centos6.5下不修改grub文件则串口没有任何输出,所以做如下修改(但我觉得应该不需要修改)
3、修改/etc/grub.conf文件,在kernel行末尾添加console=ttyS0:
title CentOS (2.6.32-431.el6.x86_64_ttyS0)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup- lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
initrd /initramfs-2.6.32-431.el6.x86_64.img

重启后有启动信息,但是使用串口调试助手发送用户名:root,只显示接收到了“o”,数据感觉接收不全,不知道是什么原因,求大神指导CSDN移动问答

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 21:48
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    我理解你的问题,但是在Linux系统中,我们不能直接在终端上使用串口设备进行通信。因为Linux内核并不支持从终端设备读取字符流。如果你想要实现这样的功能,你可能需要考虑其他方法,例如使用一个远程终端服务器或者使用SSH协议。

    然而,如果你确实希望在Linux系统中模拟串口设备的交互,你可以尝试以下步骤:

    1. 创建一个新的shell脚本,这个脚本会模拟串口设备的行为。你可以使用bash命令行编辑器来编写这个脚本。
    2. 在脚本中,你需要定义一个字符串变量,用于存储接收到的数据。当你接收到数据时,将其设置为变量中的值。
    3. 然后,你需要编写一个循环,每次等待一个字符输入并打印出来。
    4. 最后,当程序结束时,你应该关闭所有的输入和输出设备。

    这是一个简单的例子:

    #!/bin/bash
    
    # 定义串口号
    TTY="/dev/ttyS0"
    
    while true; do
        # 获取字符输入
        CHAR=$(read -t 1 -n 1 -r -i "Press any key to continue...")
    
        # 如果字符被输入,打印它
        if [[ $CHAR != " " ]]; then
            echo "Received character: $CHAR"
        fi
    
        # 检查是否退出
        if [[ $CHAR == "q" ]]; then
            break
        fi
    done
    

    请注意,这只是一个基本的例子,实际的脚本可能会更复杂,包括错误处理、字符编码等。

    此外,这种方法并不能保证完全复制串口设备的行为,因为Linux系统本身就不支持从终端设备读取字符流。如果你真的需要这样做,建议寻找其他方式,例如使用SSH或远程终端服务器。

    评论

报告相同问题?