利用NFS服务挂载NFS根文件系统

 

嵌入式Linux根文件系统,简单地说,根文件系统就是一种目录结构

注意根文件系统和普通的文件系统的区别。

 

常见的Linux根文件系统有:

(1)NFS(网络根文件系统),主要用于 产品调试阶段 。

(2)YAFFS,主要用于产品的发布阶段。大量生产直接写入NandFlash。

 

搭建NFS根文件系统

这个过程包括

1、设置NFS共享目录  

2、启动NFS服务

3、重新设置开发板的环境变量

4、挂载根文件系统

 

具体步骤如下:

1、解压根文件系统源码包到 /home/lwb/目录下

#tar  xvzf  root_qtopia.tar.gz  /home/lwb

解压后则在/home/lwb/目录下生成了一个root_qtopia目录

2、cd root_qtopia 进入该目录

3、pwd 显示当前目录  /home/lwb/qtopia 这个目录下面要用到

4、vim /etc/exports    //编辑导出目录

   在exports文件末尾添加:

/home/lwb/root_qtopia  *(rw,sync,no_root_squash)  //导出/home/lwb/root_qtopia目录  可读可写属性  同步  root权限挂载的。

   保存退出

5、使生效: #exportfs ra

6、#exportfs v 查看是否真的已导出

   显示:/home/lwb/root_qtopia  <world>(rw,wdelay,no_root_squash,anonuid=65534,anongid=65534)  显然导出成功

   导出成功 、服务器设置好啦。

7、重启NFS服务

#/etc/init.d/nfs start //启动nfs服务

 

 

 

 

开始挂载NFS(网络根文件系统):

1、重新设置环境变量:

[u-boot@SMDK2440A]# setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.108:/home/lwb/root_qtopia ip=192.168.1.226:192.168.1.108:192.168.1.108:255.255.255.0:SMDK2440A.arm9.net:eth0:off

 

2、保存环境变量:

[u-boot@SMDK2440A]# saveenv   

//执行保存环境变量结果如下:

Saving Environment to NAND…

Erasing Nand…

Erasing at 0x4000000000002 —   0% complete.

Writing to Nand… done

 

3、查看环境变量:

[u-boot@SMDK2440A]# printenv

bootcmd=nand read 0x30008000 60000 500000;bootm 0x30008000

bootdelay=1

baudrate=115200

ethaddr=08:08:11:18:12:27

netmask=255.255.255.0

embedclub=bmp d 70000

 stdin=serial

stdout=serial

stderr=serial

lcdtype=w

ethact=dm9000

serverip=192.168.1.108

ipaddr=192.168.1.266

gatewayip=192.168.1.1

bootargs=console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.108:/home/lwb/root_qtopia ip=192.168.1.226:192.168.1.108:192.168.1.108:255.255.255.0:SMDK2440A.arm9.net:eth0:off

Environment size: 459/131068 bytes

 

1、挂在文件系统

[u-boot@SMDK2440A]#boot

结果如下:

[u-boot@SMDK2440A]# boot

 

NAND read: device 0 offset 0x60000, size 0x500000

 5242880 bytes read: OK

## Booting kernel from Legacy Image at 30008000 …

   Image Name:   Linux kernel Image by embedclub

   Created:      2013-05-27   8:52:50 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    2286764 Bytes =  2.2 MB

   Load Address: 30008000

   Entry Point:  30008040

   Verifying Checksum … OK

   XIP Kernel Image … OK

OK

 

Starting kernel …

 

Uncompressing Linux………………………………………………………………………………………………………………………………….. done, booting the kernel.

Linux version 2.6.32.2-FriendlyARM (root@localhost.localdomain) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #1 Sun May 19 10:37:56 CST 2013

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

 

此处省略很多………………………………

 

Looking up port of RPC 100003/2 on 192.168.1.108

eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

Looking up port of RPC 100005/1 on 192.168.1.108

nfs: server 192.168.1.108 not responding, still trying

nfs: server 192.168.1.108 OK

VFS: Mounted root (nfs filesystem) on device 0:11.

Freeing init memory: 160K

[06/Jul/2005:01:37:10 +0000] boa: server version Boa/0.94.13

[06/Jul/2005:01:37:10 +0000] boa: server built Mar 26 2009 at 15:28:42.

[06/Jul/2005:01:37:10 +0000] boa: starting server pid=680, port 80

                       

Try to bring eth0 interface up……NFS root …Done

 

Please press Enter to activate this console.

 

按回车键:出现如下结果:

Please press Enter to activate this console.

[root@FriendlyARM /]# ls

bin      etc      lib      mnt      proc     sbin     tmp      var

dev      home     linuxrc  opt      root     sys      usr      www

[root@FriendlyARM /]#

 

成功,哈哈!开发板和PC上的Linux是同步的。

测试一下:在PC上的/home/lwb/root_qtopia/目录下:#touch hello

在SecureCRT 上#ls一下 是会出现 hello目录的。

 

来个多线程的多生产者、多消费者的程序在开发板上运行运行,哈哈

把已写好的程序pc3.c通过arm-linux-gcc pc3.c o pc3.o

把pc3.o 拷贝到/home/lwb/root_qtopia/bin目录下

在secureCRT下的/bin目录下执行 ./pc3.o 成功

 

各种兴奋,哈哈!因为之前有过:

(1)        和开发板连接的网线的另一端没和PC连接,但我一直以为是连啦!

(2)        连好网线后,还是没挂接上NFS根文件系统。在PC上的Linux重启一下NFS服务之后一切OK,哈哈!

 

 

 

    原文作者:gdliweibing
    原文地址: https://blog.csdn.net/gdliweibing/article/details/8989783
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞