ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

stm32mp157 开发板通过网线和电脑直连,ping通的网络设置

stm32mp157 开发板通过网线和电脑直连,ping通的网络设置 使用一根网线让Ubuntu和正点原子I.MX6ULL开发板互相ping通_正点原子ubuntu虚拟机连接网络-CSDN博客开发板通过网线和电脑直连ping通的网络设置_开发板为什么不能直连-CSDN博客关于开发板uboot如何才能ping通ubuntu和pc机_如何让开发板和pc相互ping通-CSDN博客ARM开发板网线连接电脑电脑WIFI无线上网虚拟机连接主机和开发板网络设置方法_主机用网口,虚拟机用wifi-CSDN博客看下面这个[Linux]从零开始的STM32MP157 U-Boot网络命令讲解及相关配置_stm32mp157 联网-CSDN博客关闭防火墙高级 设置入站规则ping 通电脑设置PC 电脑IP数位 192.168.159.1编辑- 虚拟机 更改设置桥接电脑的有线网卡 网线连接开发板设置选择自定义vMnet0完成上面的配置以后我们启动虚拟机。下面我们开始配置Ubuntu的IP地址。我们点击右上角的网络图标将网关同样配置为“192.168.1.1”表示将我们的计算机作为网关ifconfig 查询就可以使用我们的开发板去pingUbuntu的IP地址即192.168.1.100:开发板已经成功ping到Ubuntu但是不能上网双网卡的解决方案编辑--虚拟机设置选择上网的网卡将VMnet1桥接到接了开发板的网卡上设置 --》添加“网络适配器1”需要自定义到VMnet0:网络适配器2”自定义到VMnet1:完成上面的配置以后我们直接点击“确定”即可。然后我们可以重启Ubuntu,就可以看到我们的Ubuntu有两张网卡了可以去ping一下baidu:如果你在这一步中无法访问外部网络可以尝试在“虚拟机设置中”将两个网络适配器配置到的VMnet0和VMnet1交换一下位置交换连接路由器为什么虚拟机还是 159问题根源IP 还是192.168.159.100这是VMnet8 NAT 的网段。 说明虚拟机硬件网卡还绑定在 VMnet8 (NAT)并没有切到 VMnet0 桥接。虚拟网络编辑器改好了但虚拟机本身的网卡硬件没改。虚拟网络编辑器是配置 “虚拟交换机”每个虚拟机要单独指定用哪一台交换机两者是分开的。处理步骤必须严格按顺序关闭虚拟机一定要关机不能挂起在 VMware 主界面选中这个 Ubuntu 虚拟机 →点击【编辑虚拟机设置】点开【网络适配器】现在大概率选中的是NAT模式(VMnet8)修改选择自定义特定虚拟网络 → VMnet0✅勾选已连接、启动时连接确认列表里不要存在第二个网卡如果有多余网卡直接移除。启动 Ubuntu 虚拟机。图形界面操作最简单不容易出错打开 Ubuntu 设置 → 网络在 “有线” 那一行点齿轮图标 → 点右下角忘记连接配置关闭窗口把有线开关关掉再重新打开。图形界面会自动删除旧的 DHCP 缓存重新向路由器请求 IP。改为编辑配置文件bashsudo gedit /etc/netplan/00-installer-config.yaml粘贴下面内容严格注意缩进全部用空格不能用 Tabyamlnetwork: ethernets: ens33: addresses: [192.168.3.100/24] gateway4: 192.168.3.2 nameservers: addresses: [223.5.5.5, 114.114.114.114] version: 2保存关闭。应用网络配置bashsudo netplan apply查看 IPbashifconfig✅ ens33 会出现inet 192.168.3.100。然后测试bashping 192.168.3.25 ping baidu.com最终方案正点原子 网络环境搭建https://www.bilibili.com/video/BV1n541197rk/?spm_id_from333.1391.0.0p3vd_sourcef7a0517065a7df7bec69ee4ceefd60c2官方资料1.虚拟机连接主机上网电脑是 WiFi 上网 设置网络适配器NAT1.1 SSH 连接1.2文件传输2.开发板连接虚拟机控制面板-网络共享中心更改适配器设置电脑网口对应的物理网卡-属性-IPV4点击确定保存设置电脑网卡口-网线连接开发板添加连接开发板 的网卡恢复到默认网络设置后如下图所示全部的 VMnet 子网地址会重新随机分配。Ubuntu 设置ifconfig3.开发板设置以上步骤是结合开发板的出厂文件系统进行的在 uboot 命令行中要 ping 虚拟机的话还需 要设置 uboot 的网络环境变量。进入 uboot 命令行中参考如下设置环境变量最后 ping 虚拟 机 Ubuntu 的 IP 测试下。setenv ipaddr 192.168.1.50setenv ethaddr 00:04:9f:04:d2:35setenv gatewayip 192.168.1.1setenv netmask 255.255.255.0setenv serverip 192.168.1.100saveenv设置完后验证是否开发板 ping 通虚拟机。4.TFTP 环境搭建可以使用 TFTP 来加载内核 zImage、设备树和其他较小的文件到开发板 DDR 上从而实现网 络挂载。安装和配置 xinetd查询/etc/下是否存在 xinetd.conf 文件没有的话则自己新建一个。这里已经查到有 xinetd.conf 文件如果没有就执行以下指令创建一个 xinetd.conf 文件。 sudo vi /etc/xinetd.conf 创建出来的文件是空白的修改 xinetd.conf 文件内容如下# Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { # Please note that you need a log_type line to be able to use log_on_success # and log_on_failure. The default is the following : # log_type SYSLOG daemon info } includedir /etc/xinetd.dTFTP 目录新建 TFTP 目录这里建立在/home/user/linux 目录下目录名为 tftp。将 tftp 目录赋予 可读可写可执行权限。useruser-virtual-machine:~/linux$ ls alientek_linux alientek_tf-a atk-mp1 nfs tool useruser-virtual-machine:~/linux$ mkdir -p /home/user/linux/tftpboot useruser-virtual-machine:~/linux$ chmod 777 /home/user/linux/tftpboot useruser-virtual-machine:~/linux$ cd /home/user/linux/tftpboot useruser-virtual-machine:~/linux/tftpboot$ ls useruser-virtual-machine:~/linux/tftpboot$tftp-hpa 和 tftpd-hpa 服务程序执行以下指令打开 tftpd-hpa 配置文件修改 tftp 目录为 TFTP 服务器工作目录。sudo vi /etc/default/tftpd-hpa正在处理用于 ureadahead (0.100.0-21) 的触发器 ... useruser-virtual-machine:~/linux/tftpboot$ sudo vi /etc/default/tftpd-hpa useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ pwd /home/user/linux/tftpboot useruser-virtual-machine:~/linux/tftpboot$ ls useruser-virtual-machine:~/linux/tftpboot$ cat /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAMEtftp TFTP_DIRECTORY/home/user/linux/tftpboot TFTP_ADDRESS:69 TFTP_OPTIONS--secure useruser-virtual-machine:~/linux/tftpboot$执行以下指令创建/etc/ xinetd.d/tftp 文件配置/etc/ xinetd.d/tftp 文件将 tftp 路径设置为自 己的 tftp 路径。如果没有 xinetd.d 这个目录可以自己手动创建sudo vi /etc/xinetd.d/tftp -p在/etc/xinetd.d/tftp 这个文件中添加如下内容其中圈起来的路径根据自己的实际情况修改。server tftp { socket_type dgram wait yes disable no user root protocol udp server /usr/sbin/in.tftpd server_args -s /home/user/linux/tftpboot -c #log_on_success PID HOST DURATION #log_on_failure HOST per_source 11 cps 100 2 flags IPv4 }useruser-virtual-machine:~/linux/tftpboot$ sudo vi /etc/xinetd.d/tftp -p useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ useruser-virtual-machine:~/linux/tftpboot$ cat /etc/xinetd.d/tftp server tftp { socket_type dgram wait yes disable no user root protocol udp server /usr/sbin/in.tftpd server_args -s /home/user/linux/tftpboot -c #log_on_success PID HOST DURATION #log_on_failure HOST per_source 11 cps 100 2 flags IPv4 } useruser-virtual-machine:~/linux/tftpboot$重启 tftpd-hpa。sudo service tftpd-hpa restart重启 xinetd 服务。sudo service xinetd restartuseruser-virtual-machine:~/linux/tftpboot$ sudo service tftpd-hpa restart useruser-virtual-machine:~/linux/tftpboot$ sudo service xinetd restart useruser-virtual-machine:~/linux/tftpboot$网络环境确保网络环境正常Ubuntu、Windows 和开发板能相互 ping 通。 这里结合 1.4 小节的配置来验证即 开发板 IP192.168.1.50 虚拟机 IP192.168.1.100 电脑网口的 IP192.168.1.2TFTP 测试 在/home/user/linux/tftpboot 目录下创建一个 test.c 文件在里面直接写入 hello alientek!在开发板文件系统执行以下指令设置开发板 IP将虚拟机192.168.1.100TFTP 工作目 录下的 test.c 文件拷贝到开发板中。开发板设置 接下来设置下开发板的 IP。这里我们将开发板 IP 设置为 192.168.1.50和 VMnet0 在同一 网段即可。 进入开发板文件系统设置开发板 IP。ifconfig eth0 up ifconfig eth0 192.168.1.50 ifconfigifconfig eth0 192.168.1.50 tftp -g -r test.c 192.168.1.100 cat test.crootATK-DLMP157:~# ls shell rootATK-DLMP157:~# cd /home rootATK-DLMP157:/home# ls root rootATK-DLMP157:/home# mkdir user rootATK-DLMP157:/home# ls root user rootATK-DLMP157:/home# ping 192.168.1.100 PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data. 64 bytes from 192.168.1.100: icmp_seq1 ttl64 time3.91 ms 64 bytes from 192.168.1.100: icmp_seq2 ttl64 time1.78 ms 64 bytes from 192.168.1.100: icmp_seq3 ttl64 time1.91 ms ^C --- 192.168.1.100 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev 1.780/2.535/3.914/0.976 ms rootATK-DLMP157:/home# tftp -g -r test.c 192.168.1.100 rootATK-DLMP157:/home# cat test.c hello world ! rootATK-DLMP157:/home#可以看到 test.c 成功传输到开发板上TFTP 环境搭建成功。5. NFS 环境搭建NFS 简介 网络文件系统英文 Network File System(NFS)是由 SUN 公司研制的 UNIX 表示层协议 (presentation layer protocol)能使使用者访问网络上别处的文件就像在使用自己的计算机一样。 我们可以在 Ubuntu 上制作开发板的根文件系统然后使用 NFS 来加载根文件系统到开发板的 DDR 上。安装 NFS 服务 在 Ubuntu 终端执行以下指令安装 NFS。sudo apt-get install nfs-kernel-serverNFS 共享目录NFS 共享目录 新建 NFS 共享目录并给予 NFS 目录可读可写可执行权限。sudo mkdir /home/user/linux/nfs sudo chmod 777 /home/user/linux/nfs/配置 NFS 服务 修改/etc/default/nfs-kernel-server 文件。sudo vi /etc/default/nfs-kernel-server 修改成以下内容添加 NFS 版本配置。修改三行RPCNFSDCOUNT-V 2 8 RPCMOUNTDOPTS-V 2 --manage-gids RPCSVCGSSDOPTS--nfs-version 2,3,4 --debug --sysloguseruser-virtual-machine:~/linux/tftpboot$ cat /etc/default/nfs-kernel-server # Number of servers to start up #RPCNFSDCOUNT8 RPCNFSDCOUNT-V 2 8 # Runtime priority of server (see nice(1)) RPCNFSDPRIORITY0 # Options for rpc.mountd. # If you have a port-based firewall, you might want to set up # a fixed port here using the --port option. For more information, # see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS # To disable NFSv4 on the server, specify --no-nfs-version 4 here #RPCMOUNTDOPTS--manage-gids RPCMOUNTDOPTS-V 2 --manage-gids # Do you want to start the svcgssd daemon? It is only required for Kerberos # exports. Valid alternatives are yes and no; the default is no. NEED_SVCGSSD # Options for rpc.svcgssd. #RPCSVCGSSDOPTS RPCSVCGSSDOPTS--nfs-version 2,3,4 --debug --syslog useruser-virtual-machine:~/linux/tftpboot$执行以下指令打开/etc/exports 文件sudo vi /etc/exports进入 /etc/exports 文件在最后添加如下内容注意nfs *中间有个空格这里用绿色标注。/home/user/linux/nfs *(rw,sync,no_root_squash)/home/user/linux/nfs 表示 NFS 共享的目录*表示允许所有的网络段访问rw 表示访问者具有可读写权限sync 表示将缓存写入设备中可以说是同步缓存的意思 no_root_squash 表示访问者具有 root 权限。修改完如下图所示。access control list修改完以后保存退出。 执行以下指令重启 NFS 服务器。sudo /etc/init.d/nfs-kernel-server restartuseruser-virtual-machine:~/linux/tftpboot$ sudo /etc/init.d/nfs-kernel-server restart [ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service. useruser-virtual-machine:~/linux/tftpboot$执行以下指令查看 NFS 共享目录。showmount -euseruser-virtual-machine:~/linux/tftpboot$ showmount -e Export list for user-virtual-machine: /home/user/linux/nfs * useruser-virtual-machine:~/linux/tftpboot$网络环境 确保网络环境正常Ubuntu、Windows 和开发板能相互 ping 通。 这里结合 1.4 小节的配置来验证即 开发板 IP192.168.1.50 虚拟机 IP192.168.1.100 电脑网口的 IP192.168.1.2NFS 测试 在/home/user/linux/nfs 目录下创建一个 test.c 文件在里面写入 hello world!在开发板出厂系统执行以下指令设置开发板 IP创建一个 get 目录将虚拟机 192.168.1.100NFS 共享目录挂载到到开发板的 get 目录中。mkdir getnfs mount -t nfs -o nolock,nfsvers3 192.168.1.100:/home/user/linux/nfs getnfs/rootATK-DLMP157:/home# mkdir getnfs rootATK-DLMP157:/home# mount -t nfs -o nolock,nfsvers3 192.168.1.100:/home/user/linux/nfs getnfs/ rootATK-DLMP157:/home# ls getnfs root test.c user rootATK-DLMP157:/home# cd getnfs/ rootATK-DLMP157:/home/getnfs# ls test.c rootATK-DLMP157:/home/getnfs# cat test.c hello world nfs ! rootATK-DLMP157:/home/getnfs#挂载成功后进入 getnfs 目录下可以查看到挂载的文件。确保网络正常后设置 uboot 环境变量来挂载 Ubuntu 里 TFTP 目录下的内核和设备树。 注意 - 符号为英文的两边各有一个空格。以下排版中用绿色着重空格红色着重符号setenv bootcmd tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000 saveenv boot报错解析Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)含义Linux 内核启动成功但是找不到 / 无法挂载根文件系统你的场景是STM32MP157 U-Boot TFTP 加载内核 NFS 挂载 rootfs正点原子标准调试方案unknown-block (0,0) 内核完全没有识别到可用的根设备NFS 挂载流程失败确保网络正常后设置 uboot 环境变量来挂载 Ubuntu 里 TFTP 目录下的内核和设备树。 注意 - 符号为英文的两边各有一个空格。以下排版中用绿色着重空格红色着重符号 setenvbootcmd 语法说明setenv bootcmd tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000 saveenv boot语法本身合法U-Boot 可以省略0x作用tftp 下载 uImage 到0xc2000000tftp 下载 dtb 到0xc4000000bootm 启动 legacy uImage无 initrd设备树在 c4000000U-Boot⚠️ 注意逗号分隔- c4000000中间必须有空格不能写成-c4000000完整标准写法推荐加上 0x 可读性更好setenv bootcmd tftp 0xc2000000 uImage;tftp 0xc4000000 stm32mp157d-atk.dtb;bootm 0xc2000000 - 0xc4000000 配套必须配置NFS 根文件系统你还需要设置bootargs示例适配你的网段 192.168.1.xsetenv bootargs consolettySTM0,115200 root/dev/nfs rw nfsroot192.168.1.100:/home/xxx/nfsroot,nfsvers3,tcp ip192.168.1.50:192.168.1.100::255.255.255.0::eth0:off修改/home/xxx/nfsroot为你 Ubuntu 真实 NFS 导出目录保存环境变量saveenv boot挂载教程系统本小节我们使用前面搭建好的网络环境来挂载网盘上提供的教程系统镜像。 网盘路径开发板光盘 A-基础资料\8、系统镜像\1、教程系统镜像 我们通过 TFTP 来挂载内核、设备树通过 NFS 来挂载 buildroot 文件系统TF-A 和 uboot 还是使用出厂系统提供的。NFS 挂载教程系统 在 Ubuntu 下的 NFS 目录创建一个 rootfs 目录将网盘上的 buildroot-2020.06-rootfs.tar.bz2 拷贝到 rootfs 目录下并解压。解压完会生成一个 buildroot-2020.06-rootfs 目录此目录就是我们要挂载的教程文件系统。在开发板设置 uboot 环境变量来挂载教程文件系统。指令过长这里为方便文档排版添加 \换行符换行符后面要紧跟回车键。初学者不建议使用换行符可以参考下图中的格式写在同 一行其中网络 IP 信息和 nfsrootfs 要修改成实际自己的参数。以下排版中用绿色着重空格 红色着重标点符号setenv bootargs consolettySTM0,115200 \ root/dev/nfs \ nfsroot192.168.1.100:/home/user/linux/nfs/rootfs/buildroot-2020.06-rootfs,prototcp rw \ ip192.168.1.50:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off saveenv boot格式参考setenv bootargs console开发板串口,波特率 \root挂载方式 \nfsroot虚拟机 IP 地址:文件系统路径,proto传输协议 读写权限 \ip开发板 IP 地址:虚拟机 IP 地址:网关地址:子网掩码::开发板网口:off saveenv 注意格式中有空格要求已用绿色标记空格都是单个空格。TFTP 丢包常见原因STM32MP157TFTP 服务优化Ubuntu编辑 tftpd-hpa 配置sudo vim /etc/default/tftpd-hpa推荐配置调小包大小减少丢包TFTP_OPTIONS--secure --blocksize 512# /etc/default/tftpd-hpa TFTP_USERNAMEtftp TFTP_DIRECTORY/home/user/linux/tftpboot TFTP_ADDRESS:69 #TFTP_OPTIONS--secure TFTP_OPTIONS--secure --blocksize 512重启服务sudo systemctl restart tftpd-hpa sudo ufw allow tftpU-Boot 端参数优化降低大包超时进入 U-Boot调整 tftp 超时、blocksizesetenv tftpblocksize 512 setenv bootretries 10 saveenv boot现象总结ping 192.168.1.100正常通 →基础链路、IP、PHY 没问题TFTP 下载出现大量#T多次重试后勉强拿到残缺镜像Bad Data CRC→uImage 在 TFTP 传输过程中损坏数据丢包 / 出错根源TFTP 大包传输不稳定下载得到的内核文件不完整校验失败。通过 nfs 下载出现 T T T T [Retry count exceeded: starting again]【踩坑日记】【教程】嵌入式 Linux 通过 nfs 下载出现 T T T T [Retry count exceeded: starting again]_retry count exceeded; starting again-CSDN博客确认 nfs2 是否已经开启查看 nfs 的版本sudo cat /proc/fs/nfsd/versions2 就代表已经开启 nfs2 服务则第 4 节可跳过如果是 -2 就往下看开启 nfs2参考文章https://blog.csdn.net/Qiuoooooo/article/details/112601940进入 /etc/default/nfs-kernel-server这个文件sudo vim /etc/default/nfs-kernel-server————————————————版权声明本文为CSDN博主「__Witheart__」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。原文链接https://blog.csdn.net/Beihai_Van/article/details/140437199查看 Linux 系统中与 NFS 相关的网络连接信息useruser-virtual-machine:~/linux/tftpboot$ netstat -a | grep nfs tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN tcp 0 0 user-virtual-machin:nfs user-virtual-machi:1007 ESTABLISHED tcp 0 0 user-virtual-machi:1007 user-virtual-machin:nfs ESTABLISHED tcp6 0 0 [::]:nfs [::]:* LISTEN udp 0 0 0.0.0.0:nfs 0.0.0.0:* udp6 0 0 [::]:nfs [::]:* useruser-virtual-machine:~/linux/tftpboot$有udp最重要查看 Linux 系统上 NFS 服务器支持的协议版本最终 换了一条网线为什么是网线换了就行✅ 核心一句话TFTP 基于UDPUDP 没有握手、没有自动重传纠错只有 U-Boot 上层简单重试对信号完整性极其敏感旧网线存在隐性信号衰减 / 串扰小包 ping 没问题大包传输直接丢包更换合格网线后信号恢复正常。1. 为什么 ping 通但 TFTP 大包疯狂 #T 丢包ping 使用ICMP 小包几十字节对网线质量要求很低轻微信号衰减、接触不良小包依然能到达所以ping 192.168.1.100 is alive显示正常。TFTP 传输 uImage7MB会拆分大量 UDP 大包 默认块大小 512/1024 字节连续高速发包。网线阻抗不匹配、铜芯细、劣质水晶头、线长过长、内部断线部分芯线虚接高速传输时信号畸变数据包被网卡 / 交换机丢弃 → 出现#TTimeout超时重传多次重试后下载文件残缺 →Bad Data CRC。简单类比 发短信ping 小包字少信号差也能收到 传大文件TFTP 大包持续高速数据流线路稍微不稳直接断片。2. 劣质网线常见隐性故障肉眼看不出来铜包铝 / 铜包铁网线直流电阻大高频差分信号衰减严重千兆下尤其明显百兆勉强工作大包必丢包水晶头压接不良个别线芯虚接不是完全断开低频小包没事高速差分传输失效网线弯折挤压内部双绞线绝缘破损差分对串扰变大以太网差分信号抗干扰能力下降超长网线超过 5 米劣质线信号衰减超标非标准直通线双绞线绞距不符合规范EMI 干扰大3. 补充为什么换网线后 CRC OK内核正常启动合格网线保证差分以太网信号完整UDP 数据包可以完整从开发板 → Ubuntu TFTP 服务器双向传输 所有分块完整接收拼接后的 uImage 和服务器原始文件一致 →Verifying Checksum ... OK不再报 CRC 校验错误顺利拉起 Linux 内核最后 NFS 挂载 rootfs 成功。4. 延伸知识点STM32MP1 调试高频踩坑STM32MP1 的 ETH 是千兆 MAC 外部 PHYPHY 对信号质量比很多单片机网卡更敏感经常出现直连 PC劣质网线协商成 1000M但 UDP 大包疯狂丢包换短线后稳定千兆临时方案强制协商百兆ethtool -s eth0 speed 100 duplex full autoneg off降低对网线要求5. 避坑建议做嵌入式 TFTP/NFS 调试常备 ✅ 超五类 / 六类 0.5m ~ 2m 优质成品短线无氧铜 ❌ 不要用几块钱的超长杂牌网线、手工压接劣质水晶头执行 boot 启动后会自动加载镜像和文件系统并启动。教程 buildroot 文件系统用户名是 root进入文件系统后执行 cd /去到文件系统的根目录下查看文件最终如下图所示。TTTTT TFTP 传输超时板子发请求PC 的 TFTP 服务器没有正确返回数据文件根本没有完整下载成功最优先解决第一步U-Boot 网络连通测试先不要 boot手动测试 tftp# 查看当前网络环境变量 printenv ipaddr serverip netmask gatewayip # 如果不对手动设置根据你自己局域网 setenv ipaddr 192.168.1.50 setenv serverip 192.168.1.100 setenv netmask 255.255.255.0 # 关键ping TFTP服务器必须 alive ping 192.168.1.100ping 不通网线、交换机、PC 网卡、防火墙、PC IP 是否 192.168.1.100ping 通但 tftp 还是 T 超时 → PC 侧 TFTP 服务配置问题高频踩坑✅ 第二步PC 端 TFTP 排查Ubuntu 为例服务没启动tftpd-hpa 是否运行绑定正确网卡sudo systemctl status tftpd-hpa配置文件/etc/default/tftpd-hpaTFTP_USERNAMEtftp TFTP_DIRECTORY/tftpboot TFTP_ADDRESS0.0.0.0:69 TFTP_OPTIONS--secure目录权限文件放在/tftpbootsudo mkdir -p /tftpboot sudo chmod 777 /tftpboot # 确认文件存在、大小写严格一致uImage ≠ UIMAGE ls /tftpboot/uImage ls /tftpboot/stm32mp157d-atk.dtb放行 UDP 69 端口重中之重防火墙拦截是 T 超时头号原因sudo ufw allow 69/udp sudo ufw reloadWindows 使用 Tftpd64Server interface 必须选 192.168.1.100 对应网卡关闭 Windows 防火墙测试✅ 第三步区分 bootm /bootz镜像格式不能混用bootm→uImage带 64 字节 uboot 头bootz→zImage原生压缩内核无头部你的命令用了 bootm说明 tftp 目录放的必须是uImage不能直接放 zImage 如果编译出来是 zImage要么用 mkimage 打包成 uImage要么把 bootm 修改为 bootz你的 bootcmd 语法本身没问题参数顺序正确tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000注意分号在 setenv 单引号内写法正确bootm 内核 - dtb标准格式- 代表无 initrd✅ 第四步临时手动完整测试下载推荐在 uboot 命令行手动逐条执行看哪一步报错tftp 0xc2000000 uImage tftp 0xc4000000 stm32mp157d-atk.dtb bootm 0xc2000000 - 0xc4000000如果手动 tftp 依旧 TTTT → 网络 / TFTP 服务问题如果手动 tftp 成功下载显示 ### 而非 TTTT再执行 bootm 报错 → 镜像格式不对uImage/zImage 混用✅ 第五步完整保存正确 bootcmd确认 tftp 能下载成功后再保存setenv bootcmd tftp 0xc2000000 uImage;tftp 0xc4000000 stm32mp157d-atk.dtb;bootm 0xc2000000 - 0xc4000000 saveenv boot高频踩坑汇总文件名大小写不一致uImage 和 UIMAGE 在 Linux 下是两个文件PC 防火墙拦截 UDP 69 → TTTTTTFTP 服务只监听 127.0.0.1没有绑定局域网网卡镜像放错目录不在 tftp 根目录zImage 搭配 bootm /uImage 搭配 bootz → Wrong Image Format板子和 PC 不在同一网段缺少路由网线问题、交换机端口异常rootuser-virtual-machine:/home/user/linux/tftpboot# sudo systemctl status tftpd-hpa ● tftpd-hpa.service - LSB: HPAs tftp server Loaded: loaded (/etc/init.d/tftpd-hpa; generated) Active: failed (Result: exit-code) since Sun 2026-08-23 00:04:28 CST; 1min 47s ago Docs: man:systemd-sysv-generator (8) Process: 59569 ExecStart/etc/init.d/tftpd-hpa start (codeexited, status1/FAILURE) 8 月 23 00:04:28 user-virtual-machine systemd [1]: Starting LSB: HPAs tftp server... 8 月 23 00:04:28 user-virtual-machine tftpd-hpa [59569]: * Starting HPAs tftpd in.tftpd 8 月 23 00:04:28 user-virtual-machine tftpd-hpa [59569]: /tftpboot missing, aborting. 8 月 23 00:04:28 user-virtual-machine systemd [1]: tftpd-hpa.service: Control process exited, codeexited status1 8 月 23 00:04:28 user-virtual-machine systemd [1]: tftpd-hpa.service: Failed with result exit-code. 8 月 23 00:04:28 user-virtual-machine systemd [1]: Failed to start LSB: HPAs tftp server. rootuser-virtual-machine:/home/user/linux/tftpboot#报错解析/tftpboot missing, aborting.意思TFTP 指定目录 /tftpboot 不存在脚本检查目录失败直接退出。 虽然你当前在/home/user/linux/tftpboot但这不是配置里写的/tftpboot根目录下两个完全不同路径修复命令逐条执行创建根下的 /tftpbootsudo mkdir -p /tftpboot sudo chmod 777 /tftpboot sudo chown tftp:tftp /tftpboot确认配置文件防止之前配置损坏sudo tee /etc/default/tftpd-hpa EOF TFTP_USERNAMEtftp TFTP_DIRECTORY/home/user/linux/tftpboot TFTP_ADDRESS0.0.0.0:69 TFTP_OPTIONS--secure EOF # /etc/default/tftpd-hpa重载并重启服务sudo systemctl daemon-reload sudo systemctl restart tftpd-hpa sudo systemctl status tftpd-hpa防火墙放行 UDP 69 端口sudo ufw allow 69/udp sudo ufw reload✅ 文件迁移说明如果你内核镜像uImage、dtb现在放在~/linux/tftpboot需要复制到根下/tftpbootsudo cp /home/user/linux/tftpboot/* /tftpboot/验证是否成功sudo ss -ulnp | grep 69正常输出会看到in.tftpd监听 69 端口。
返回列表