Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4
1686 字
8 分钟
Uboot中NFS下载一直显示“Loading:T T T ...” 或“CANNOT MOUNT”

最近在学习正点原子I.MX6ULL嵌入式Linux开发,完成uboot移植后,想验证网络驱动是否正常工作。前期已搞定开发板、Windows主机、Ubuntu虚拟机的三方互ping(网络基础环境搭建完成),但测试文件传输时遇到了坑:TFTP服务可正常下载文件,NFS服务却持续报错(TTT/ount count等提示),无法下载目标文件

经过几小时排查,最终定位到是高版本Ubuntu的NFS配置、内核兼容性问题,特此记录解决方案,给遇到同款问题的朋友避坑。

一、环境信息#

  • 开发板:正点原子I.MX6ULL(uboot已移植完成)

  • 虚拟机:Ubuntu 24.04,默认内核 6.15

  • 主机:Windows(已完成与开发板、虚拟机的桥接配置,三方互ping通) 网路配置出现问题的可以参考Uboot网路配置问题解决方案

  • 目标文件:Ubuntu下 /home/chidao/linux/nfs/zImage(计划通过NFS传输到开发板)

二、问题现象与初步排查#

1. 异常现象#

开发板uboot中执行NFS下载命令,持续报错(提示 TTTount count),文件下载失败;但切换为TFTP服务下载同文件时,可正常传输。

2. 初步排查(排除基础问题)#

由于开发板、主机、虚拟机已互ping通,且TFTP正常,说明:

  • 网络物理链路、IP配置(同网段)无问题

  • uboot网络驱动工作正常

  • 问题聚焦于 NFS服务端(Ubuntu)的配置/兼容性

三、核心原因分析#

排查后发现,问题源于Ubuntu 24.04(高版本)与uboot NFS客户端的兼容性差异,主要有3点:

  1. Ubuntu 24.04 内核6.15默认禁用NFSv2:uboot的NFS客户端仅支持NFSv2版本,而高版本Ubuntu(含内核6.15)已移除/禁用NFSv2,仅保留v3/v4,导致版本不兼容

  2. NFS共享目录配置不当:未正确配置共享文件夹权限,导致开发板无访问权限

  3. UDP服务未启用:NFSv2依赖UDP协议,Ubuntu默认可能禁用NFS的UDP支持,导致传输失败

验证版本命令(Ubuntu终端执行): sudo cat /proc/fs/nfsd/versions 若输出中无 +2(表示支持v2),则确认是NFSv2不兼容问题。

四、解决方案(分步操作)#

核心思路:降低Ubuntu内核以支持NFSv2 → 配置NFS共享与版本/协议 → 重启服务验证

步骤1:降低Ubuntu内核至5.19.0(支持NFSv2)#

Ubuntu 24.04默认内核6.15禁用NFSv2,需降级至5.19.0(经测试可完美支持NFSv2),方案参考Ubuntu 24.04.2 LTS 内核降级教程

1.1 查看当前内核与系统架构#

# 查看当前运行内核版本
uname -r
# 查看系统已安装的所有内核
dpkg --list | grep linux-image
# 查看系统架构(amd64/arm64等,后续下载内核需匹配)
dpkg --print-architecture

1.2 下载并安装5.19.0内核#

创建shell脚本批量下载安装(避免手动下载出错),步骤如下:

# 1. 创建脚本文件(命名为 install_kernel_5.19.sh)
touch install_kernel_5.19.sh
chmod +x install_kernel_5.19.sh # 赋予可执行权限
# 2. 编辑脚本(复制以下内容,注意ARCH需匹配自己的系统架构)
vim install_kernel_5.19.sh

脚本内容(ARCH默认amd64,若为arm64/armhf需修改):

#!/bin/bash
set -e # 执行出错时立即退出
VER=5.19.0-051900
ARCH=amd64 # 架构匹配:arm64/armhf 请修改此处
URL=https://kernel.ubuntu.com/mainline/v5.19
# 1. 创建临时目录,避免文件混乱
mkdir -p ~/kernel-5.19 && cd ~/kernel-5.19
# 2. 下载4个核心deb包(内核 headers + image + modules)
wget ${URL}/${ARCH}/linux-headers-${VER}_${VER}.202207312230_all.deb
wget ${URL}/${ARCH}/linux-headers-${VER}-generic_${VER}.202207312230_${ARCH}.deb
wget ${URL}/${ARCH}/linux-image-unsigned-${VER}-generic_${VER}.202207312230_${ARCH}.deb
wget ${URL}/${ARCH}/linux-modules-${VER}-generic_${VER}.202207312230_${ARCH}.deb
# 3. 安装内核包
sudo dpkg -i *.deb
# 4. 清理临时文件(可选,也可保留用于后续卸载)
echo "内核安装完成,清理临时文件..."
rm -rf ~/kernel-5.19

1.3 执行脚本并验证安装#

# 执行安装脚本
sudo ./install_kernel_5.19.sh
# 验证5.19.0内核是否安装成功
dpkg --list | grep linux-image

若输出中包含 linux-image-unsigned-5.19.0-051900-generic,则安装成功。

1.4 切换默认启动内核为5.19.0#

# 编辑grub启动配置
sudo vim /etc/default/grub
# 修改GRUB_DEFAULT(指定默认启动5.19.0内核)
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.19.0-051900-generic"
# 更新grub配置
sudo update-grub
# 重启虚拟机(生效内核)
sudo reboot

重启后执行 uname -r,若输出 5.19.0-051900-generic,则内核切换成功。

步骤2:配置NFS服务(共享目录+版本+协议)#

2.1 配置NFS共享文件夹#

指定需要共享给开发板的目录(即本文的 /home/chidao/linux/nfs),并配置权限:

# 编辑NFS共享配置文件
sudo vim /etc/exports
# 在文件末尾添加以下内容(替换为自己的共享目录路径)
/home/你的用户名/linux/nfs *(rw,sync,no_root_squash)

参数说明:

  • *:允许所有设备访问(嵌入式开发场景简化配置,也可指定开发板IP)

  • rw:读写权限

  • sync:同步写入磁盘(避免文件丢失)

  • no_root_squash:开发板root用户拥有共享目录的root权限(避免权限不足)

2.2 强制NFS服务支持v2版本#

编辑NFS内核服务配置,指定启用NFSv2:

sudo vim /etc/default/nfs-kernel-server

修改以下5项配置(确保启用v2):

配置修改

2.3 启用NFS的UDP服务#

NFSv2依赖UDP协议,需配置启用UDP支持:

sudo vim /etc/nfs.conf

修改以下配置(启用UDP):

UDP启用

2.4 重启NFS服务(生效配置)#

sudo /etc/init.d/nfs-kernel-server restart
# 验证NFS服务状态(可选)
sudo /etc/init.d/nfs-kernel-server status

若输出 active (running),则服务重启成功。

五、验证测试#

重启开发板,进入uboot终端,执行NFS下载命令(示例):

nfs 80800000 192.168.1.101:/home/chidao/linux/nfs/zImage

参数说明:

  • 80800000:开发板内存地址(根据自己的uboot配置调整)

  • 192.168.1.101:Ubuntu虚拟机IP(serverip)

  • /home/chidao/linux/nfs/zImage:Ubuntu共享目录下的目标文件

若命令执行后无报错,显示文件传输进度(如 100% 完成),则NFS下载正常,问题解决!

六、注意事项(避坑提醒)#

  1. 内核降级后,若重启仍进入旧内核:可在开机GRUB菜单中手动选择「Advanced options for Ubuntu」→「5.19.0内核」启动,再重新执行 sudo update-grub 固化配置

  2. 共享目录权限问题:若仍提示权限不足,可执行 sudo chmod -R 777 /home/你的用户名/linux/nfs 临时开放权限(仅开发测试环境使用)

  3. 防火墙干扰:Ubuntu防火墙可能拦截NFS端口,可临时关闭防火墙测试:sudo ufw disable

  4. uboot参数:确保uboot中 serverip(Ubuntu IP)、ipaddr(开发板IP)配置正确,且与主机同网段

七、总结#

高版本Ubuntu(如24.04)与uboot NFSv2的兼容性问题是核心坑点,通过「内核降级+NFS配置调整」可完美解决。核心逻辑是:让NFS服务端(Ubuntu)支持uboot所需的NFSv2版本与UDP协议,同时配置正确的共享权限。

如果TFTP正常但NFS报错,优先排查NFS版本兼容性和协议配置,基本能定位问题~

Uboot中NFS下载一直显示“Loading:T T T ...” 或“CANNOT MOUNT”
https://qiandaos.top/posts/linux-notes/uboot-nfs/
作者
千岛寒流
发布于
2025-10-23
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00