前言
由于平时都用 mac 远程 win 和 ubuntu 来调试设备,但对于嵌入式开发而言,mac 还是有点水土不服,平时设备都是直接接在 win 上的,win 上跑 ubuntu 虚拟机,用 mac 调试起来就需要来回切换窗口,所以想串口映射到远程(结论:一点也不方便,后面不用看了 233)。顺便记录下一些使用技巧
- 主要操作没有特殊说明,都在 ubuntu 虚拟机中
设备端查看当前使用的串口
在设备 shell 中
- 使用 tty 命令可以直接显示当前终端设备的路径
tty
/dev/ttymxc0 - 查看内核启动时的命令行参数中的 console 选项
cat /proc/cmdline
console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.11:/nfs/rootfs,v3,tcp ip=dhcp - 进入 uboot 命令行直接查看内核启动参数,根据不同配置可能要找一下,最终结果跟
cat /proc/cmdline
一样printenv
screen 与串口终端交互
- 由于本文主要针对串口,故需要使用 sudo 命令获取权限
- 查看会话
必须使用sudo,否则看不到分离的串口会话
sudo screen -ls - screen 启动并配置串口波特率
sudo screen /dev/ttyS0 115200
- 退出终端
ctrl+a
后输入:
进入 screen命令模式,输入quit
即可退出 - 分离终端
ctrl+a
后输入d
分离会话,相当于将当前终端挂到后台继续运行 - 恢复会话
连接到最近分离的会话
sudo screen -r
重新连接指定的会话
sudo screen -r <session_name_or_number> - screen 杀掉指定会话
sudo screen -r <session_name_or_number> -X quit
通过 agent-proxy 转发串口终端
- 下载编译 agent-proxy
git clone http://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git
cd agent-proxy
如果有其他平台需求可以设置CROSS_COMPILE
export CROSS_COMPILE=arm-linux-gnueabihf-
make - 启动,可以读下源码目录的 README.TXT
启动映射
sudo ./agent-proxy 5550^5551 0 /dev/ttyS0,115200 &
回显,这句可选,如果没有回显就加上,彻底关闭就用kill
sudo cat /dev/ttyS0 &
连接
telnet localhost 5550 - 退出 telnet,在 telnet 终端中按
Ctrl+]
进入 telnet 命令行模式然后输入quit
通过 socat 转发串口
- 不推荐这个方法作为串口终端,转发数据倒是不错
- 转发
sudo socat /dev/ttyS0,echo=0 TCP4-LISTEN:5550,reuseaddr,fork
- telnet 默认是行模式连接,存在问题不识别控制字符,主要是因为默认是回车换行才发送,由本地终端回显
- telnet需要设置下,
ctrl+]
进入命命令行输入mode character
,这模式用户输入什么就发什么,由远程服务器回显 - 用 socat 连接,不过效果跟 telnet 模式一样
socat - tcp:localhost:5550
- socat 使用参考