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

转载地址:https://blog.csdn.net/Phoenix500526/article/details/51182164

问题描述:在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的分析:(为了方便查看,我已将命令进行了缩进)

[plain]  view plain  copy
  1. boot_fdt=try  
  2. ip_dyn=yes  
  3. bootcmd=mmc dev 2;  
  4.     if mmc rescan;  
  5.     then  
  6.         if  run loadbootscript;  
  7.         then  
  8.             run bootscript;  
  9.         elseif   
  10.             run loadimage;  
  11.             then  
  12.                 run mmcboot;  
  13.         else  
  14.             run netboot;  
  15.               fi;  
  16.         fi;  
  17.     else  
  18.         run netboot;  
  19.     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命令如下:

[plain]  view plain  copy
  1. mmcargs=setenvbootargs console=${console},${baudrate} ${smp} root=${mmcroot}  
  2. loadfdt=fatloadmmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}  
  3. mmcboot=echoBooting from mmc ...; run mmcargs;  
  4.     if test ${boot_fdt} = yes || test ${boot_fdt} = try;  
  5.     then  
  6.         if run loadfdt;  
  7.         then  
  8.             bootz0x12000000 - 0x18000000;  
  9.         elseif test ${boot_fdt} = try;  
  10.         then  
  11.             bootz;  
  12.         else  
  13.             echo WARN: Cannot load the DT;  
  14.             fi;  
  15.          fi;  
  16.     else  
  17.         bootz;  
  18.     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命令保存,并重启开发板。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值