嵌入式uboot,内核启动通过nfs挂载根文件系统

来源:互联网 发布:php 字符串替换 编辑:程序博客网 时间:2024/05/28 23:11

概述
嵌入式移植学习第二个内容,通过nfs挂载根文件系统。也是自己第一次做,也遇到了一些问题,但最后还是都解决了。在此记录一下整个流程,也希望能够给别的初学者一个参考。
系统环境
PC端 linux :ubuntu 14.04
嵌入式端 君正: halley2开发板(x1000)
总体思路
pc端搭建nfs服务———->开发板端uboot配置内核加载根文件系统方式为nfs挂载方式———->完成挂载,测试
具体步骤流程

1,pc端搭建nfs服务
(1)安装及配置nfs服务器

//安装nfs服务器$ sudo apt-get install nfs-kernel-server//配置nfs服务,打开/etc/expors 文件$ sudo vim /etc/exports//添加如下内容,/home/sky/test/nfs_test是我设置的挂载目录,可能你是/home/user(你用户名)/***(自己创建的一个目录)。保存退出,如下图所示/home/sky/test/nfs_test *(rw,sync,insecure,no_root_squash,no_subtree_check)//重启该服务$ sudo /etc/init.d/nfs-kernel-server restart

这里写图片描述

(2)测试nfs服务搭建是否成功

//挂载我们设置的目录到/mnt文件夹下,若mnt文件夹内容与nfs_test内容相同表示搭建成功$ sudo mount 127.0.0.1:/home/sky/test/nfs_test /mnt 

2,uboot设置内核加载文件系统方式为nfs方式
(1)uboot设置
进入uboot命令行界面,设置bootargs

$ set bootargs 'console=ttyS2,115200n8 mem=31M@0x0 ip=192.168.10.199 root=/dev/nfs nfsroot=192.168.10.197:/home/sky/test/nfs_test rw'

console=ttyS2,115200n8 //表示设置虚拟终端串口,调试串口。
mem=31M@0x0 //表时指定内存大小
ip=192.168.10.199 //设置设备ip
root=/dev/nfs //表示指定文件系统位置
nfsroot=192.168.10.197:/home/sky/test/nfs_test rw //表示nfs文件系统挂载位置
(2)保存和查看配置

//保存配置$ saveenv//查看配置,内容如下图所示$ pri

这里写图片描述

3,完成挂载及测试
(1)pc端将做好的文件系统复制到我们设置的挂载目录,用于开发板挂载。如下图所示:
这里写图片描述
(2)重启开发板,内核打印如下信息
这里写图片描述
进入到文件系统,如下图所示,可以看到和我们pc端完全一致
这里写图片描述
(3)测试挂载
在pc端挂载文件夹下touch一个test文件,我们可以在开发板马上看到也有一个tese文件。如图所示:
pc端
这里写图片描述
开发板
这里写图片描述
4,遇到的问题及解决方法
VFS: Cannot open root device “nfs” or unknown-block(0,255): error -6
在/dev目录下面没有nfs,打不开。具体错误如下所示:
这里写图片描述
通过资料知道,原来我们内核镜像编译时,没有将nfs挂载文件系统功能编译进去,内核根本不支持nfs操作,所以造成如上错误。
遇到问题就要解决啊,我们就编译一个有支持nfs挂载文件系统的内核镜像。我们通过make menuconfig 配置使其支持此功能。
(1)进入文件系统配置
这里写图片描述
(2)启动网络文件系统功能
这里写图片描述
(3)开启nfs功能
这里写图片描述
(4)网络配置,启动Networking support
这里写图片描述
(5)进入网络支持,里面的Networking options(网络配置选项)
这里写图片描述
(6)保存配置,重新编译内核,大功告成,哈哈哈。。。。

阅读全文
1 0