飞思卡尔的i.mx6dl开发板上实现nfs网络文件系统挂载操作指南

问题描述:在MCIMX6DL_SDP上实现网络文件挂载,要求从emmc中启动ubootkernel,从网络上挂载根文件系统。

操作平台:

host Ubuntu14.04LTS

boardMCIMX6DL_SDP

在开始下列操作之前,请确保你已在host上正确安装了NFS服务器,并启动了NFS服务,以及你所编译的kernel是支持NFS的,同时要注意你的主机应该能够ping通你的开发板!除此之外,确保你的内核的ip地址与你的uboot中设置的ip地址一致!

1、添加uboot环境变量:

设置板子ip地址:

setenvipaddr 192.168.xx.xx

设置nfs的服务器地址:

setenvserverip 192.168.xx.xx

设置子网掩码:

setenvnetmask 255.255.0.0

设置网卡设备:

setenvnetdev eth0

设置nfsroot

setenvnfsroot /opt/rootfs

uboot启动时相关命令bootcmd的分析:(为了方便查看,我已将命令进行了缩进)

boot_fdt=try
ip_dyn=yes
bootcmd=mmc dev 2;
	if mmc rescan;
	then
		if	run loadbootscript;
		then
			run bootscript;
		elseif 
			run loadimage;
			then
				run mmcboot;
		else
			run netboot;
		      fi;
		fi;
	else
		run netboot;
	fi

bootcmd的分析:

uboot启动后,首先会去执行bootcmd的命令。通过对uboot启动时打印的信息结合boot_cmd命令进行判断,可以知道uboot启动过程中所执行的bootcmd的顺序为:

mmcdev 2 --> mmc rescan --> runloadbootscript -->run loadimage --> run mmcboot

在这个过程中:

mmc dev 2 //设置mmc设备号及当前分区

mmc rescan //重新搜索mmc设备

run loadbootscriptfatloadmmc 2:1 0x12000000 boot.scr //boot.scr下载到0x12000000

run loadimagefatloadmmc 2:1 0x12000000 zImage //mmc中的zImage下载到0x12000000地址中

run mmcboot //运行从mmc中启动的命令


mmcboot命令如下:

mmcargs=setenvbootargs console=${console},${baudrate} ${smp} root=${mmcroot}
loadfdt=fatloadmmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
mmcboot=echoBooting from mmc ...; run mmcargs;
	if test ${boot_fdt} = yes || test ${boot_fdt} = try;
	then
		if run loadfdt;
		then
			bootz0x12000000 - 0x18000000;
		elseif test ${boot_fdt} = try;
		then
			bootz;
		else
			echo WARN: Cannot load the DT;
		    fi;
	     fi;
	else
		bootz;
	fi;

通过对mmcboot命令进行分析可知,该命令的执行顺序为:

echoBooting form mmc... --> run mmcargs --> run loadfdt -->bootz 0x12000000 – 0x18000000

在这个过程中,重要的是mmcargs,loadfdt以及bootz这三个地方

run mmcargs //设置启动参数,包括控制台,波特率,以及根文件系统的启动方式(mmc中启动)

run loadfdt //imx6dl-sabresd.dtb加载到地址0x18000000

bootz 0x12000000-0x18000000 //启动内核


完成了对上述两个变量的分析,挂载nfs网络文件系统的任务就完成了一半了。借下来只要按照类似的格式,添加对网络文件系统的支持,并在bootcmd命令中对其进行实现即可。


设置挂载网络文件系统:

setenvbootcmd_nfs 'setenv bootargs console=ttymxc0,115200 root=/dev/nfsip=${ipaddr} nfsroot=${serverip}:${nfsroot}'

修改bootcmd命令:

setenvbootcmd 'mmc dev 2;run loadimage;run bootcmd_nfs;run loadfdt;bootz0x12000000-0x1800000000' 

添加完成后使用saveenv命令保存,并重启开发板。


你可能感兴趣的:(嵌入式,工具使用)