前提条件
-
确认设备文件
使用ls -l /dev
查看字符设备文件(标识为 “c”),crw-rw---- 1 root dialout 4, 64 Jun 10 09:00 /dev/ttyS0 # 串口设备 crw--w---- 1 root tty 4, 0 Jun 10 08:50 /dev/tty0 # 虚拟终端
-
用户权限
确保当前用户有设备访问权限(通过sudo usermod -aG dialout $USER
加入dialout
组,或使用sudo
)。
通过命令输入字符的3种方法
方法1:使用 echo
或 printf
(直接输入)
echo "Hello" > /dev/ttyS0 # 向串口发送字符串 printf '\x41\x42' > /dev/tty1 # 发送十六进制字符(A的ASCII为0x41)
- 作用:将文本或二进制数据写入设备。
- 注意:若设备无响应,检查波特率(需与设备配置匹配)。
方法2:使用 dd
(精确控制数据)
dd if=/dev/zero of=/dev/ttyS0 bs=1 count=5 # 发送5个空字节 echo "TEST" | dd of=/dev/tty1 conv=notrunc # 管道输入
- 参数说明:
bs=1
:单次读写1字节
count=5
:发送5次
conv=notrunc
:保留设备原有内容。
方法3:使用 screen
(交互式终端)
sudo screen /dev/ttyS0 115200 # 以115200波特率连接串口
- 操作:
输入字符后按回车发送,按Ctrl+A
再按K
退出。 - 适用场景:调试串口设备(如Arduino、路由器)。
实际示例:向虚拟终端发送消息
- 打开新终端(如
tty2
),按Ctrl+Alt+F2
切换到/dev/tty2
。 - 在原终端输入:
echo "Message from TTY1" > /dev/tty2
- 切换到
tty2
即可看到接收的消息。
注意事项
-
权限问题
- 无权限时报错:
Permission denied
→ 用sudo
或调整用户组。 - 设备不存在时报错:
No such file or directory
→ 检查设备名或驱动是否加载(lsmod
)。
- 无权限时报错:
-
数据安全
- 禁止直接写入硬盘设备(如
/dev/sda
),会导致数据损坏! - 仅操作明确用途的字符设备(如串口、虚拟终端)。
- 禁止直接写入硬盘设备(如
-
设备状态
- 串口设备需配置波特率:
stty -F /dev/ttyS0 115200
。 - 输入后无响应?检查物理连接或设备是否就绪。
- 串口设备需配置波特率:
引用说明
- Linux设备文件规范:
man 4 tty
dd
命令手册:man dd
- 串口配置工具:
man stty
- 权限管理参考:Linux用户组文档(
man usermod
)
提示:操作硬件设备前,建议查阅具体设备的文档(如厂商手册)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5520.html