嵌入式linux網路引導

來源:互聯網
上載者:User
嵌入式linux網路引導嵌入式linux的開發中,核心移植及根檔案系統的建立過程中,為了驗證核心移植是否成功,根檔案系統的建立是否可行,需要將它們的映像檔案燒寫到Flash中反覆實驗。如此頻繁地燒寫Flash,既浪費時間,減低了開發效率,還會對Flash造成損傷。因此在核心移植及根檔案系統的建立過程中一般採用網路引導。具體操作過程如下:一 Boot Loader環境變數及核心參數設定我的開發板的boot loader採用的是U-boot,其環境變數設定如下:Uboot> printenvbootdelay=3baudrate=115200ethaddr=00:12:34:56:78:9aipaddr=192.168.0.9           ①serverip=192.168.0.1         ②netmask=255.255.255.0rootpath=/home/zht/rfsys       ③stdin=serialstdout=serialstderr=serialbootcmd=tftp 21000000 uImage;bootm 21000000     ④bootargs=root=/dev/nfs rw nfsroot=192.168.0.1:/home/zht/rfsys nfsaddrs=192.168.0.48: 192.168.0.1:192.168.0.1:255.255.255.0 console=ttyS0,115200 mem=32M   ⑤ ① 設定目標板IP地址② 設定伺服器IP地址③ 設定根檔案系統在伺服器上的路徑,注意該路徑一定要設定為伺服器上的nfs目錄。④ bootcmd是u-boot啟動後執行的命令,命令之間用分號分隔。   tftp 21000000 uImage 表示通過tftp 將核心映像下載到RAM中地址為0x21000000;   bootm 21000000 啟動linux作業系統⑤ 定義u-boot傳送給linux核心的命令列參數,該命令列指定以網路檔案系統作為根檔案系統。其中root=/dev/nfs,並非真的裝置,而是一個告訴核心經由網路取得根檔案系統的旗標。參數nfsroot這個參數告訴核心以那一台機器,那個目錄以及那個網路檔案系統選項作為根檔案系統使用。參數的格式如下:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]如果指令列上沒有給定 nfsroot 參數,則將使用‘/tftpboot/%s’預設值。其它選項如下: <server-ip> --指定網路檔案系統服務端的互連網地址(IP address)。如果沒有給定此欄位,則使用由 nfsaddrs 變數(見下面)所決定的值。此參數的用途之一是允許使用不同機器作為反向位址解析通訊協定(RARP) 及網路檔案系統服務端。通常你可以不管它(設為空白)。 <root-dir> -- 服務端上要作為根掛入的目錄名稱。如果字串中有個‘%s’ 符記(token),此符記將代換為用戶端互連網地址之 ASCII 標記法。 <nfs-options> -- 標準的網路檔案系統選項。所有選項都以逗號分開。如果沒有給定此選項欄位則使用下列的預設值:        port            = as given by server portmap daemon        rsize           = 1024        wsize           = 1024        timeo           = 7        retrans         = 3        acregmin        = 3        acregmax        = 60        acdirmin        = 30        acdirmax        = 60        flags           = hard, nointr, noposix, cto, ac參數nfsaddrs設定網路通訊所需的各種網路介面地址。如果沒有給定這個參數,則核心核會試著使用反向位址解析通訊協定以及/或是啟動協議(BOOTP)以找出這些參數。其格式如下:         nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto><my-ip> -- 用戶端的互連網地址。如果沒設,此地址將由反向位址解析通訊協定或啟動協議來決定。使用何種協議端視配置核心時開啟的選項以及 <auto> 參數而定。如果設定此參數,就不會使用反向位址解析通訊協定或啟動協議。 <serv-ip> -- 網路檔案系統服務端之互連網地址。如果使用反向位址解析通訊協定來決定用戶端地址並且設定此參數,則只接受從指定之服務端傳來的回應。要使用不同的機器作為反向位址解析與網路檔案系統服務端的話,在此指定你的反向位址解析通訊協定服務端(保持空白)並在 nfsroot 參數(見上述)中指定你的網路檔案系統服務端。如果此項目空白則使用回答反向位址解析通訊協定或啟動協議之服務端的地址。 <gw-ip> -- 網關(gateway)之互連網地址,若服務端位於不同的子網路上時。如果此項目空白則不使用任何網關並假設服務端在本地的(local)網路上,除非由啟動協議接收到值。 <netmask> -- 本網介面的網路遮罩。如果為空白,則網路遮罩由用戶端的互連網地址匯出,除非由啟動協議接收到值。<name> -- 用戶端的名稱。如果空白,則使用用戶端互連網地址之 ASCII-標記法,或由啟動協議接收的值。 <dev> -- 要使用的網路裝置名稱。如果為空白,所有裝置都會用來發出反向位址解析請求,啟動協議請求由最先找到的裝置發出。網路檔案系統使用接收到反向位址解析通訊協定或啟動協議回應的裝置。如果你只有一個裝置那你可以不管它。<auto> -- 用以作為自動設定的方法。如果是 `rarp' 或是 `bootp' 則使用所指示的協議。如果此值為 `both' 或空白,若配置核心時有開啟這兩種協議則都使用。 `none' 表示不使用自動設定。這種情況下你必須指定前述欄位中所有必要的值。 此 <auto> 參數可以作為 nfsaddrs 的參數單獨使用(前面沒有任何 `:` 字元),這種情況下會使用自動設定。然而,此種情況不能使用 `none'作為值。  二 核心配置要求 添加核心對NFS的支援:選中networking options-》IP:kernel level auloconfiguralion項選中file systems-》network file systems-》下的root file system on nfs 和nfs file system support 三 TFTP伺服器的配置以root使用者登入,運行setup命令#setup選擇Systme services,選擇tftp。開啟tftp設定檔/etc/xinetd.d/tftp將server_args設定為核心映像檔案所在目錄,預設為/tftpboot我的核心映像在/home/zht/sources/kernel/linux-2.4.27目錄中,設定如下:service tftp{        disable = no        socket_type             = dgram        protocol                = udp        wait                    = yes        user                    = root        server                  = /usr/sbin/in.tftpd        server_args             = -s /home/zht/sources/kernel/linux-2.4.27        per_source              = 11        cps                     = 100 2        flags                   = IPv4} 重新啟動PC linux作業系統或者運行service xinetd restart命令啟動tftp伺服器。運行netstat -a | grep tftp 可以查看tftp伺服器是否配置成功。 四 NFS伺服器的配置以root身份登陸Linux伺服器,編輯/etc目錄下的共用目錄設定檔exports,指定共用目錄及許可權等。執行如下命令編輯檔案/etc/exports:# vi /etc/exports 在該檔案裡添加如下內容:/home/zht/rfsys 192.168.0.*(rw,sync,no_root_squash)編輯完過後儲存退出,然後運行命令exports –rav檢查輸入是否正確。添加的內容表示:允許ip位址範圍在192.168.0.*的電腦以讀寫的許可權來訪問/home/zht/rfsys目錄。/home/work也稱為伺服器輸出共用目錄。括弧內的參數意義描述如下: rw:讀/寫入權限,唯讀許可權的參數為ro; sync:資料同步寫入記憶體和硬碟,也可以使用async,此時資料會先暫存於記憶體中,而不立即寫入硬碟。 no_root_squash:NFS伺服器共用目錄使用者的屬性,如果使用者是 root,那麼對於這個共用目錄來說就具有 root 的許可權。 接著執行如下命令,啟動連接埠映射: # /etc/rc.d/init.d/portmap start 最後執行如下命令啟動NFS服務,此時NFS會啟用守護進程,然後就開始監聽 Client 端的請求: # /etc/rc.d/init.d/nfs start 在NFS伺服器啟動後,還需要檢查Linux伺服器的防火牆等設定(一般需要關閉防火牆服務,執行iptables -F),確保沒有屏蔽掉NFS使用的連接埠和允許通訊的主機,主要是檢查Linux伺服器iptables,ipchains等選項的設定,以及/etc/hosts.deny,/etc/hosts.allow檔案。 我們首先在Linux伺服器上進行NFS伺服器的迴環測試,驗證共用目錄是否能夠被訪問。在Linux伺服器上運行如下命令: # mount –t nfs 192.168.0.20: /home/zht/rfsys  /mnt # ls /mnt 命令將Linux伺服器的NFS輸出共用目錄掛載到/mnt目錄下,因此,如果NFS正常工作,應該能夠在/mnt目錄看到/home/work共用目錄中的內容。 五 將核心映像檔案uImage拷貝到/tftpboot目錄,建立的根檔案系統拷貝到/home/zht/rfsys目錄中。然後重新啟動目標板。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.