写在开头

经常在嵌入式开发板做研发的人都知道,在编译机编译出产物后,如何在开发板上使用是一个比较繁琐的问题,一个比较简单易行的方法是准备一个 SD 卡,将内容通过读卡器写到 SD 卡里,然后插入到开发板上使用。

这样的流程虽然很简单易行,但对 SD 卡的反复拔插对 SD 插槽寿命是一个极大的考验。且如果需要在短期内依次做出大量的修改,反复拷贝/插入SD卡也是一种折磨的体验。

本文就是为了解决这个问题,通过在主机建立 Tftp 服务器,用网线连接开发板与主机,每次启动时开发板可以直接下载主机的编译产物来使用。

物理配置

使用网线将 PC 与 开发板连在一起。

PC 配置

  1. 主机的版本 Ubuntu 22.04
  2. 安装 TFTP 服务器软件包
    1
    2
    sudo apt-get update
    sudo apt-get install tftpd-hpa tftp-hpa
  3. 创建 TFTP 根目录并设置权限,这里以在用户目录下 TFTP 目录为例。
    1
    2
    3
    mkdir -p ~/tftp
    sudo chown -R $USER:$USER ~/tftp
    sudo chmod -R 755 ~/tftp
  4. 编辑 tftpd-hpa 配置文件,使用 sudo vim /etc/default/tftpd-hpa打开。
    将其中内容修改如下:

    1
    2
    3
    4
    5
    6
    # /etc/default/tftpd-hpa

    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/home/<your-username>/tftp"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="-l -c -s"

    <your-username> 替换为实际用户名。

  5. 启动/重启 TFTP 服务: sudo systemctl restart tftpd-hpa
  6. 测试 TFTP 服务器是否正常工作:
    1
    2
    3
    4
    5
    echo "TFTP Server Test" > ~/tftp/testfile.txt
    tftp localhost
    tftp> get testfile.txt
    tftp> quit
    cat testfile.txt
    若显示 “TFTP Server Test”,则 TFTP 服务器工作正常。
  7. 配置主机对应的有线网卡,IP 可以随意不要和本机的上网 IP 撞了即可,这里给一个样例:ip:192.168.137.2, netmask: 255.255.255.0, gateway: 192.168.137.1。
    至于怎么配置,如果是图形界面版的 Ubuntu,那很简单,在设置里的网络界面配置即可。
    如果没有图形界面,在 Shell 可以如下配置:
    1
    2
    ifconfig <网卡名称> 192.168.137.2 netmask 255.255.255.0
    route add default gw 192.168.137.1
    网卡名称使用 ifconfig 来查询。

Uboot 配置

  1. 设置服务器地址与开发板地址
    1
    2
    setenv serverip 192.168.137.2
    setenv ipaddr 192.168.137.3
  2. 下载文件并加载到指定地址
    1
    tftp <加载地址> ${serverip}:<文件名>;
    文件名的起始地址为之前设置的 ~/tftp 文件夹。

如果想要持久化这些命令,可以考虑将其在编译前配置为 Bootcmd。Uboot 在无外部输入打断的情况下将自动执行 Bootcmd。

最终效果

效果展示