用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)

2023-11-01

1、NFS介绍

NFS(Network File System)是网络文件系统,和img镜像格式的文件系统一样都是文件系统。区别在于NFS是通过网络挂载,镜像格式的文件系统必须先烧录到硬盘后才能挂载。NFS采用C/S架构,客户端通过网络去挂载服务器端上的文件系统。NFS适用于调试阶段,镜像格式的文件系统适合出货的产品。

2、NFS环境搭建

这里的环境搭建指的是NFS服务器的搭建,uboot、内核已经默认支持NFS的客户端。公司的服务器肯定已经搭建好NFS服务器的环境,下面介绍的是PC上怎么搭建NFS服务器。有两种思路,一种是在Windows中直接运行NFS服务端软件;另一种是在虚拟机中搭建NFS服务器。

3、配置ubuntu上的nfs挂载目录

(1)vi etc/exports添加nfs挂载目录
(2)编辑好后source一下配置文件使nfs配置生效
(3)/etc/init.d/nfs restart,重启nfs服务器

4、制作根文件系统

参考博客:《制作ext2格式的文件系统》

5、配置内核支持nfs启动

1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
	Networking support 
		Networking options 
			TCP/IP networking
					IP: kernel level autoconfiguration
						[*] IP: DHCP support
						[*]IP: BOOTP support
2、配置开启nfs服务
	File systems  --->	
		Network File Systems  --->
			<*> NFS client support 
			[*] NFS client support for NFS version 3                                  
			[*] NFS client support for the NFSv3 ACL protocol extension 
			[*] NFS client support for NFS version 4 (EXPERIMENTAL) 
			[*] NFS client support for NFSv4.1 (DEVELOPER ONLY) 
			[*] Root file system on NFS  

6、修改uboot的bootargs支持nfs

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200 

(1)root=/dev/nfs
告诉内核根文件系统是NFS;
(2)nfsroot=192.168.1.141:/root/porting_x210/rootfs
告诉内核根文件系统在NFS服务器上的路径;
192.168.1.141:NFS服务器的ip地址;
/root/porting_x210/rootfs :根文件系统在NFS服务器上的路径;
(3)ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off
第一个参数为开发板ip地址;
第二个为服务器ip地址;
第三个是网关;
第四个是掩码;
第五个是开发板名字,可以不填;
第六个将ip地址复制给哪个网卡;
第七个关闭动态ip获取;
(4)init=/linuxrc
告诉内核init进程的路径是"/linuxrc";
(5)console=ttySAC2,115200
指定控制台是串口ttySAC2,波特率是115200;
补充:可以指定nfs版本,用"nfsvers=3"

7、验证是否挂载成功

查看内核启动中是否有如下打印:
VFS: Mounted root (nfs filesystem) on device 0:12.

8、可能遇到的问题

8.1、开发板内核未开启NFS

VFS: Cannot open root device "nfs" or unknown-block(0,255)

(1)内核在挂载根文件系统时,不能打开nfs设备,原因是内核不支持nfs启动根文件系统,也就没有"/dev/nfs"这个设备,所以打不开;
(2)解决办法:安装上面的方式去配置内核;

8.2、开发板内核和Ubuntu的nfs版本不匹配

8.2.1、引起问题的原因

unable to get mount port number from server, using default
VFS: Unable to mount root fs via NFS, trying floppy.

(1)在内核启动中出现上面的打印,说明内核已经打开nfs功能,但是与nfs服务器连接时出现错误,根本原因是开发内核支持的协议不匹配;
(2)比如:我使用开发板的内核是2.6内核,默认是支持version-2的nfs;但是我安装的是Ubuntu22,默认是已经不支持version-2版本的nfs,所以开发板nfs挂载Ubuntu时会失败;

8.2.2、解决问题的方法

(1)方法一:在nfs挂载根文件系统时指定使用的nfs版本,指定一个开发板内核和Ubuntu同时支持的nfs版本,比如用nfsvers指定使用3版本。比如:“······root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs,proto=tcp,nfsvers=3······”
(2)方法二:如果是Ubuntu的nfs版本太高,内核的nfs版本太低,则可以配置Ubuntu,使Ubuntu兼容低版本的nfs版本;
(3)修改Ubuntu支持低版本的nfs,参考博客:《嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)》

8.3、查看Ubuntu支持nfs版本

root@daizhixin-virtual-machine:/home/daizhixin# cat /proc/fs/nfsd/versions 
+2 +3 +4 +4.1 +4.2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法) 的相关文章

  • Docker 中的 Airflow:如何将 DAG 添加到 Airflow?

    我想将 DAG 文件添加到 Airflow 它在 Ubuntu 上的 Docker 中运行 我用了以下git 存储库 https github com puckel docker airflow 包含配置和 docker 镜像的链接 当我跑
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 未找到命令“ember”

    看来我搞砸了 ember cli 安装 我已经使用 sudo 安装了 npm 但是在阅读了 npm 上 ember cli 和 sudo 的一些问题后 我按照此处的说明卸载并重新安装https gist github com isaacs
  • NMCLI 设备不可用

    我正在尝试在 ubuntu core 16 04 上配置带有蜂窝接口的新设备 我有 NMCLI 包在上面运行 在添加连接之前 我检查了接口 nmcli dev DEVICE TYPE STATE CONNECTION eth1 ethern
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 在 Ubuntu 中执行 .cgi 文件

    我在 Ubuntu 下运行 Apache PHP 当我运行 cgi 文件时 通过http localhost mycgi cgi 浏览器将显示代码而不是运行它 如何让浏览器执行 CGI 文件而不是显示其内容 将这些行添加到您的 apache
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • 如何在 Ubuntu VirtualBox 中运行 Meteor 应用程序并使用 Windows 主机上的编辑器进行编辑?

    我希望在运行 Ubuntu 的 virtualbox 来宾中运行一个用于开发目的的流星服务器 该项目将位于主机上的一个文件夹内 该文件夹将共享给来宾 该文件夹本身位于 Dropbox 文件夹内 这样我可以在多个虚拟机和工作站之间共享开发 但
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 没有名为“PIL”的模块

    当我尝试时遇到错误 from PIL import Image ImageFilter 在 Python 文件中我收到一条错误消息ModuleNotFoundError No module named PIL 到目前为止 我已经尝试卸载 重
  • Tomcat从Eclipse和startup.sh启动

    奇怪的事情发生了 我可以从 Eclipse 和startup sh 启动Tomcat 从 Eclipse 运行我可以访问 localhost 8080 而从startup sh 运行时我不能 可能是什么问题呢 Ubuntu 11 10 在
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • 更改“/usr/bin/”的所有权:不允许操作

    我刚刚改变了我的所有者 犯了一个巨大的错误 usr bin from root对一个普通人user 每当我尝试执行时 sudo chown root usr bin这给了我 chown changing ownership of usr b
  • Python 应用程序需要 init.d 脚本

    我有一个基于 python 的应用程序 它的工作方式类似于 feed 聚合器 并且需要成为 init d 脚本的一部分 以便我可以使用启动 停止 重新启动选项来控制执行 另外 我希望将 init d 脚本设置为 cron 作业 我在这里有示
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 在 Ubuntu 中与未编译的着色器链接

    我需要加载 glsl 来绘制一些东西 我的环境是Ubuntu 13 04 因此它不存在GLuint InitShader GLuint GLuint 这是我的对象创建 预链接步骤和链接的配置 不幸的是 它仍然出现错误 该错误与未编译的着色器
  • Rstudio 更有意义的窗口标题

    我在 Ubuntu 16 04 下使用 R studio 版本 1 0 143 窗口标题仅显示一个非常无信息的 RStudio 我希望至少有当前选项卡的名称 或者最好是与此选项卡对应的文件的完整路径 在 Windows 下 完整路径似乎出现
  • Eclipse Kepler 在 64 位 ubuntu 上冻结

    几天前我刚刚将 Ubuntu 升级到 14 04 并在此过程中从 32 位切换到 64 位 从那时起 Eclipse 就变得非常不稳定 运行几分钟后 它将开始随机冻结越来越长的时间 特别是在代码完成时 已经必须禁用它 而且在剪切 粘贴时 偶

随机推荐

  • Objective-C 类,数据成员,函数成员,对象,

    一 类 在ios中 类的声明和实现时分离的 也就是说不能写在同一个文件中 声明放在 文件中 实现放在 m 文件中 在实现文件中引入 h文件 import xxx h 声明一个类 import
  • Swagger简介

    欢迎访问本人博客 http wangnan tech 欢迎关注简书 点击打开链接 欢迎关注微信公众号 前言 Swagger 是一款RESTFUL接口的文档在线自动生成 功能测试功能软件 本文简单介绍了在项目中集成swagger的方法和一些常
  • git 报错 eslint --fix found some errors. Please fix them and try committing again.

    这个问题是 git add git commit m 注释 命令输入完成后的报错 eslint报错 解决 git commit no verify m 提交时的注释
  • 发票打印不全不完整的解决方案(Win10)

    发票不管怎么设置 不是二维码缺少一点 就是金额小数点后边的数字显示不全 具体原因是打印机默认纸张上A4 实际发票纸张要比A4宽度宽一点点 原来写过一篇程序方便的打印票据的控制 终于部分解决了 NET Drawing Printing中自定义
  • MySQL-分库分表详解(六)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • python--七夕小游戏

    众所周知 我们python编程语言是可以用来做网站应用的 也可以做客户端应用的 但是客户端不懂python 就会出现很多让人奔溃的事件 但是 我们可以通过python中的第三方模块将我们的脚本转成exe文件运行 1 打开cmd 进入到终端下
  • Material Design【Android-Toolbar,滑动菜单,悬浮按钮,卡片布局,下拉刷新和可折叠式标题栏及案例】

    文章目录 Material Design 界面设计 1 Toolbar 标题栏 2 滑动菜单 3 悬浮按钮和可交互提示 4 卡片布局 5 下拉刷新 6 可折叠式标题栏 Material Design 界面设计 1 Toolbar 标题栏 1
  • Eclipse 历史版本

    url http archive eclipse org eclipse downloads index php url
  • 2023年3月27日--4月22日(ue视频教程,10小时,合计1989小时,剩余8011小时)

    目前 ue视频教程进行到了智 慧 城 市 3 13 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 fps1 8 socket 2 57 Opengl 5 9 G
  • 【C++】队列(queue)的使用

    目录 一 queue 简介 二 queue 构造函数 三 queue 赋值操作 四 queue 数据存取 五 queue 其他操作 六 queue 总结分析 如果这篇文章对你有所帮助 渴望获得你的一个点赞 一 queue 简介 C 中 st
  • 元宇宙通证-二、元宇宙无限游戏的无限正和机遇

    元宇宙无限游戏的无限正和机遇 首先 我们需要为游戏正名 在保守者看了 游戏是互联网时代的 数字毒品 让年轻人沉迷其中无法自拔 在科技进步的推动者看了 游戏并非玩物丧志 而是改变世界的手段 游戏让我们用想象力创造了一个平行宇宙 打开了一个充满
  • 对数据进行删除过程出现invalid character错误

    错误背景 在springmvc mybatis maven项目中 连接oracle对数据进行删除操作报以下错误 DEBUG 2018 12 18 23 10 47 com mchange v2 c3p0 impl DefaultConnec
  • 【HBZ分享】ES的评分score机制的原理

    score类型 基础评分boost 默认2 2 逆向文档频率值 IDF 表示该词再文档中 ES中 出现的次数越多 表示越不重要 评分越低 关键词在文档中出现的频率 TF 表示该词在文档中出现的频率 频率越高表示越重要 评分越高 注意 IDF
  • 震惊,微信小程序可以设置网络字体!真香

    准备工作 获取字体链接 还原设计稿的时候需要用到如下特殊字体 google 的 Montserrat https fonts google com specimen Montserrat 选择这个字体 下载全部字体 将本地的字体文件上传到自
  • 【Kubernetes系列】Workloads(工作负载)

    文章目录 概述 工作负载资源 工作负载生命周期 概述 工作负载是在 Kubernetes 上运行的应用程序 在 Kubernetes 中 无论你的负载是由单个组件还是由多个一同工作的组件构成 你都可以在一组 Pod 中运行它 在 Kuber
  • 手把手教你搭建一台永久运行的个人服务器

    No 1 树莓派是什么 1 用我的话理解 2 市面上的型号 3 树莓派 zero w 4 更多树莓派 No 2 树莓派zero w安装系统 1 准备 2 第一步下载系统镜像 3 使用 Win32DiskImager 往内存卡中写入镜像 4
  • 2023华为OD机试真题【对称美学/递归】

    对称就是最大的美学 现有一道关于对称字符串的美学 已知 第1个字符串 R 第2个字符串 BR 第3个字符串 RBBR 第4个字符串 BRRBRBBR 第5个字符串 RBBRBRRBBRRBRBBR相信你已经发现规律了 没错 就是第i个字符串
  • HTML06:表格标签

    表格 table 会使用 存在即是合理的 表格的现在还是较为常用的一种标签 但不是用来布局 常见处理 显示表格式数据 创建表格 在HTML网页中 要想创建表格 就需要使用表格相关的标签 创建表格的基本语法格式如下 table tr td 单
  • PDU学习笔记--包括长短信的发送

    使用PDU模式 包含UDH头信息分割短信 用户数据头UDH 00表示长短信拆分 贴一个转来的PDU学习笔记 网上收藏的 关于PDU其实并不难 至于PDU是什么 不管它 爱是什么是什么 我们只要知道怎么用就可以了 在网上看了很多关于PDU的帖
  • 用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)

    1 NFS介绍 NFS Network File System 是网络文件系统 和img镜像格式的文件系统一样都是文件系统 区别在于NFS是通过网络挂载 镜像格式的文件系统必须先烧录到硬盘后才能挂载 NFS采用C S架构 客户端通过网络去挂