一、交叉编译工具链(arm-linux-gnueabihf-gcc)安装与验证,搭建 TFTP+NFS 服务,调试开发板网络连通性
一、arm-linux-gnueabihf-gcc 交叉编译工具链安装与验证
交叉编译工具链的作用是在 x86 主机上编译能在 ARM 开发板上运行的程序,arm-linux-gnueabihf 是针对 ARM 硬浮点(hf)的工具链。
1. 环境准备
确保 Ubuntu 系统已更新:
sudo apt update && sudo apt upgrade -y
2. 安装方式:APT 一键安装
Ubuntu 官方源已内置该工具链,直接安装:
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
3. 验证工具链是否安装成功
步骤 1:查看工具链版本
arm-linux-gnueabihf-gcc -v
如果输出工具链版本信息(如 gcc version 7.5.0),说明环境变量和安装都正常。
步骤 2:编译测试程序验证
file teat_arm
创建一个简单的 C 程序 test.c:
#include <stdio.h>
int main(){
printf("Hello ARM Board!\n");
return 0;
}
用交叉编译器编译:
arm-linux-gnueabihf-gcc test.c -o teat_arm # 编译为 ARM 架构可执行文件
检查生成文件的架构:
file test_arm
输出应包含 ARM, EABI5, hard-float ABI,说明编译出的是 ARM 硬浮点程序,工具链验证成功。
二、搭建 TFTP+NFS 服务
核心说明:
TFTP:简单文件传输协议,用于开发板启动时快速下载内核、设备树等小文件(无权限验证,适合调试)。
NFS:网络文件系统,用于开发板挂载主机的目录,方便直接运行 / 调试主机上的程序(无需反复拷贝文件)。
- 关闭防火墙 / SELinux(避免服务被拦截)
Ubuntu 下关闭防火墙:
sudo ufw disable # 关闭防火墙(调试阶段建议关闭,生产环境按需配置)
- 搭建 TFTP 服务
步骤 1:安装 TFTP 相关软件
sudo apt install -y tftp-hpa- tftpd-hpa xinetd
tftp-hpa:TFTP 客户端(用于主机测试)。tftpd-hpa:TFTP 服务端。xinetd:网络服务管理工具(辅助 TFTP 运行)。
步骤 2:配置 TFTP 服务
编辑 TFTP 配置文件:
sudo vim /etc/default/tftpd-hpa
修改为以下内容(指定 TFTP 根目录,开启读写):
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/你的用户名/tftpboot" # TFTP 根目录(自行替换用户名)
TFTP_ADDRESS=":69" # TFTP 端口(固定 69)
TFTP_OPTIONS="--secure --create" # --create 允许创建文件(开启写权限)
步骤 3:创建 TFTP 根目录并设置权限
mkdir -p /home/你的用户名/tftpboot # 对应配置文件中的目录
sudo chmod 777 /home/你的用户名/tftpboot # 开放所有权限(调试阶段)
sudo chown -R nobody:nogroup /home/你的用户名/tftpboot
步骤 4:重启 TFTP 服务并验证
sudo systemctl restart tftpd-hap
sudo systemctl enable tftpd-hap #设置开机启动
sudo systemctl status tftpd-hap #查看服务器状态
步骤 5:主机测试 TFTP 服务
在 TFTP 目录创建测试文件:
echo "test tftp" > /home/你的用户名/tftpboot/test.txt
本地测试下载:
tftp 127.0.0.1 #进入TFTP交互模式
tftp> get test.tex #下载文件
tftp> quit #退出
cat test.txt #查看文件,输出 "test tftp" 则 TFTP 服务正常
3. 搭建 NFS 服务
步骤 1:安装 NFS 相关软件:
sudo apt install -y nfs-kernel-server rpcbind
nfs-kernel-server:NFS 服务端。rpcbind:NFS 依赖的端口映射服务。
步骤 2:配置 NFS 共享目录
编辑 NFS 配置文件:
sudo vim /etc/exports
在文件末尾添加以下内容(指定共享目录和权限):
/home/你的用户名/nfsroot *(rw,sync,no_root_squash,no_subtree_check,insecure)
/home/你的用户名/nfsroot:NFS 共享目录(自行替换用户名)。*:允许所有网段访问(调试阶段,生产环境可指定开发板网段,如 192.168.1.*)。rw:读写权限。sync:同步写入(数据实时同步到磁盘)。no_root_squash:开发板以 root 身份访问时,保留 root 权限(关键,否则开发板挂载后无写权限)。insecure:允许非标准端口访问(避免开发板挂载失败)。
步骤 3:创建 NFS 共享目录并设置权限
mkdir -p /home/你的用户名/nfsroot
sudo chmod 777 /home/你的用户名/nfsroot # 开放权限
步骤 4:重启 NFS 服务并验证
sudo systemctl restart rpcbind
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server # 开机自启
# 验证 NFS 共享目录
showmount -e localhost
输出应包含 /home/你的用户名/nfsroot *,说明 NFS 共享配置成功。
步骤 5:主机本地测试 NFS 挂载
sudo mount -t nfs localhost:/home/你的用户名/nfsroot /mnt # 挂载到 /mnt
touch /mnt/test_nfs.txt # 创建文件
ls /mnt # 能看到 test_nfs.txt 则正常
sudo umount /mnt # 卸载(测试完成后)
三、调试开发板网络连通性
前提:
开发板与主机通过 网线直连 或 同一路由器 连接(确保在同一网段)。
配置主机静态 IP(避免 IP 变动):
编辑网络配置文件(以 Ubuntu 20.04 为例):
sudo vim /etc/netplan/00-installer-config.yaml
network:
ethernets:
enp0s3: # 你的网卡名(用 ip addr 查看)
addresses: [192.168.1.100/24] # 主机 IP(固定)
gateway4: 192.168.1.1 # 网关(路由器 IP,直连可省略)
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
version: 2
sudo netplan apply
- 配置开发板 IP(两种方式)
方式 1:临时配置(重启开发板失效)
在开发板串口终端执行(与主机同一网段,如主机 192.168.1.100,开发板设为 192.168.1.101):
ifconfig eth0 192.168.1.101 netmask 255.255.255.0 # 配置静态 IP
route add default gw 192.168.1.1 # 添加网关(直连可省略)
echo "nameserver 8.8.8.8" > /etc/resolv.conf # 配置 DNS
方式 2:永久配置(修改开发板网络配置文件)
不同开发板配置文件路径不同,常见路径:
/etc/network/interfaces(Debian/Ubuntu 系统开发板)。
/etc/sysconfig/network-scripts/ifcfg-eth0(CentOS 系统开发板)。
按对应格式配置静态 IP 即可。
- 测试网络连通性
步骤 1:开发板 ping 主机(核心验证)
在开发板终端执行:
ping 192.168.1.101 # 开发板 IP
能 ping 通则双向网络正常。
- 测试 TFTP 服务(开发板侧)
在开发板终端执行(下载主机 TFTP 目录的 test.txt):
tftp -g -r test.txt 192.168.1.100 # -g 下载,-r 指定文件名,后接主机 IP
cat test.txt # 输出 "test tftp" 则 TFTP 服务正常
- 测试 NFS 服务(开发板侧)
在开发板终端挂载主机 NFS 目录:
mount -t nfs -o nolock 192.168.1.100:/home/你的用户名/nfsroot /mnt # 挂载 NFS
touch /mnt/board_test.txt # 创建文件(验证写权限)
ls /mnt # 能看到 board_test.txt 则 NFS 挂载成功
umount /mnt # 卸载(测试完成后)