解决uboot无法通过nfs与Ubuntu互传文件
目录
前言
楼主使用的版本:Ubuntu 24.04.3,Linux内核版本linux-image-6.14.0-33-generic
需要的一些操作:
uname -r 查看Ubuntu当前的内核版本
dpkg --get-selections | grep linux-image 查看Ubuntu已安装的Linux内核版本
dpkg --print-architecture 确认系统是 amd64 还是 arm64 架构
apt-cache search linux| grep 6.8.0 查看apt命令支持安装的Linux内核版本
sudo cat /proc/fs/nfsd/versions 查看Ubuntu的NFS版本
在使用uboot的nfs命令拷贝ubuntu中的Linux内核镜像文件时出现:Loading: T T T T T T T T T T T T T T和Loading: *** ERROR: File lookup fail的错误,查阅了资料发现是NFS版本不对。uboot中的nfs版本为2,而楼主Ubuntu中的nfs版本为+3 +4 +4.1 +4.2,导致传输出现错误。
一、降低Ubuntu使用的linux内核版本
楼主使用Linux内核版本是linux-image-6.14.0-33-generic已经不支持NFS V2版本了,因此需要降低Linux版本。参考Ubuntu 22.04版本无法挂载NFS V2的解决方法-OpenEdv-开源电子网这篇帖子,楼主发现使用帖子中的sudo apt-get install linux-image-5.19.0-41-generic在Ubuntu24中无法下载。使用 apt-cache search linux| grep 5.19查询后发现Ubuntu24的apt命令已经无法安装5.19.0版本的Linux内核,只能手动下载Linux内核的.deb包安装,.deb下载地址为Index of /mainline/v5.19.17。楼主参考了这篇文章:Ubuntu 24.04.2 LTS Linux内核6.8降级更换内核版本(以5.19.0为例)_ubuntu 24.04 内核版本-CSDN博客

创建一个脚本自动下载安装Linux内核:vim install_kernel_5.19.17.sh。将下面的脚本内容复制到install_kernel_5.19.17.sh,并保存。
1 #!/bin/bash
2 set -e
3 VER=5.19.17-051917
4 ARCH=amd64 # arm64/armhf 请改这里
5 URL=https://kernel.ubuntu.com/mainline/v5.19.17
6
7 # 1. 创建临时目录
8 mkdir -p ~/kernel-5.19 && cd ~/kernel-5.19
9
10 # 2. 下载 4 个核心 deb 包
11 wget ${URL}/${ARCH}/linux-headers-${VER}_${VER}.202210240939_all.deb
12 wget ${URL}/${ARCH}/linux-headers-${VER}-generic_${VER}.202210240939_${ARCH}.deb
13 wget ${URL}/${ARCH}/linux-image-unsigned-${VER}-generic_${VER}.202210240939_${ARCH}.deb
14 wget ${URL}/${ARCH}/linux-modules-${VER}-generic_${VER}.202210240939_${ARCH}.deb
15
16 # 3.安装
17 sudo dpkg -i *.deb
18
19 echo "清理临时文件..."
20 rm -rf kernel-5.19
使用chmod 777 install_kernel_5.19.17.sh赋予vim install_kernel_5.19.17.sh文件可执行权限,然后运行脚本:./install_kernel_5.19.17.sh。运行完成以后,使用dpkg --get-selections | grep linux-image查看已安装的Linux内核版本,发现5.19.17版本的Linux已经安装完成。

接下来需要更改Ubuntu的启动内核,使用sudo vim /etc/default/grub,将文件修改为:
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.19.17-051917-generic"

更改grub文件之后需要更新sudo update-grub,然后重启系统。重启系统之后使用uname -r 查看内核版本,如下图所示,说明内核版本降级成功:
![]()
二、让Ubuntu中的NFS兼容V2版本
将系统降级完成以后,就可以修改Ubuntu中的NFS版本使之兼容uboot的版本。首先使用sudo cat /proc/fs/nfsd/versions查看Ubuntu中NFS的版本。然后使用sudo vim /etc/default/nfs-kernel-server对文件进行修改为:
9 # Number of servers to start up
10 #RPCNFSDCOUNT=8
11 RPCNFSDCOUNT="-V 2 8"
12 # Runtime priority of server (see nice(1))
13 RPCNFSDPRIORITY=0
14
15 # Options for rpc.mountd.
16 # If you have a port-based firewall, you might want to set up
17 # a fixed port here using the --port option. For more information,
18 # see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
19 # To disable NFSv4 on the server, specify '--no-nfs-version 4' here
20 #RPCMOUNTDOPTS="--manage-gids"
21 RPCMOUNTDOPTS="-V 2 --manage-gids"
22
23 # Do you want to start the svcgssd daemon? It is only required for Kerberos
24 # exports. Valid alternatives are "yes" and "no"; the default is "no".
25 NEED_SVCGSSD=""
26
27 # Options for rpc.svcgssd.
28 #RPCSVCGSSDOPTS=""
29 RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"
使用sudo service nfs-kernel-server restart重启NFS服务。查看一下服务端 NFS 版本sudo cat /proc/fs/nfsd/versions,如果已经有 +2 则说明 V2 版本 NFS 服务已经开启,如果为 -2 则说明系统内核虽然已经支持了 V2 版本的 NFS,但还没有开启。

开启 V2 版本的 NFS,用 vim 编辑器打开 /etc/nfs.conf 文件,如果没有该文件则会自动创建一个:sudo vim /etc/nfs.conf,修改为:

再次重启 NFS 服务,查看 NFS 版本,发现V2 版本已开启。至此问题已解决。
三、下载到一半出现TTTT
修改NFS服务器端,配置文件sudo vim /etc/hosts添加以下内容,再次重启NFS服务。

更多推荐



所有评论(0)