上位机通过串口与开发板(Linux)的文件数据传输
极端环境状况
上位机(windows或linux等任意系统)与开发板上的嵌入式系统(linux或kylin等任意系统),仅通过一根串口进行通信,没有可视化桌面,没有网络服务(网口或者SSH服务),没有USB接口,实在没办法的情况下,想要把一份代码文本送进系统中,只能通过这根串口发送文件数据;当然如果还是不行就只能通过物理手段,把SSD当初固态硬盘先转存文件了。
工具要求
上位机:串口通信软件,这里用的是MobaXterm,界面整洁,操作便捷,易于复制粘贴
下位机:具有串口管理和操作命令,如stty
和cat
等命令
实现步骤
-
在
/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。 -
找到串口后,可以先用stty命令配置串口属性, 比如设置串口波特率为115200(下位机)
pc:~$ stty -F /dev/ttyAMA0 115200
-
下位机往上位机中发送数据
pc:~$ echo “riscer” > /dev/ttyAMA0 “riscer”
-
下位机接收上位机的数据(传到一个文件中)
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
-
有些时候可能会需要
sudo
权限操作,就会在步骤4的时候出现报错。pc:~$ sudo echo "riscer" >> file.txt bash: file.txt: Permission denied
这是因为
sudo
的权限只是给到了echo
命令,但是没有给到>>
。需要修改为下面这样:pc:~$ sudo sh -c 'echo "riscer" >> file.txt'
意思就是将
sudo
权限分配给所有的命令。 -
最终以这种暴力且又无奈的手段将数据从上位机传送到了下位机,仅实用于文件数量不多且是文本文件的时候。甚至有时候需要注意,输出后文件的格式会发生变化,比如
Tab
和space
之间的变化,有些执行文件会受到影响。