歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用nfs掛載根文件系統

使用nfs掛載根文件系統

日期:2017/2/28 16:09:11   编辑:Linux教程
裡的大部分內容參考了網上的一篇文章,原作者不詳,當然也有我遇到的問題。

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成功掛載。

Copyright © Linux教程網 All Rights Reserved