嵌入式Linux--NFS挂载rootfs

IP地址分配:
主机:win10 IP:192.168.1.10
开发板:九鼎X210BV3S IP:192.168.1.20
虚拟机:ubuntu16.04-x64 IP:192.168.1.30

本文目标是将开发板的内核通过nfs远程挂载到虚拟机ubuntu上的rootfs,nfs挂载方式主要用于开发阶段调试使用,真正的产品需要烧录rootfs镜像文件。


一、ubuntu配置NFS服务器

参考网址:https://blog.csdn.net/Meteor_s/article/details/83089620


二、配置kernel

配置内核以支持nfs方式挂载rootfs。方法是在ubuntu中进入内核的根文件目录,执行 make menuconfig 命令,进行如下配置:
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  

配置好之后,make编译,最后将生成的zImage镜像文件复制粘贴到tftp的传输目录。tftp要确保可以用才能做接下来的工作,tftp安装方法点这里
我的命令是:cp /root/kernel_x210/arch/arm/boot/zImage /tftpboot/ -f


三、配置uboot启动参数

进入uboot之后,执行命令:

set bootargs root=/dev/nfs nfsroot=192.168.1.30:/root/rootfs_zht/rootfs ip=192.168.1.20:192.168.1.30:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
save # 保存到flash,否则断电后配置丢失

参数解释:

/dev/nfs:对应内核中配置,不需要更改
192.168.1.30:ubuntu的IP
/root/rootfs_zht/rootfs:nfs服务器的共享目录
192.168.1.20:开发板uboot的IP
eth0:以太网卡0,不需要更改
ttySAC2,115200:控制台对应串口2,波特率115200

一开始我以为eth0对应ubuntu的网卡接口,ubuntu16的以太网卡名称为ens33,我就改成了ens33,后来启动的时候根文件系统都挂载不上!后知后觉,uboot是给kernel传参,和ubuntu无关系的,ubuntu是通过nfs和kernel紧密联系的!所以uboot这里eth0不要改就完事了。


四、开发板挂载rootfs

开发板启动后进入uboot,tftp下载内核镜像到内存的30008000地址处,然后bootm启动内核,命令如下:

进入uboot后手动下载:
tftp 30008000 zImage
bootm 30008000

或者设置uboot中的环境变量,实现自动下载:
set bootcmd 'tftp 30008000 zImage; bootm 30008000'

或者制作成镜像烧录到emmc,省得每次都要从ubuntu中获取。

镜像格式用来烧录根文件系统
set bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
set bootcmd ‘movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000’
tftp-nfs方式启动bootargs和bootcmd
set bootargs root=/dev/nfs nfsroot=192.168.1.30:/root/rootfs_zht/rootfs ip=192.168.1.20:192.168.1.30:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
set bootcmd ‘tftp 30008000 zImage; bootm 30008000’

可以看到rootfs已经成功挂载了并且可以运行,提示的一些警告信息属于rootfs的问题,rootfs是需要不断完善的。
这里写图片描述


参考资料:

  • 朱老师物联网大讲堂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值