配置NFS+TFTP+BOOTP

需要NFS的目的是建立网络文件系统,开发板通过它把嵌入式根文件系统“安装”过来,另外开发箱通过tftp协议把内核下载下来,通过BOOTP自动配置网卡参数,下面说以下步骤:

1)电脑上安装NFS+TFTP+BOOTP,可以通过如下命令安装

#apt-get install nfs-kernel-server tftpd bootp openbsd-inetd
安装好后在linux输入# dpkg -l tftp*如果返回如下几行,证明安装好了

||/ 名称         版本         简介
+++-==============-==============-============================================
un  tftp           <无>          (无相关介绍)
ii  tftp-hpa       5.0-11ubuntu2. HPA's tftp client
ii  tftpd          0.17-17ubuntu1 Trivial file transfer protocol server
接下来就是配置配置文件

编辑/etc/exports(这个是nfs的配置文件,我们把要用nfs挂载的目录或文件按一定格式写在这个文件就可以了如下),在末尾加入下面一行(可以加多个目录的):
 /work/nfs_root     *(rw,sync,no_root_squash)
/etc/init.d/nfs-kernel-server restart #配置完之后要重新启动这个服务

到了这里如果你linux里防火墙什么的没有开的话,就可以通过命令来挂载nfs文件系统(只是一个统称,对应以实制文件系统,通常就是挂在一个目录),可以现在pc机上试验一下命令如下

#mount -t nfs 192.168.0.3:/work/nfs_root /mnt  //注意挂载前要确保/mnt为空目录

在开发板上可以这样手工挂载

#mount -t nfs -o nolock 192.168.0.3:/work/nfs_root /mnt  //注意挂载前要确保/mnt为空目录(还有的就是请确保内核配置里对nfs支持已选上)

这个如果也成功了,那么我们就可以把它改成驱动内核是自动挂载它,不用每次都手工来挂载。

这样就挂载上去了,下面说一下在开发板上怎样用nfs挂载文件系统,以TQ2440开发板说明,首先挂载nfs文件系统之前u-boot,内核要烧进(内核可以用tftp直接从内存启动,不需要烧进flash中)flash中了,u-boot中有一个变量是用来存这些参数的,下面可以看一下u-boot中变量

U-Boot 1.1.6 (May  5 2012 - 22:36:36)

DRAM:  64 MB
Flash:  2 MB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
tq2440# print
bootcmd=nand read.jffs2 0x30007fc0 kernel;bootm 0x30007fc0
bootdelay=3
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
ipaddr=192.168.0.4
serverip=192.168.0.3
netmask=255.255.255.0
bootargs=noinitrd root=/dev/nfs nfsroot=192.168.0.3:/work/nfs_root ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
stdin=serial
stdout=serial
stderr=serial
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:1m@0(boot),1m(params),2m(kernel),8m(jffs2),-(yaffs2)
partition=nand0,0
mtddevnum=0
mtddevname=boot

Environment size: 528/131068 bytes
tq2440#

这时内核启动情况如下:

Bytes transferred = 1869388 (1c864c hex)

## Booting image at 32000000 ...

   Image Name:   Linux-2.6.30.4-EmbedSky

   Created:      2012-05-27   3:53:16 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    1869324 Bytes =  1.8 MB

   Load Address: 30008000

   Entry Point:  30008000

   Verifying Checksum ... OK

OK


Starting kernel ...


Uncompressing Linux...................................................................................................................... done, booting the kernel.

Linux version 2.6.30.4-EmbedSky (root@www) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #13 Sun May 27 11:53:09 CST 2012

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

......

Looking up port of RPC 100003/2 on 192.168.0.3

eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

Looking up port of RPC 100005/1 on 192.168.0.3

VFS: Mounted root (nfs filesystem) on device 0:12.

Freeing init memory: 128K

my tq2440 cgy

Try to bring eth0 interface up...

ifconfig eth0 hw ether 10:23:45:67:89:ab

ifconfig eth0 192.168.0.4 netmask 255.255.255.0 up

route add default gw 192.168.0.1

Done


Please press Enter to activate this console. 

[root@cgyl2010 ~]#

上面红色标志的就是我们开发板启动挂载nfs文件系统要用到的一些参数,下面分析一下这些参数意义

bootargs=noinitrd root=/dev/nfs nfsroot=192.168.0.3:/work/nfs_root ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

bootargs是一个环境变量可以用命令setenv来改,noinitrd root=/dev/nfs指明要挂载文件系统,nfsroot=192.168.0.3:/work/nfs_root 要挂载的文件系统所在主机ip和要挂载的文件系统(其实就是一个目录),ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0分别是开发板IP,文件系统所在目标主机的Ip,网关,子网掩码,要注意一点的是上面IP要在同一个网段,我是使用路由器分出来的,使用的是ubutu版本linux虚拟机,把它设成桥接,init=/linuxrc console=ttySAC0,指明init进程,使用串口。。。。。

这样设置好之后我们就可以在开发板启动的时候把pc机上/work/nfs_root文件系统直接挂载过来了,不用烧写进flash(nfs_root目录是我建好的一个文件系统),这样还有一个好处就是我们可以在pc 机上编好程序,用交叉编译链编译好就可以在开发板上运行,还可以在pc机上建目录在开发板上立刻就可以看到。。。。

##################################################################################################

下面是tftp设置
修改文件/etc/inetd.conf,加入如下一行:
bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftproot

其中的/srv/tftproot就是我们要建立的目录,以后通过tftp上传,下载的目录都会出现在这个文件里面。

下面是对BOOTP配置文件修改

修改文件/etc/bootptab,内容如下:
CrossBox11:ht=1: ha=0x123456789A00: ip=192.168.0.4(这个是对应开发板IP): sm=255.255.255.0
主意:上述行中的“0x123456789A00”指开发箱的网卡物理地址(MAC),在具体操作过程中要替换成你的开发板的网卡物理地址。

重启inetd,从而监听bootp和tftp服务:
/etc/init.d/openbsd-inetd restart

这样就可以在u-boot中使用tftp或nfs下载内核到内存中了,很方便,如下是下载内核到开发板内存

Enter your cgytq2440: 9
dm9000 i/o: 0x20000300, id: 0x90000a46
MAC: 08:00:3e:26:0a:5b
TFTP from server 192.168.0.3; our IP address is 192.168.0.4
Filename 'uImage'.
Load address: 0x32000000
Loading: T #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ######################################################
done
Bytes transferred = 1936668 (1d8d1c hex)
这样就可以了,下面来说一下具体设置:

通过上面设置只是tftp等服务起来了,具体怎么用还要一些设置

如果用的是linux虚拟机,先把上网方式改为桥接,不过桥接时要用到路由器的,如果是一般电信方式上网的,只能用一个IP这时桥接就没法用了,可以配合路由器来用(通过路由器分多几个IP来用):

首先把网接成桥接

如果是用了路由器的话,首先windows的IP设为192.168.0.2(我的路由器网关是192.168.0.1,有的是192.168.1.1这个网段,具体怎样要看自己路由器),虚拟机linux的IP作为服务器用IP设为192.168.0.3

开发板IP就设成192.168.0.4;这是、srv/tftproot中的文件就可以通过tftp来下载了。

最后说一下可以用vim /etc/services查看端口号,这个方便我们查看我们服务所对应的端口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值