上位机通过串口与开发板(Linux)的文件数据传输

上位机通过串口与开发板(Linux)的文件数据传输

极端环境状况

上位机(windows或linux等任意系统)与开发板上的嵌入式系统(linux或kylin等任意系统),仅通过一根串口进行通信,没有可视化桌面,没有网络服务(网口或者SSH服务),没有USB接口,实在没办法的情况下,想要把一份代码文本送进系统中,只能通过这根串口发送文件数据;当然如果还是不行就只能通过物理手段,把SSD当初固态硬盘先转存文件了。

工具要求

上位机:串口通信软件,这里用的是MobaXterm,界面整洁,操作便捷,易于复制粘贴

下位机:具有串口管理和操作命令,如sttycat等命令

实现步骤

  1. /dev下能看到很多串口号,但大多数是虚拟串口,很难分辨当前具体用的是哪个串口(下位机)

    i2c-2            random        tty28  tty6       ttyS29   vcsu4
    i2c-3            rfkill        tty29  tty60      ttyS3    vcsu5
    initctl          rtc           tty3   tty61      ttyS30   vcsu6
    input            rtc0          tty30  tty62      ttyS31   vcsu7
    ion              rtc1          tty31  tty63      ttyS4    vfio
    kmsg             scto          tty32  tty7       ttyS5    vga_arbiter
    kvm              shm           tty33  tty8       ttyS6    vhci
    log              snapshot      tty34  tty9       ttyS7    vhost-net
    loop0            snd           tty35  ttyAMA0    ttyS8    vhost-vsock
    loop1            spidev0.0     tty36  ttyAMA1    ttyS9    vndbinder
    loop2            stderr        tty37  ttyAMA2    udmabuf  zero
    loop3            stdin         tty38  ttyAMA3    uhid     zfs
    loop4            stdout        tty39  ttyprintk  uinput
    

    通过命令具体查看:(下位机)

    pc:~$ dmesg | grep ttyS*
    [    0.332847] ARMH0011:00: ttyAMA0 at MMIO 0x28001000 (irq = 5, base_baud = 3000000) is a PL011 rev3
    [    0.332861] printk: console [ttyAMA0] enabled
    [    0.333045] ARMH0011:01: ttyAMA1 at MMIO 0x28000000 (irq = 6, base_baud = 3000000) is a PL011 rev3
    [    0.333195] ARMH0011:02: ttyAMA2 at MMIO 0x28002000 (irq = 7, base_baud = 3000000) is a PL011 rev3
    [    0.333337] ARMH0011:03: ttyAMA3 at MMIO 0x28003000 (irq = 8, base_baud = 3000000) is a PL011 rev3
    [    2.737110] systemd[1]: Created slice system-serial\x2dgetty.slice.
    

    通过console [ttyAMA0] enabled判断当前用的通信串口是ttyAMA0

  2. 找到串口后,可以先用stty命令配置串口属性, 比如设置串口波特率为115200(下位机)

    pc:~$ stty -F /dev/ttyAMA0 115200
    
  3. 下位机往上位机中发送数据

    pc:~$ echo “riscer” > /dev/ttyAMA0
    “riscer”
    
  4. 下位机接收上位机的数据(传到一个文件中)

    pc:~$ sudo cat /dev/ttyAMA0 > file.txt
    

    回车之后,继续输入你的数据文件内容,但是由于文本文件内容过长,所以直接在上位机复制,然后在MobaXterm界面中右键自动粘贴,即实现数据内容输入并传输,等待传输完成后,按Ctrl+D结束数据输入,回到原本的终端命令行。

    pc:~$ cat /dev/ttyAMA0 > file.txt
    this is a test!
    ...
    ......
    .........
    end
    pc:~$ cat file.txt
    this is a test!
    ...
    ......
    .........
    end
    
  5. 有些时候可能会需要sudo权限操作,就会在步骤4的时候出现报错。

    pc:~$ sudo echo "riscer" >> file.txt
    bash: file.txt: Permission denied
    

    这是因为sudo的权限只是给到了echo命令,但是没有给到>>。需要修改为下面这样:

    pc:~$ sudo sh -c 'echo "riscer" >> file.txt'
    

    意思就是将sudo权限分配给所有的命令。

  6. 最终以这种暴力且又无奈的手段将数据从上位机传送到了下位机,仅实用于文件数量不多且是文本文件的时候。甚至有时候需要注意,输出后文件的格式会发生变化,比如Tabspace之间的变化,有些执行文件会受到影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值