文件系统 | 如何使用网络根文件系统启动开发板?

来源:互联网 发布:java安卓4.4.4模拟器 编辑:程序博客网 时间:2024/05/21 12:14
1.前期准备

1.1 开发板通过串口连接至Windows主机

1.2 在Windows主机上开启虚拟机Ubuntu主机

1.3 已制作好的网络根文件系统为:Ubuntu主机的 /work/nfs_root/ 这个目录

1.4 通过 $ ifconfig  命令确定Ubuntu主机IP为192.168.0.7


2.Ubuntu主机上的操作

2.1 查看是否安装nfs服务器

$ sudo apt-get install nfs-kernel-server



我们看到“nfs-kernel-server is already the newest version. ”,说明已安装

2.2 修改服务器的配置文件

服务器的配置是放在/etc/exports这个文件下的,编辑它即可

$ sudo vi /etc/exports

加上如下一行,把我们想作为根文件系统的目录/work/nfs_root/放进去,并作配置,然后保存退出:

/work/nfs_root *(rw,sync,no_root_squash)



2.3 重启nfs服务器

$ sudo /etc/init.d/nfs-kernel-server restart


可以看到,exportfs: /etc/exports……/work/nfs_root,说明/work/nfs_root/这个目录已经作为exportfs(输出文件系统)了,当然我们也可以通过这个命令来查看

$ showmount -e

可以看到一个export list,下面就有“/work/nfs_root”这个目录


3.开发板上的操作

3.1 启动开发板进入Uboot

3.2 查看配置信息

(这一步是为了后面能重新通过设置uboot参数来重新实现从flash启动)

OpenJTAG> print


记录下bootargs

“bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0”

3.3 设置bootargs,并保存

OpenJTAG> set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.7:/work/nfs_root

ip=192.168.0.17:192.168.0.7:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

OpenJTAG> save

3.4 重启开发板

这时候开发板就以网络根文件系统来启动了,也就是说,在Ubuntu主机上的/work/nfs_root/这个目录现在成了开发板的根目录。

让我们来验证一下:

Ubuntu主机的/work/nfs_root/,建立一个名为“666haha”的文件

$ cd /work/nfs_root/

$ touch 666haha

然后我们在串口界面下查看开发板的根目录,看一下这个文件是否存在

# ls 666haha -l


可见它在开发板的根目录下也是存在的

现在,通过串口我们在根目录下把它删除

# rm 666haha

然后,回到Ubuntu主机上的/work/nfs_root/目录查看一下是否也是删除掉了

$ ls /work/nfs_root/666haha -l

我们可以看到如下信息:

ls: cannot access 666haha: No such file or directory

即这个文件已经不见了

由此可见,我们在开发板的根目录下的操作,和我们在Ubuntu主机的/work/nfs_root/目录下的操作是同步的


说明1. bootargs



说明2. 开发板的Linux IP和Uboot IP

我们在设置bootargs的时候用的是Linux系统下的IP,而非Uboot下的"ipaddr"!两者有何区别?

在3.2里,我们在Uboot输入print命令后可看到如下一行:

ipaddr=192.168.0.16

这个就是Uboot IP

而Linux IP和Uboot IP是两个独立的IP,可以不一样(当然也可以一样)。那么它是怎么来的?

其实是我们在构建根文件系统的时候设置好的,它放在Ubuntu主机的/work/nfs_root/etc/init.d/rcS这个文件里

$ cd work/nfs_root/etc/init.d

$ vi rcS

查看这个文件(它其实就是一个shell脚本),有如下一行:

ifconfig eth0 192.168.0.17

当开发板从uboot跳入kernel,开始进行初始化的时候,就会调用这个脚本,这时候开发板的Linux IP就被设定好了


问题:如何改为重新由NandFlash启动根目录?

还记得在3.2里面记录的信息吗?

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

稍微修改一下:

set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

然后,启动开发板进入Uboot,输入上面这条命令,重新设定bootargs即可:

OpenJTAG> set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

OpenJTAG> save

再启动开发板,这时候开发板使用的就是NandFlash上面的根文件系统了


如果我们想再次使用NFS启动根文件系统,就再改一下bootargs就可以了

OpenJTAG> set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.7:/work/nfs_root/first_fs ip=192.168.0.17:192.168.0.7:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
OpenJTAG> save



原创粉丝点击