nfs挂载根文件系统.docx
- 文档编号:8000995
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:18
- 大小:27.47KB
nfs挂载根文件系统.docx
《nfs挂载根文件系统.docx》由会员分享,可在线阅读,更多相关《nfs挂载根文件系统.docx(18页珍藏版)》请在冰豆网上搜索。
nfs挂载根文件系统
使用NFS挂载根文件系统,在开发阶段有很多的好处,对根文件系统进行修改后不用每次都下载到NandFlash中,可以把制作的根文件系统放到主机中的NFS输出目录中,在正式成为产品以后在烧写到开发板中,这样可以方便很多,也可以把编译天生的内核也放到NFS输出目录中这样也可以引导内核,很是方便,还等什么开始吧!
NFS服务器真个配置已经在上一篇文章中写到过了。
U-boot中使用tftp协议也在另一篇文章中。
按道理来说NFS命令也是可以是使用的,由于都是基于网卡的,只要网卡驱动移植的没有题目,NFS也就直接可以使用了,不过在我这里可是行不通,在使用NFS传输文件中,一直出现下面的错误类型,提示挂载不上:
U-Boot@mini2440]#nfs0x10.27.10.48:
/home/ubuntu/kernel/fs/u-boot.bin
dm9000i/o:
0x,id:
0xa46
DM9000:
runningin16bitmode
MAC:
08:
00:
3e:
26:
0a:
5b
operatingat100Mfullduplexmode
Usingdm9000device
FiletransferviaNFSfromserver10.27.10.48;ourIPaddressis10.27.10.23
Filename'/home/ubuntu/kernel/fs/u-boot.bin'.
Loadaddress:
0x
Loading:
***ERROR:
Cannotmount//仅仅提示挂载不上
可还有下面的错误:
[U-Boot@mini2440]#nfs0x10.27.10.48:
/home/ubuntu/kernel/fs/u-boot.bin
dm9000i/o:
0x,id:
0xa46
DM9000:
runningin16bitmode
MAC:
08:
00:
3e:
26:
0a:
5b
operatingat100Mfullduplexmode
Usingdm9000device
FiletransferviaNFSfromserver10.27.10.48;ourIPaddressis10.27.10.23
Filename'/home/ubuntu/kernel/fs/u-boot.bin'.
Loadaddress:
0x
Loading:
***ERROR:
Cannotmount
***ERROR:
Cannotumount//这里还提示了不能卸载
在网上查找资料,出现Cannotumount错误的解决方法是修改u-boot-2009.08/net/nfs.c文件,在大约453行四周的位置:
staticintnfs_umountall_reply(uchar*pkt,unsignedlen)
{
structrpc_trpc_pkt;
debug("%s\n",__func__);
memcpy((unsignedchar*)&rpc_pkt,pkt,len);
//if(ntohl(rpc_pkt.u.reply.id)!
=rpc_id)//原来的这一行修改成下面的一行
if((ntohl(rpc_pkt.u.reply.id)+1)!
=rpc_id)
return-1;
if(rpc_pkt.u.reply.rstatus||
..................
}
可是在我这里修改完以后还是不可以使用,一样出现上面的错误。
这是就想到了是不是和tftp时出现的错误是一样的,也是由于超时的原因,固然这里面没有出现超时的提示,不管怎么样还是先改了再说;还是在/nfs.c文件中修改下面的超时的宏定义:
#defineHASHES_PER_LINE65/*Numberof"loading"hashesperline*/
#defineNFS_RETRY_COUNT30
#defineNFS_TIMEOUT(30*2000UL)//把原来的2000UL改成30*2000UL,
修改完上面的宏定义以后,再使用NFS传输文件,一开始有几次还是不成功,不过后面再使用时大部分情况下都是成功的,不再像上面一次也没有成功过:
[U-Boot@mini2440]#nfs0x10.27.10.48:
/home/zfz/kernel/fs/u-boot.bin
dm9000i/o:
0x,id:
0xa46
DM9000:
runningin16bitmode
MAC:
08:
00:
3e:
26:
0a:
5b
operatingat100Mfullduplexmode
Usingdm9000device
FiletransferviaNFSfromserver10.27.10.48;ourIPaddressis10.27.10.23
Filename'/home/zfz/kernel/fs/u-boot.bin'.
Loadaddress:
0x
Loading:
###############################
done
Bytestransferred=(25d88hex)
既然NFS可以使用了,那就可以用NFS挂载根文件系统了。
根文件系统的制作在另一篇文章中也已经写了,这里就还是使用上次的根文件系统,只是不再用工具制作成Yaffs2的镜像了,直接使用Busybox,制作成功的noot_nfs目录下的各个文件就可以了,假如要下载到NandFlash中,再使用Yaffs2格式的镜像文件。
可以先用NFS把Linux内核下载到内存中,然后设置传递给内核的参数,在u-boot-2009.08/include/configs/mini2440.h文件中,修改原来使用nandread方式,修改成使用NFS方式的;
//#defineCONFIG_BOOTCOMMAND"nandread0x0x0x;bootm0x"
//把上面的注释掉,修改成下面的方式
#defineCONFIG_BOOTCOMMAND"nfs0x10.27.10.48:
/home/zfz/kernel/fs/uImage.img;bootm"
这样,在用U-boot引导时就可以把Linux的内核首先复制到内存中了,这样也不用把Linux内核下载到开发板中了。
然后在修改传递给内核的参数,修改为下面的:
//#defineCONFIG_BOOTARGS"noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttySAC0,mem=64M"
//把上面的修改成下面的这句
#defineCONFIG_BOOTARGS"noinitrdroot=/dev/nfsrwnfsroot=10.27.10.48:
/home/ubuntu/kernel/fs/root_nfsip=10.27.10.23:
10.27.10.48:
:
255.255.255.0console=ttySAC0,init=/linuxrcmem=64M"
可不要忘记把你的Linux内核的镜像文件和你制作的根文件系统的放到NFS的输出目录中;在配置内核中要选中支持NFS文件系统:
支持网卡驱动,还用NetWorkingSupport如下图所示:
NetworkFileSystem的支持
这样内核配置完以后启动U-boot出现下面的错误:
...........
NodeviceforDAIUDA134X
NodeviceforDAIs3c24xx-i2s
ALSAdevicelist:
Nosoundcardsfound.
TCPcubicregistered
NET:
Registeredprotocolfamily17
drivers/rtc/hctosys.c:
unabletoopenrtcdevice(rtc0)
IP-Config:
Nonetworkdevicesavailable.//这里没有找到网卡的驱动
LookingupportofRPC/2on10.27.10.48
rpcbind:
server10.27.10.48notresponding,timedout
Root-NFS:
Unabletogetnfsdportnumberfromserver,usingdefault
LookingupportofRPC/1on10.27.10.48
rpcbind:
server10.27.10.48notresponding,timedout
Root-NFS:
Unabletogetmountdportnumberfromserver,usingdefault
Root-NFS:
Serverreturnederror-5whilemounting/home/zfz/kernel/fs/root_nfs
VFS:
UnabletomountrootfsviaNFS,tryingfloppy.
VFS:
Cannotopenrootdevice"nfs"orunknown-block(2,0)
Pleaseappendacorrect"root="bootoption;herearetheavailablepartitions:
1f00256mtdblock0(driver?
)
1f01128mtdblock1(driver?
)
1f025120mtdblock2(driver?
)
1f03mtdblock3(driver?
)
1f04mtdblock4(driver?
)
Kernelpanic-notsyncing:
VFS:
Unabletomountrootfsonunknown-block(2,0)
[
[
[
[
[
在使用NFS挂载根文件系统时,需要在系统启动到后面时,使用NFS传送根文件系统,这是需要了DM9000网卡的驱动,固然我们在u-boot中移植了DM9000网卡的驱动,不过现在已经进进到了Linux中,在配置Linux内核中固然我们也选择了支持DM9000网卡的驱动,不过还是需要在Linux内核中改动才能适应开发板上的网卡,下面就要在Linux中移植DM9000网卡的驱动程序。
Linux2.6.32已经对DM9000网卡有着比较完善的支持了,在:
linux-2.6.32.2/
drivers/net/dm9000.c文件中,只需要在目标平台初始化代码中,填写完相应的结构表就可以了,在另一篇文章中,Linux2.6.32.2移植到MINI2440中,我们在linux-2.6.32.2/arch/arm/mach-s3c2440目录下建立了我们自己的文件mach-mini2440.c,主要在这个文件下添加修改;首先添加驱动所需要的头文件:
#include
然后定义DM9000网卡的物理基地址
#defineMACH_MINI2440_DM9K_BASE(S3C2410_CS4+0x300)
再填写该平台设备的资源设置,以便和DM9000网卡驱动接口配合起来;
staticstructresourcemini2440_dm9k_resource[]={
[0]={
.start=MACH_MINI2440_DM9K_BASE,
.end=MACH_MINI2440_DM9K_BASE+3,
.flags=IORESOURCE_MEM
},
[1]={
.start=MACH_MINI2440_DM9K_BASE+4,
.end=MACH_MINI2440_DM9K_BASE+7,
.flags=IORESOURCE_MEM
},
[2]={
.start=IRQ_EINT7,
.end=IRQ_EINT7,
.flags=IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHEDGE,
}
};
/*
***TheDM9000hasnoeeprom,andit'sMACaddressissetby
***thebootloaderbeforestartingthekernel.
***/
staticstructdm9000_plat_datamini2440_dm9k_pdata={
.flags=(DM9000_PLATF_16BITONLY|DM9000_PLATF_NO_EEPROM),
};
staticstructplatform_devicemini2440_device_eth={
.name="dm9000",
.id=-1,
.num_resources=ARRAY_SIZE(mini2440_dm9k_resource),
.resource=mini2440_dm9k_resource,
.dev={
.platform_data=&mini2440_dm9k_pdata,
},
};
然后在mini2440设备集中添加上面做好的网卡平台设备,如下红色部分
staticstructplatform_device*mini2440_devices[]__initdata={
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&mini2440_device_eth,
&s3c_device_nand,
};
由于Linux-2.6.32.2中固然有DM9000网卡驱动,但并不是完全的适合mini2440,所以还是需要修改,修改DM9000所用的位宽寄存器,在linux-2.6.32.2/drivers/net/dm9000.c,添加下面的头文件
#ifdefined(CONFIG_ARCH_S3C2410)
#include
#endif
在dm9000设备的初始化函数中添加如下红色部分,这里是配置DM9000所用片选总线的时序,大约在1557行四周的位置,
staticint__init
dm9000_init(void)
{
#ifdefined(CONFIG_ARCH_S3C2410)
unsignedintoldval_bwscon=*(volatileunsignedint*)S3C2410_BWSCON;
unsignedintoldval_bankcon4=*(volatileunsignedint*)S3C2410_BANKCON4;
*((volatileunsignedint*)S3C2410_BWSCON)=
(oldval_bwscon&~(3<<16))|S3C2410_BWSCON_DW4_16|
S3C2410_BWSCON_WS4|S3C2410_BWSCON_ST4;
oldval_bankcon4=0x1f7c;
#endif
printk(KERN_INFO"%sEthernetDriver,V%s\n",CARDNAME,DRV_VERSION);
returnplatform_driver_register(&dm9000_driver);
}
在配置Linux内核中,魅族商城加进对DM9000网卡的支持如下图;
这样DM9000网卡的驱动就基本已经移植完成了,这样就可以使用NFS挂载根文件系统了,启动的信息如下:
U-Boot2009.08(4?
?
月302010-20:
01:
00)
DRAM:
64MB
Flash:
2MB
NANDDevice:
ManufacturerID:
0xec,ChipID:
0xf1(SamsungNAND128MiB3,3V8-b)
NAND:
128MiB
***Warning-badCRCorNAND,usingdefaultenvironment
In:
serial
Out:
serial
Err:
serial
Net:
dm9000
Hitanykeytostopautoboot:
0
dm9000i/o:
0x,id:
0xa46
DM9000:
runningin16bitmode
MAC:
08:
00:
3e:
26:
0a:
5b
operatingat100Mfullduplexmode
Usingdm9000device
FiletransferviaNFSfromserver10.27.10.48;ourIPaddressis10.27.10.23
Filename'/home/zfz/kernel/fs/uImage.img'.
Loadaddress:
0x
Loading:
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#####################
done
Bytestransferred=(201bachex)
##BootingkernelfromLegacyImageat...
ImageName:
linux-2.6.32.2
Created:
2010-04-3015:
40:
47UTC
ImageType:
ARMLinuxKernelImage(uncompressed)
DataSize:
Bytes=2MB
LoadAddress:
EntryPoint:
VerifyingChecksum...OK
LoadingKernelImage...OK
OK
Startingkernel...
UncompressingLinux.............................................................
Linuxversion2.6.32.2(zfz@zfz)(gccversion4.3.2(SourceryG++Lite2008q3-70
CPU:
ARM920T[]revision0(ARMv4T),cr=c0007177
CPU:
VIVTdatacache,VIVTinstructioncache
Machine:
FriendlyARMMINI2440developmentboard
Memorypolicy:
ECCdisabled,Datacachewriteback
CPUS3C2440A(id0x)
S3C24XXClocks,(c)2004SimtecElectronics
S3C244X:
core405.000MHz,memory101.250MHz,peripheral50.625MHz
CLOCK:
Slowmode(1.500MHz),fast,MPLLon,UPLLon
Built1zonelistsinZoneorder,mobilitygrouping
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nfs 挂载根 文件系统