嵌入式uboot,内核启动通过nfs挂载根文件系统
概述
嵌入式移植学习第二个内容,通过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 aaa@qq.com ip=192.168.10.199 root=/dev/nfs nfsroot=192.168.10.197:/home/sky/test/nfs_test rw'
console=ttyS2,115200n8 //表示设置虚拟终端串口,调试串口。
aaa@qq.com //表时指定内存大小
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)保存配置,重新编译内核,大功告成,哈哈哈。。。。
上一篇: Armv8架构虚拟化
下一篇: linux开机启动流程