nfs挂载
NFS(network file system)
NFS是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。
也就是说NFS服务端提供共享目录文件挂载在客户端某一个目录文件下,以供客户端去访问和使用
思路:
在虚拟机下创建根文件系统,安装并开启NFS的服务端,提供根文件系统给外界访问,JZ2440在启动时配置相关参数,将虚拟机下的根文件系统挂载到JZ2440的根文件系统下,这样在JZ2440就可以直接使用虚拟机下的根文件系统去启动了
前提:
虚拟机安装了gcc和交叉编译工具arm-linux-gcc,arm-linux-gcc已加入环境变量,已添加make menuconfig用到的相关软件及一些32位的函数库,
库文件:
linux启动所需的文件有etc/inittab , etc/init.d/rcS , etc/fstab这三个文件
内核引导完成后会启动第一个进程init,所有进程的父进程,该进程的源码文件也是由Busybox工具生成的,initi进程会去读取etc/inittab文件的每一行语句作为行为指针,其中一行行为是去执行etcinit.d/rcS脚本文件,而rcS中有一行脚本命令(mount -a)是去挂载etc/fstab文件中指定的所有文件系统,至此,将三个文件都联系起来
创建nfs根文件
1.创建mynfs文件夹,进入mynfs,在下方创建目录
2. 在dev目录下创建两个基本的设备文件console(控制台)和null(黑洞文件)
3. 在etc目录下创建fstab,init.d/rcS和inittab文件,并编辑好内容
3.1 fstab文件内容:
3.2 inittab文件内容:
3.3 init.d/rcS文件内容:
init.d/rcS文件需要加上“x”可执行属性.
4. 使用busybox创建bin目录下的命令和生成init进程。
4.1 解压busybox源码包,进入其目录,修改Makefile,指定ARCH和CROSS_COMPILE
找到并修改这两个参数
原来的代码:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改后的代码:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
通过厂家给定的默认文件改为默认配置文件,在用菜单配置界面修改busybox的默认配置
4.2 配置busybox,
确保Shells中选中ash,
Init utilities中选中init;
BusyBox Settings/build option,使用动态库,
BusyBox Settings/installation option/Don't use /usr,确定生成的文件不在use/usr下
miscellaneous utilities中,取消taskset,
4.3 保存生成.config,重新编译和安装:
编译Busybox
-j表示多线程编译,会自动向下兼容
安装Busybox中的工具到根文件系统
安装完毕后,在/home/a1/jz2440/rootfs/mynfs下会看到linuxrc文件,在/home/a1/jz2440/rootfs/mynfs/bin下会看到很多命令文件。
5. copy 必须的库文件到mynfs/lib中。
-d or -a参数的意思是包括软链接文件也copy过来。
6. 主机上安装和配置nfs服务
配置:
6.1 修改 /etc/portmap文件,把最后一行的options前加上“#”注释掉 (注:ubuntu16.04不需要)
6.2修改 /etc/exports文件,最后一行加上:
意思是 将/home/a1/jz2440/rootfs/mynfs目录下的所有内容共享出去
运行
更新一下。
6.3 运行NFS:
需要启动portmap、 nfs-kernel-server:
6.4 本机测试
将刚刚创建的根文件系统挂载到本机的/mnt/nfs目录下,先在/mnt目录下创建nfs目录(需要sudo权限)
然后挂载
查看挂载的主机
查看当前的文件系统
客户端卸载从服务器上挂载在本地的目录文件
7. 开发板挂载nfs根文件系统
进入uboot,修改原来的本地根文件启动参数
"bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 mem=64M"
为nfs启动,然后保存参数
如果NFS的服务端的版本较高(版本较高的ubuntu),则要使用V3版本的协议,例如20.04版本的ubuntu的nfs协议是v3版本,且默认TCP和UDP都是打开的,可以使用一下启动参数:
而新版本22.04ubuntu的nfs协议默认只使用的tcp的协议,则要再加上tcp的传输模式
---------------------------------------------------------------------------------------------------------------------------------
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.30:/work/nfs_root/temp/fs_mini_mdev
ip=192.168.1.20:192.168.1.30:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
/*
*nfsroot对应你pc机的IP和你解压的文件系统的路径,请酌情修改
* ip指定你的开发板的IP、服务器的ip、网关、掩码,掩码后面应该是域名(可省略)
* 再往后的,网卡eth0,不自动启动off
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」