抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Sephiroth1s'blog

The quieter you became,the more you are able to hear.

前言

由于平时都用 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 使用参考