linux uboot nfs启动,uboot中利用TFTP和NFS加载镜像到ram运行
主機(jī)說(shuō)明:
主機(jī)guest 為虛擬機(jī)redhat9: IP: 59.64.155.122? 網(wǎng)關(guān) 59.64.155.1
redhat9上已經(jīng)配置好NFS服務(wù)(參考http://blog.chinaunix.net/u2/80953/showart.php?id=1274973)
也已經(jīng)配置好TFTP服務(wù)(參考http://blog.chinaunix.net/u2/80953/showart.php?id=1274976)
NFS服務(wù), TFTP服務(wù)都已經(jīng)啟動(dòng)
終端采用主機(jī)host XP的超級(jí)終端
實(shí)驗(yàn)板說(shuō)明:
MPC8349itx開(kāi)發(fā)板: IP: 59.64.155.244? 網(wǎng)關(guān) 59.64.155.1
開(kāi)發(fā)板e(cuò)th0為vsc8201芯片,uboot支持驅(qū)動(dòng),另一芯片為交換交換芯片vsc7385,單獨(dú)模塊驅(qū)動(dòng)。
U-Boot-1.1.3 ;??? Linux kernel-2.6.13
內(nèi)核支持NFS分區(qū)(即編譯時(shí)在File system中選中[*]?Root file system on NFS), 以及支持內(nèi)核IP_PNP(即編譯時(shí)在Networking中選中[*]?IP: kernel level autoconfiguration)
File systems? --->
Network File Systems? --->
NFS file system support??????????????????????? ## 必選
[*]?? Provide NFSv3 client support???????????? ## 可選
[*] Root file system on NFS??????????????????????? ## 必選
Networking? --->
[*] Networking support
Networking options? --->
[*]?? IP: kernel level autoconfiguration?????? ## 必選
***************************************************************************
A:?NFS啟動(dòng)掛載根文件系統(tǒng)
主機(jī)上操作:
$ cd /usr/local/mpc8349/
$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs -f
## 依次進(jìn)入如下選項(xiàng)選擇(X) NFS only, 根據(jù)情況決定是否選擇[ ] read-only root filesystem
--- Target Image Generation
Options? --->
--- Choose your root filesystem image type
Target image: (ext2.gz ramdisk)? --->???????? ## 改ramdisk文件系統(tǒng)為NFS
(X) NFS only
[ ] read-only root filesystem
## 其他情況參考LTIB使用說(shuō)明(http://blog.chinaunix.net/u2/80953/showart.php?id=1275002)
## 編譯結(jié)束后生成的根文件系統(tǒng)是位于當(dāng)前安裝目錄下的rootfs (/usr/local/mpc8349/small/rootfs)
$ ln -s /usr/local/mpc8349/small/rootfs? /home/liuby/rootfsln??? ## 建立NFS服務(wù)目錄軟連接
$ su - root??????? ## 切換到root用戶,需要密碼
# echo "/usr/local/mpc8349/small/rootfs? 59.64.155.244(rw,sync,no_root_squash)" > /etc/exports???? ## NFS 服務(wù)配置
# service portmap restart
# service nfs restart
# exportfs -arv??????? ## 修改的NFS配置生效(exportfs參數(shù)順序不一樣,顯示有所不同,此順序顯示結(jié)果明了)
# exit
實(shí)驗(yàn)板上操作:
uboot啟動(dòng)后按鍵進(jìn)入uboot命令行環(huán)境:
=> cp.b fef50000 40000 20000; go 40004??????? ## 驅(qū)動(dòng)vsc7385芯片
=> set serverip 59.64.155.122????????? ## 主機(jī)地址
=> set ipaddr 59.64.155.244??????????? ## 實(shí)驗(yàn)板地址
=> set netmask 255.255.255.0
=> set netdev eth0?????????????????????## eth0
=> ping 59.64.155.122????????????????? ## 測(cè)試連通
=> set hostname PowerQUICC
=> set kernaddr fe810000??????????? ## flash中內(nèi)核起始地址
=> set rootpath /usr/local/mpc8349/small/rootfs??????? ## NFS服務(wù)根目錄
=>?setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=ttyS0,115200
=> bootm $kernaddr
## 如果一切正常,內(nèi)核啟動(dòng)后會(huì)啟動(dòng)NFS文件系統(tǒng)作根文件系統(tǒng)。
## 測(cè)試: 在開(kāi)發(fā)板上創(chuàng)建一個(gè)文件,在主機(jī)上會(huì)看到這個(gè)文件生成
同樣可以簡(jiǎn)化操作(測(cè)試nfs服務(wù)軟連接目錄):
=> cp.b fef50000 40000 20000; go 40004??????? ## 驅(qū)動(dòng)vsc7385芯片
=> setenv ipaddr 59.64.155.244
=> setenv bootargs root=/dev/nfs rw nfsroot=59.64.155.122:/home/liuby/rootfsln ip=59.64.155.244:59.64.155.122:255.255.255.0 console=ttyS0,115200
=> bootm fe810000??????????? ## 內(nèi)核鏡像uImage在FLASH中的存儲(chǔ)地址
************************
實(shí)驗(yàn)中遇到一個(gè)問(wèn)題,就是bootm之后內(nèi)核啟動(dòng),NFS啟動(dòng)掛載文件系統(tǒng)快完成時(shí)出現(xiàn)下面這個(gè)錯(cuò)誤提示
RPC: sendmsg returned error 101
nfs: RPC call returned error 101
后來(lái)才發(fā)現(xiàn)是文件系統(tǒng)中的啟動(dòng)腳本在啟動(dòng)過(guò)程中修改了eth0的ip地址,導(dǎo)致連接不上NFS server
后來(lái)再測(cè)試又發(fā)現(xiàn)試圖掛載非NFS文件系統(tǒng)目錄時(shí)也會(huì)出現(xiàn)此問(wèn)題,并且在主機(jī)上執(zhí)行# showmount 命令結(jié)果會(huì)顯示有ip地址(實(shí)驗(yàn)板ip地址)掛載。即: 在ltib編譯文件系統(tǒng)時(shí)選擇ext2.gz ramdisk (非NFS only), 最后使用rootfs目錄,出現(xiàn)同樣的問(wèn)題。
還有遇到過(guò)一個(gè)問(wèn)題,根本無(wú)法掛載文件系統(tǒng),在啟動(dòng)時(shí)出現(xiàn)下述提示
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
<0>Rebooting in 180 seconds..
后來(lái)發(fā)現(xiàn)是 /etc/exports 只有如下一句
/home/liuby/rootfs? 59.64.155.244(rw,sync,no_root_squash)
而沒(méi)有像下面這樣指定根目錄的訪問(wèn)權(quán)限:
/usr/local/mpc8349/small/rootfs? 59.64.155.244(rw,sync,no_root_squash)
結(jié)論: 必須指定NFS文件系統(tǒng)所在目錄或其對(duì)應(yīng)的軟連接做NFS服務(wù)根目錄(見(jiàn)下分析)
在NFS文件系統(tǒng)中編譯busybox時(shí)可以不選擇編譯mount命令(不建議如此)
nfs總結(jié):
如上 /home/liuby/rootfsln是指向/usr/local/mpc8349/small/rootfs的軟連接
# echo "/home/liuby/rootfsln 59.64.155.244(rw,sync,no_root_squash)" > /etc/exports
# exportfs -arv???????????? ## 會(huì)彈出下面的提示
exporting 59.64.155.244:/usr/local/mpc8349/small/rootfs
可見(jiàn) /etc/exports 中語(yǔ)句 /home/liuby/rootfsln 59.64.155.244(rw,sync,no_root_squash) 和 /usr/local/mpc8349/small/rootfs? 59.64.155.244(rw,sync,no_root_squash) 是等效的.
故:?如果想用不同的文件系統(tǒng),可以改變這個(gè)軟連接指向新的文件系統(tǒng),這比復(fù)制文件系統(tǒng)或者修改u-boot環(huán)境變量方便多了,并且還不用重新配置/etc/exports。
# echo "/home/liuby/rootfsln 59.64.155.244(rw, sync, no_root_squash)" > /etc/exports
$ rm -f /home/liuby/rootfsln
$?ln -s nfs_rootfs_dir_path? /home/liuby/rootfsln??????????? ## 只需要建立和修改這個(gè)軟連接即可
#?exportfs -arv??????????? ## 配置生效(必須)
在uboot環(huán)境變量中只需設(shè)置一次rootpath=/home/liuby/rootfsln,?每次只需在主機(jī)上修改此軟連接的指向,即可
注意權(quán)限
***************************************************************************
B:?TFTP下載內(nèi)核和文件系統(tǒng)鏡像到ram中啟動(dòng)
主機(jī)上操作:
在主機(jī)上TFTP根目錄為/home/liuby/tftpboot/
$ mkdir /home/liuby/tftpboot/image_dir
$ cd /usr/local/mpc8349/small/
$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs-modified -f --batch????????? ## 編譯內(nèi)核和文件系統(tǒng)鏡像
$ cp -f rootfs/boot/uImage? rootfs.ext2.gz.uboot? ~/tftpboot/image_dir/??????? ## 復(fù)制內(nèi)核鏡像和文件系統(tǒng)鏡像到~/tftpboot/image_dir
$ cd ~/tftpboot/
$ ln -s image_dir/ bootln
實(shí)驗(yàn)板上操作:
=> set serverip 59.64.155.122????????? ## 主機(jī)地址
=> set ipaddr 59.64.155.244??????????? ## 實(shí)驗(yàn)板地址
=> set netmask 255.255.255.0
=> set tftp_path bootln
=> ping $serverip????????????????????? ## 測(cè)試連通
=> cp.b fef50000 40000 20000; go 40004??????? ## 驅(qū)動(dòng)vsc7385芯片
=> setenv loadkernaddr 1000000
=> setenv loadramdaddr 1200000
=>?tftpboot $loadkernaddr image_dir/uImage??? ## 下載內(nèi)核鏡像到ram
=> tftp $loadramdaddr $tftp_path/rootfs.ext2.gz.uboot??? ## 下載文件系統(tǒng)鏡像到ram
=> bootm $loadkernaddr $loadramdaddr??? ## 啟動(dòng)ram中內(nèi)核和文件系統(tǒng)鏡像
下載不暢時(shí),用CTRL+C來(lái)終止回到提示符
tftp總結(jié):
在TFTP服務(wù)根目錄下建立目錄存儲(chǔ)鏡像文件,然后創(chuàng)建軟連接指向需要下載的鏡像目錄,這樣可以通過(guò)修改連接文件即可,而不用每次修改uboot環(huán)境變量了
***************************************************************************
C:?TFTP下載內(nèi)核鏡像到ram,NFS掛載根文件系統(tǒng)(target image: NFS only)
主機(jī)上利用上面操作的結(jié)果,不進(jìn)行配置。
實(shí)驗(yàn)板上操作:
=> set serverip 59.64.155.122????????? ## 主機(jī)地址
=> set ipaddr 59.64.155.244??????????? ## 實(shí)驗(yàn)板地址
=> set netmask 255.255.255.0
=> set bootargs root=/dev/nfs rw nfsroot=$serverip:/home/liuby/rootfsln ip=$ipaddr:$serverip:$netmask console=ttyS0,115200
=> tftp 1000000 bootln/uImage????????? ## 下載內(nèi)核鏡像到ram 地址1000000
=> bootm 1000000
## 測(cè)試發(fā)現(xiàn)內(nèi)核啟動(dòng),NFS掛載成功
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
簡(jiǎn)便方法:
將下面附錄的文件存儲(chǔ)為.txt文件,例如取名mpc8349itx_uboot_env.txt
用linux命令unix2dos進(jìn)行轉(zhuǎn)換,然后打開(kāi)windows XP 超級(jí)終端,啟動(dòng)實(shí)驗(yàn)板進(jìn)入uboot命令行環(huán)境:
點(diǎn)擊超級(jí)終端界面 "文件"->"屬性",彈出屬性對(duì)話框,點(diǎn)擊"設(shè)置"->"ASCII碼設(shè)置",設(shè)置行延遲20ms,字符延遲1ms;然后點(diǎn)擊"發(fā)送"->"發(fā)送文本文件",選擇"mpc8349itx_uboot_env.txt"發(fā)送。
此操作相當(dāng)于在uboot命令行輸入uboot環(huán)境設(shè)置參數(shù)
執(zhí)行完操作后保存了這些設(shè)置,以后每次在uboot啟動(dòng)時(shí)不用再敲入一行行的設(shè)置參數(shù).
在uboot命令行下執(zhí)行
=> run flashnfsboot
相當(dāng)于 A 操作
在uboot命令行執(zhí)行
=> run tftpramboot
相當(dāng)于執(zhí)行 B 操作
在uboot命令行執(zhí)行
=> run tftpnfsboot
相當(dāng)于執(zhí)行 C 操作
?轉(zhuǎn)栽地址:http://blog.chinaunix.net/u3/98913/showart_1978279.html
總結(jié)
以上是生活随笔為你收集整理的linux uboot nfs启动,uboot中利用TFTP和NFS加载镜像到ram运行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。