ubuntu1204 nfs搭建

来源:互联网 发布:剑桥大学三一学院 知乎 编辑:程序博客网 时间:2024/06/10 18:42
开发环境
host:
   ubuntu 12.04
   host ip addr--192.168.1.100
develop board:
   mars board i.mx6
   ip addr--192.168.1.102

一.安装nfs
1.服务器端:sudo apt-get install portmap
2.服务器端:sudo apt-get install nfs-kernel-server
3.客户端:sudo apt-get install nfs-common
4.创建nfs服务器工作目录
$sudo mkdir /home/nfsroot

5.服务器端配置:sudo gedit /etc/exports
添加:/home/nfsroot 192.168.1.*(rw,sync,no_root_squash)
  (共享目录)         (允许IP)  
(rw权限是可擦写,还有ro只读,sync代表数据会同步写入到内存与硬盘中,
async则代表数据会先暂存于内存当中,而非直接写入硬盘,开放客户端使
用root身份来操作服务器的文件系统,那么开no_root_squash才行,
root_squash不允许)
6.启动服务器端:sudo /etc/init.d/portmap restart
7.启动服务器端:sudo /etc/init.d/nfs-kernel-server restart
8.host挂接开发板文件系统到nfs服务器目录
解压rootfs.ext2.gz
$ gunzip rootfs.ext2.gz
挂接解压出的rootfs.ext2到nfs服务器目录
$ mount -o loop -t ext2 rootfs.ext2 /home/nfsroot

二.tftp及其相关设置
1.安装tftp
$sudo apt-get install tftp-hpa tftpd-hpa
2.创建tftp服务器目录
$sudo mkdir /home/tools/tftpboot
递归设置nfs和tftp目录为777权限
$cd /home/tools/rootfs
$sudo chmode -R 777 *
3.配置tftp服务器
$sudo gedit /etc/default/tftpd-hpa
修改如下:
TFTP_DIRECTORY="/home/tools/tftpboot"
TFTP_OPTIONS="-l -c -s"
TFTP_DIRECTORY为tftp服务器目录。
TFTP_OPTIONS为访问权限等选项。
4.重启tftp服务器
sudo service tftpd-hpa restart
5.拷贝编译好的develop board linux uImage拷贝到tftp服务器主目录
这里tftp服务器主目录为/home/tools/tftpboot

三.修改u-boot源文件且编译烧录:
当你用路由器将开发板和host相连时(甚至用交叉线直接和host相连时),必须修正u-boot中的dhcp 路由解析问题
(或直接把路由中的dhcp禁止掉,这个我没试)
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 65f32bc..9b1e650 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -221,6 +221,7 @@  static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,

     case 3:     load_addr = simple_strtoul(argv[1], NULL, 16);
          copy_filename (BootFile, argv[2], sizeof(BootFile));
+          setenv ("bootfile", BootFile);

          break;

diff --git a/net/bootp.c b/net/bootp.c
index 9e32476..df9f5eb 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -116,7 +116,8 @@  static void BootpCopyNetParams(Bootp_t *bp)
     memcpy (NetServerEther, ((Ethernet_t *)NetRxPacket)->et_src, 6);
#endif
     if (strlen(bp->bp_file) > 0)
-          copy_filename (BootFile, bp->bp_file, sizeof(BootFile));
+          if (!getenv("bootfile"))
+               copy_filename (BootFile, bp->bp_file, sizeof(BootFile));

     debug("Bootfile: %s\n", BootFile);

四.重启开发板,进入u-boot命令行
先ping host
u-boot>ping 192.168.1.100
如果不通,检查网络连接,且不要用1G的网关(或路由),也不要将开发板和主机的千兆网卡通过交叉线直接相连。
u-boot对1G网络无法支持.

五.设置环境变量
u-boot>setenv serverip 192.168.1.100
u-boot>setenv nfsroot /home/yanghua/nfsroot

六.再次检查host的tftp服务是否启动---重新启动之
$sudo service tftpd-hpa restart

七.tftp download uImage:
u-boot>dhcp 192.168.1.100:uImage
这一步可以省略,直接到运行第八步

八.以nfs为根文件系统启动内核:
u-boot>run bootcmd_net
等开发板正常启动进入linux后,可以在host的nfsroot中新建文件,可以看到开发板相应的目录也发生改变

----检查nfs
等开发板正常启动进入linux后,检查其文件系统:
$mkdir /mnt/nfs
nfs挂接到/mnt/nfs目录下:
$mount -t nfs -o nolock 192.168.1.100:/home/nfsroot /mnt/nfs
mount -t nfs -o nolock 192.168.1.100:/home/tools/rootfs /mnt/nfs
注意要有-o nolock 选项,否则失败

进入nfs目录,可以看到主机上的文件(注意,必须重新进入该目录)

0 0
原创粉丝点击