前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式Linux开发-根文件系统NFS网络挂载

嵌入式Linux开发-根文件系统NFS网络挂载

作者头像
DS小龙哥
发布2022-04-08 08:53:34
4.1K0
发布2022-04-08 08:53:34
举报
文章被收录于专栏:嵌入式项目开发

1. 前言

根文件系统是Linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox来制作根文件系统。这篇文章介绍根文件系统制作成功后,如何让内核找到文件系统,并完成挂载,进入到系统命令行终端。

根文件系统支持从网络挂载和本地挂载两种方式:

(1)如果是采用网络挂载就将路径设置为/dev/nfs,NFS是Linux下常用的网络文件系统,这种方式挂载一般是在系统开发阶段,方便修改调试代码,也就是将根文件系统放在PC机上,嵌入式开发板通过网络到PC机进行访问。

(2)本地挂载就是让内核从SD卡、EMMC、光盘等设备里加载根文件系统,设备路径设置为/dev/sda、/dev/ram等等。具体设备节点名称是什么就填什么。本地挂载一般用在产品发布的时候,当整个系统开发完毕,就将PC机上的完整目录拷贝到本地存储设备里,让内核直接从本地加载,这样开启启动的速度会快很多,文件读写也快很多,不在经过网络传输。本地挂载不方便调试代码,一般开发阶段还是NFS方式比较方便。

上面说的路径设置这些配置是在uboot里设置,uboot有一个环境变量专门用于给内核传参,当内核启动之后,会根据uboot传递的参数完成执行。

当前采用的开发板是友善之臂的Tiny4412,内核、uboot、交叉编译器都采用官方光盘自带的文件。

如果设置内核为NFS网络挂载,uboot的环境变量设置格式如下:

代码语言:javascript
复制
TINY4412 # setenv bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
TINY4412 # saveenv
TINY4412 # reset

2. NFS网络方式挂载

前提是先把根文件系统制作好才能继续这一步。当前的宿主机采用redhat6.3,这个系统比较老,但是功能是很齐全的,运行起来很流畅。要进行NFS网络挂载,需要先把PC机的网络与开发板的网络设置好,保证在同一个局域网内。当前的redhat6.3系统是跑在VM虚拟机里,接下来就对网络进行配置。

开发板NFS网络挂载的思路:

  1. PC机开启NFS服务器,配置NFS共享的路径: 将rootfs共享出来.
  2. 开发板当做NFS客户端,去挂载PC机共享的目录,完成文件系统的访问

(1)配置虚拟机网络

(2)配置PC机NFS服务器

代码语言:javascript
复制
[wbyq@wbyq rootfs]$ sudo vim /etc/exports
/home/wbyq/work/rootfs *(insecure,rw,no_root_squash,sync)

编写个脚本方便启动NFS服务器: 可以放在用户目录下 比如: nfs_restart.sh 运用脚本要使用管理员权限,脚本改权限为可执行

代码语言:javascript
复制
service nfs restart   #重启 NFS 服务器
service iptables stop #关闭防火墙
ifconfig eth0 192.168.10.11  #设置IP地址

查看系统网卡名称: ifconfig

(3)运行脚本启动NFS服务器

代码语言:javascript
复制
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh 
[sudo] password for wbyq: 
关闭 NFS 守护进程:                                        [失败]
关闭 NFS mountd:                                          [失败]
关闭 NFS quotas:                                          [失败]
关闭 NFS 服务:                                            [确定]
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS mountd:                                          [确定]
正在启动 RPC idmapd:                                      [确定]
正在启动 RPC idmapd:                                      [确定]
启动 NFS 守护进程:                                        [确定]
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh 
关闭 NFS 守护进程:                                        [确定]
关闭 NFS mountd:                                          [确定]
关闭 NFS quotas:                                          [确定]
关闭 NFS 服务:                                            [确定]
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS mountd:                                          [确定]
正在启动 RPC idmapd:                                      [确定]
正在启动 RPC idmapd:                                      [确定]
启动 NFS 守护进程:                                        [确定]
[wbyq@wbyq ~]$ 

(4)设置UBOOT的环境变量

代码语言:javascript
复制
进入到uboot的命令行,设置环境变量。
set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702

set bootargs root=/dev/nfs nfsroot=<服务器地址>:<NFS共享路径> ip=<开发板IP>:<服务器地址>:<网关>:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702

执行示例:
TINY4412 # set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
TINY4412 # save
TINY4412 # reset

重启之后开发板正常就会进入到Linux命令行:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. NFS网络方式挂载
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档