飞思卡尔的i.mx6dl开发板上实现nfs网络文件系统挂载操作指南
2016-04-18 20:03
656 查看
问题描述:在MCIMX6DL_SDP上实现网络文件挂载,要求从emmc中启动uboot和kernel,从网络上挂载根文件系统。
操作平台:
host
:Ubuntu14.04LTS
board:MCIMX6DL_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的分析:(为了方便查看,我已将命令进行了缩进)
对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 loadbootscript(fatloadmmc 2:1 0x12000000 boot.scr
) //将boot.scr下载到0x12000000
run loadimage(fatloadmmc 2:1 0x12000000 zImage)
//将mmc中的zImage下载到0x12000000地址中
run mmcboot //运行从mmc中启动的命令
mmcboot命令如下:
通过对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命令保存,并重启开发板。
操作平台:
host
:Ubuntu14.04LTS
board:MCIMX6DL_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 loadbootscript(fatloadmmc 2:1 0x12000000 boot.scr
) //将boot.scr下载到0x12000000
run loadimage(fatloadmmc 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命令保存,并重启开发板。
相关文章推荐
- Httpclient
- GridView(网络视图)的基本使用
- httpclient + AsyncTask 请求数据 || httpclient + handler 请求数据
- OkHttp深入学习(三)——Cache
- HttpURLConnection 请求网络 || HttpUtils 请求网络
- 论文阅读:End-To-End Memory Networks
- okhttp教程——起步篇
- 论文阅读:Memory Networks
- 【接口测试】接口自动化测试
- 网络编辑器插件ckeditor+ckfinder配置
- AFHTTPSessionManager 上传文件
- iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,
- Android开发之OkHttp的使用
- iOS网络编程3--swift中使用AFNetworking库
- AFHTTPSessionManager文件下载
- 七层网络模型(OSI)
- OpenWRT使用SNMP监测网络状态
- http://blog.sina.com.cn/s/blog_62e1faba010147k4.html
- Android 获取本机WIFI及3G网络IP
- android6.0SDK 删除HttpClient的相关类的解决方法