每修改一次文件系统,就要烧写一次。那么有没有一种方法,不用烧写呢?
用网络文件系统NFS,文件系统是放在服务器上的,内核启动后,识别出服务器上的这个目录,把它当作根文件系统,
自然就不需要烧写了。
打开开发板,ifconfig 查看一下
ifconfig eth0 up
ifconfig eth0 192.168.1.20(只要与服务器处于同一网段就可以)
然后ping一下,能否ping通。假设ping通的话,进行后续的操作:
挂接NFS需要满足的条件:
服务器允许那个目录被别人挂接(试试自己能不能被自己挂接:sudo mount -t nfs 192.168.1.5:/work/nfs_root/first_fs /mnt);
NFS服务,在etc/exports这个配置文件中定义这个目录就可以了。
单板去挂接
mkdir /mnt
mount -t nfs -o nolock 192.168.1.5:/work/nfs_root/first_fs /mnt
此时在单板上mnt中看到的东西与在服务器中这个目录/work/nfs_root/first_fs看到的东西是一样的。
此时在服务器/work/nfs_root/first_fs中创建一个test.txt文件,在单板上就会看见该文件。这种挂接方法对应着a
a、手工挂接:从flash上启动根文件系统,再用命令挂接NFS。该方法比较繁琐,每次启动后,都需要重新挂接
b、直接从NFS启动,需要修改命令行参数。
如何修改:
NFS启动参数需要设置什么东西?
1、服务器ip,目录
2、设自己的ip
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.5:/work/nfs_root/first_fs ip=192.168.1.17:192.168.1.5:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
参数的具体含义在linux-2.6.22.6Documentation
fsroot.txt中。
然后save,重新启动单板
现在来进行测试一下:
在服务器中编写,hello.c程序
#include<stdio.h>
int main()
{
printf("hello world
");
return 0;
}
在服务器中编译,生成hello。然后再开发板上可以直接运行。
# ls
bin etc hello.c linuxrc sbin test.txt
dev hello lib proc sys usr
# ./hello
hello world