使用nfs挂载根文件系统


里的大部分内容参考了网上的一篇文章,原作者不详,当然也有我遇到的问题。

1、启动参数(针对uboot)

setenv bootargs noinitrd init=/linuxrc console=ttySAC0 root=/dev/nfs nfsroot=192.168.10.124:/home/408/nfs/rootfs ip=192.168.10.125:192.168.10.124:192.168.10.1:255.255.255.0::eth0:off

其中:

root=/dev/nfs并非真的设备,而是一个告诉内核要通过网络取得根文件系统。

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

    参数nfsroot这个参数告诉内核以哪一台机器的哪个目录以及哪个网络文件系统选项作为根文件系统使用。
    <server-ip>  指定网络文件系统服务端的IP地址。如果没有指定定,则使用nfsaddrs变量指定的值。 
    <root-dir>    服务端上要作为根文件系统要挂载的目录名称。
    <nfs-options>  标准的网络文件系统选项,所有选项都以逗号分开。

nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>

    参数nfsaddrs设定网络通讯所需的各种网络接口地址。
    如果没有给定这个参数,则内核核会试著使用反向地址解析协议或是启动协议(BOOTP)以找出这些参数。
    <my-ip>      客户端的IP地址。
    <serv-ip>    网络文件系统服务端的IP地址。
    <gw-ip>      网关(gateway)的IP地址。
    <netmask> 本地网络的网络掩码。如果为空白,则掩码由客户端的IP地址导出。
    <name>      客户端的名称。如果空白,则使用客户端IP地址的ASCII标记值。
    <dev>         要使用的网络设备名称。如果你只有一个设备,那么你可以不管它。
    <auto>        用以作为自动配置的方法。

2、内核配置要求

[*] Networking support --->
    --- Networking support
    Networking options --->
        <*> Unix domain sockets
        [*] TCP/IP networking
        [*] IP: kernel level autoconfiguration

 [*] Network File Systems --->
    <*> NFS client support
    [*] NFS client support for NFS version 3
    [*] Root file system on NFS

3、我遇到的问题

(1)DM9000的MAC地址无效导致不能挂载

      似乎uboot并没有把MAC地址传递给内核,如果先用ping命令,再启动内核挂载nfs时,uboot就会传递MAC地址(或者说是设置了DM9000的MAC地址),如果使用vivi,则根本不能设置MAC地址。解决的办法是直接在内核的驱动中指定DM9000的MAC地址(友善提供的DM9000移植方法)。

drivers/net/dm9000.c
dm9000_probe(struct platform_device *pdev)
{
 ……

 mac_src = "eeprom";

 /* try reading the node address from the attached EEPROM */
 for (i = 0; i < 6; i += 2)
  dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);

 if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
  mac_src = "platform data";
  memcpy(ndev->dev_addr, pdata->dev_addr, 6);
 }

 if (!is_valid_ether_addr(ndev->dev_addr)) {
  /* try reading from mac */
  
  mac_src = "chip";
  for (i = 0; i < 6; i++)
   ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
 }

 

 /* set MAC, add by wzc */
 memcpy(ndev->dev_addr, "/x08/x90/x91/x92/x93/x94", 6);

 

 if (!is_valid_ether_addr(ndev->dev_addr))
  dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "
    "set using ifconfig/n", ndev->name);
}

 

(2) nfs server xx.xx.xx.xx not response,still try

     总出现如题所示提示,然后DM9000停止活动,折腾了一下午,原来是由于根文件系统中/etc/init.d/rcS中网络配置部分导致的问题,由于nfs启动参数已经指定了linux的IP、网关等,如果在启动脚本中在设置一次就会导致这个问题,而不是网上说的由于使用UDP(当然这也可能导致出现该问题)。简单地在/etc/init.d/rcS中注释掉网络设置部分后,nfs成功挂载。

相关内容