飛思卡爾的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命令保存,並重啓開發板。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章