嵌入式linux开发更新hp m1218nfs 驱动下载程序有没有和nfs文件系统一样方便的方法

基于ARM11在Linux平台下网络通信的设计与实现-嵌入式新闻
&&&&&|&&|&&&|&&|&&|&&|&&|&&|&&|&
作者: 发布时间: 来源: 
摘要:ARM11 系列微处理器是ARM 公司近年推出的新一代RISC 处理器,其性能得到全面的提高。嵌入式Linux
有着微型的内核、可裁剪的模块以及高性能的网络通信等功能。两者的结合能满足消费类电子、无线设备、网络应用、
&摘要:ARM11 系列微处理器是ARM 公司近年推出的新一代RISC 处理器,其性能得到全面的提高。嵌入式Linux
有着微型的内核、可裁剪的模块以及高性能的网络通信等功能。两者的结合能满足消费类电子、无线设备、网络应用、汽车电子等嵌入式应用的需求。随着CPU制造工艺的飞速发展,越来越多的高性能、低功耗的嵌入式微处理器应用到我们生活中的各个方面,ARM11采用ARM公司新一代的指令架构ARMv6,其主频最高可达到1GHz,功耗低至0.4mW/MHz,采用8级流水线技术。另一方面,它对存储器系统进行改善,使其更加适用于操作系统对硬件上的需求。Linux是在Unix的基础上发展起来的,它是一种安全、稳定、免费并且能移植到多种架构的处理器平台。Linux分为多个模块,可裁剪一些次要的模块以减小程序量,从而更好地满足微处理器对功耗和成本的要求。1 嵌入式Linux 软件开发环境的搭建1.1 嵌入式Linux 开发环境简述嵌入式Linux驱动程序的开发需在以Linux为内核的操作系统系统下进行,为方便开发时的数据传输及信息反馈,安装VMware虚拟机软件,并且在其中安装Ubuntu
10.10操作系统。需要注意的是,操作系统的版本不能太低,因为版本过低,很多工具都无法找到对应的支持包,导致一些软件的失效。Ubuntu是以Linux为内核的操作系统,在Ubuntu安装之初,系统会要求你输入要新建的账户和密码,这个新建的账户用于Ubuntu第一次启动时的默认登录账户。Ubuntu10.10支持图形用户界面,但Linux中还有很多功能都不能以图形界面的形式表达。因此,要学好Linux,就必须对Linux的命令行有比较深入的了解。Ubuntu10.10会自动安装VMware工具,用于虚拟机系统与宿主机之间的文件传输等,即用户可以直接拖动宿主机的文件到虚拟机中。若没有自动安装,则选择VM项下的Install
VMware Tools进行安装。Linux对普通用户有一定的权限限制,如安装一些支持包时就必须以根用户的权限才能进行操作。为方便每次启动Linux时都以根用户登陆,可在第一次登陆时进入超级终端,并打开/etc/gdm目录下的用户配置文件:custom.conf.即每次登陆时都以root的权限进行登陆。1.2 交叉编译器交叉编译器是一种计算机环境中运行的编译程序,能编译出可在另外一种环境下运行的代码,我们就称这种编译器为交叉编译器。该文中,我们要在CISC
X86架构的普通个人电脑中编写代码,编译后的程序在RISC ARMv6架构的ARM11微处理器中运行。1.3 网络文件系统NFS是Network File
System的简写,即网络文件系统。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。在嵌入式开发中,NFS使得开发时硬件平台和电脑间文件的传输极为方便。1.4 网络编程实验实现典型的客户机/服务器程序。客户机、服务器模式要求每个应用程序应由两部分组成:一个部分负责启动通信,另一个部分负责对它进行应答。他们通常运行在不同的主机上,分别被称为客户机和服务器。服务器是指能在网络上可提供服务的任何程序。客户机是指用户为了得到某种服务所需要运行的应用程序。一个服务器接受网络上客户机的请求,完成服务后将结果返回给客户机。2 嵌入式Linux硬件平台的搭建2.1 linux 引导程序嵌入式linux引导程序一般选用u-boot,全称Universal Boot Loader
,是遵循GPL条款的开放源码项目。首先设置拨码开关配置ARM11从SD卡中读取u-boot,再通过超级终端,将读取到的u-boot拷贝到ARM11板载的NAND
Flash中,再设置启动方式配置ARM11从Flash中启动,至此,完成嵌入式linux在ARM11平台下引导程序的加载。2.2 linux 内核完成u-boot的加载后,内核文件可以直接通过超级终端从PC中传输到嵌入式开发平台中。通常是把内核文件传输到nandflash特定的地址中暂存起来,再通过烧写命令将该内核文件烧写到特定的内核地址中去即完成嵌入式linux内核的烧写。2.3 嵌入式Linux 文件系统嵌入式Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux
用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。常用的文件系统为yaffs2文件系统和cramfs文件系统。Yaffs是第一个专门为Nandflash存储器设计的嵌入式文件系统,适用于大容量的存储设备,并且是在GPL协议下发布的。Cramfs文件系统是专门为NorFlash设计的只读压缩的文件系统,采用实时解压缩方式,小巧且快速。3 结束语基于ARM11在Linux平台下网络通信程序的流程图总结如图2所示。本文就目前对于嵌入式linux及其网络通信进行阐述,以嵌入式为知识背景,该设计主要由六个过程(NFS、交叉编译器、网络编程实验、linux引导程序、linux内核、嵌入式Linux文件系统)组成。其他嵌入式Linux应用程序的编写过程也与此类似。
【】【】【
※ 相关信息
无相关信息
※ 其他信息
访问数:&|&
数据加载中..后使用快捷导航没有帐号?
查看: 3104|回复: 1
LINUX nfs详解
在线时间557 小时
威望21507分
芯币8526枚
TA的帖子TA的资源
裸片初长成(中级), 积分 21507, 距离下一级还需 8493 积分
裸片初长成(中级), 积分 21507, 距离下一级还需 8493 积分
网络文件系统(NFS)
一、NFS简介
1、NFS就是Network File System的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share files)——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看作一个文件服务器(File Server)。
注意:一般而言,使用NFS服务能够方便地使各unix-like系统之间实现共享,但如果需要在unix-like和windows系统之间共享,那就得使用samba了。
2、NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是……不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。
其实,NFS运行在SUN的RPC(Remote Procedure Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS Server也可以看作是RPC Server。正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定。比如:某个NFS Client发起NFS服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到port number(不仅是NFS,所有的RPC服务程序启动之前,都需要先设定好portmap)。
注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。
3、NFS允许系统将其目录和文件共享给网络上的其他系统。通过NFS,用户和应用程序可以访问远程系统上的文件,就像它们是本地文件一样。那么NFS最值得注意的优点有:
(1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。
(2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在NFS服务器上设置并使其在整个网络上可用。
(3)存储设备如软盘、光驱及USB设备可以被网络上其它机器使用,这可能可以减少网络上移动设备的数量。
二、与NFS相关的几个文件和命令
1、/etc/exports
对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。
2、/sbin/exportfs
维护NFS的资源共享,可以通过它重新设定/etc/exports的共享目录,卸载NFS Server共享的目录或者重新共享等。
3、/usr/sbin/showmount
上面的文件主要用在NFS Server端,而showmount则主要用在Client端,showmount可以用來查看NFS共享的目录资源。
4、/var/lib/nfs/xtab
NFS的记录文档:通过它可以查看有哪些Client连接到NFS主机的记录。
下面这几个并不直接负责NFS,实际上它们是负责所有的RPC。
5、/etc/default/portmap
实际上,portmap负责映射所有的RPC服务端口,它的内容非常非常之简单。
6、/etc/hosts.deny
设定拒绝portmap服务的主机,即禁止访问的客户端IP列表。
7、/etc/hosts.allow
设定允许portmap服务的主机,即允许访问的客户端IP列表。
三、NFS安装
在主机上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。
1、安装端口映射器portmap(可选)
$ sudo apt-get install portmap
2、在终端提示符后键入以下命令安装NFS服务器
$ sudo apt-get install nfs-kernel-server
3、安装NFS客户端(可选)
$ sudo apt-get install nfs-common
注意:nfs-kernel-server和nfs-common都依赖于portmap。另外,在一些文档中提出还需要使用apt-get来手动安装NFS的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动把它们安装好。
这样,宿主机就相当于NFS Server。同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs-common(第3步)。
四、NFS配置
1、配置portmap
方法1:编辑/etc/default/portmap,将&-i 127.0.0.1&去掉;
方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对Should portmap be bound to the loopback address?选择“否(No)”。
2、配置/etc/hosts.deny
禁止任何host(主机)能和你的NFS服务器进行NFS连接。在该文件中加入:
### NFS DAEMONS
portmap:ALL
mountd:ALL
rquotad:ALL
3、配置/etc/hosts.allow
允许那些你想要的主机和你的NFS服务器建立连接。
下列步骤将允许任何IP地址以192.168.1开头的主机连接到NFS服务器上,具体要看你目标板的端口地址,也可以指定特定的IP地址。在该文件中加入:
### NFS DAEMONS
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.
通过/etc/hosts.deny和/etc/hosts.allow设置对portmap的访问,采用这两个配置文件有点类似&mask&的意思。先在/etc/hosts.deny中禁止所有用户对portmap的访问,再在/etc/hosts.allow中允许某些用户对portmap的访问。
然后重启portmap daemon:
$ sudo /etc/init.d/portmap restart
4、配置/etc/exports
(1)共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享(NFS挂载目录及权限由该文件定义),书写规则是每个共享为一行)。
格式:[共享目录] [主机名或IP](参数,参数...)
第一个参数是要让客户机访问的目录,第二个是你允许的主机IP,最后的()内是访问控制方式。
注意:客户端可以使用主机名或者IP地址指定,在主机名中可以使用通配符(*),IP地址后也可以跟掩码段(/24),但出于安全原因这种情况应该尽量避免。客户端的说明后可在圆括号中加入一系列参数。很重要的一点,不要在最后一个客户端声明的后面留下任何空白或者没关闭括号,因为空白都被解释成客户端的分隔符。
例如我要将/opt/FriendlyARM/mini2440/root_nfs目录让用户的IP共享,则在该文件末尾添加下列语句:
/opt/FriendlyARM/mini2440/root_nfs *(rw,sync,no_root_squash)
/opt/FriendlyARM/mini2440/root_nfs 表示NFS共享目录,它可以作为开发板的根文件系统通过NFS挂接;
* 表示所有的客户机都可以挂接此目录;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份。
注意:可以用主机名来代替*,尽量指定主机名以便使那些不想其访问的系统不能访问NFS挂载的资源。另外,最好加上sync, 否则$ sudo exportfs -r时会给出警告,sync是NFS的默认选项。
(2)下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
(3)查看NFS Server的export list:
$ sudo showmount -e
若更改了/etc/exports,运行以下命令进行更新:
$ sudo exportfs -r
然后重启NFS服务:
$ sudo /etc/init.d/nfs-kernel-server restart
五、启动和停止NFS服务
1、启动NFS的方法和启动其他服务器的方法类似,首先需要启动portmap和NFS这两个服务,并且portmap服务一定要先于NFS服务启动。
$ sudo /etc/init.d/portmap start
$ sudo /etc/init.d/nfs-kernel-server start
2、停止NFS服务
在停止NFS服务的时候,需要先停止NFS服务再停止portmap服务,如果系统中还有其他服务需要使用portmap服务,则可以不停止portmap服务。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop
3、重新启动portmap和NFS服务
$ sudo /etc/init.d/portmap restart
$ sudo /etc/init.d/nfs-kernel-server restart
4、检查portmap和NFS服务状态
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status
5、设置自动启动NFS服务
(1)检查NFS的运行级别:
$ sudo chkconfig --list portmap
$ sudo chkconfig --list nfs-kernel-server
(2)在实际使用中,如果每次开启计算机之后都手工启动NFS服务是非常麻烦的,此时可以设置系统在指定的运行级别自动启动portmap和NFS服务。
$ sudo chkconfig --level 235 portmap on
$ sudo chkconfig --level 235 nfs-kernel-server on
六、NFS客户端配置(NFS测试)
1、在NFS服务器启动后,还需要检查Linux服务器的防火墙设置(一般需要关闭防火墙服务),确保没有屏蔽NFS使用的端口和允许通信的主机,主要是检查Linux服务器iptables、ipchains等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow文件。通常都是在内部局域网中进行开发,再安装系统时最好不要安装防火墙等网络安全软件,以方便使用时的配置。
如果你有防火墙,请确保3和2049端口保持开放。
2、手动挂载
使用mount命令来挂载其他机器共享的NFS目录。
格式:$ sudo mount [Server IP]:/[share dir] [local mount point]
$ sudo mount -t nfs [-o nolock] localhost:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs 或
$ sudo mount -t nfs -o nolock 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs
其中,localhost可以是具体的IP地址,同时挂载点/mnt/root_nfs目录必须已经存在,而且在/mnt/root_nfs目录中没有文件或子目录。
3、自动挂载
(1)另一个挂载其他机器的NFS共享的方式就是在/etc/fstab文件中添加一行,该行必须指明NFS服务器的主机名、服务器输出的目录名以及挂载NFS共享的本机目录,同时必须是根用户才能修改/etc/fstab文件。
格式::/usr/local/pub /pub nfs rsize=8192,wsize=8192,timeo=14,intr
注意:可以根据实际情况修改NFS服务器共享文件夹&:/usr/local/pub&和在本机的挂载点&/pub&,同时挂载点/pub在客户端机器上必须存在。
(2)NFS常见挂载参数:
timeo 如果超时,客户端等待的时间,以十分之一秒计算
retrans 超时尝试的次数
bg 后台挂载(很有用)
hard 如果server端没有响应,那么客户端一直尝试挂载
rsize 读块大小
wsize 写块大小
4、使用autofs来挂载NFS
(1)挂载NFS共享的第三种方法是使用autofs,它使用automount守护进程来管理挂载点,只在文件系统被访问时才动态地挂载。
autofs访问主映射配置文件/etc/auto.master来决定要定义哪些挂载点,然后使用适用于各个挂载点的参数来启动automount守护进程。主映射配置中的每一行都定义一个挂载点,一个分开的映射文件定义在该挂载点下要挂载的文件系统。如/etc/auto.misc文件可能会定义/misc目录中的挂载点,这种关系在/etc/auto.master文件中会被定义。
(2)/etc/auto.master文件中的每个项目都有3个字段,第1个字段是挂载点;第2个字段是映射文件的位置;第3个字段可选,可以包括超时数值之类的信息。
例如:要在机器上的/misc/myproject挂载点上挂载远程机penguin.example.net中的/project52目录。
在/etc/auto.master文件中添加以下行:
/misc /etc/auto.misc --timeout 60
在/etc/auto.misc文件中添加以下行:
myproject -rw,soft,intr,rsize=8192,wsize=8192 penguin.example.net:/proj52
/etc/auto.misc中的第1个字段是/misc子目录的名称,该目录被automount动态地创建,它不应该在客户端机器上实际存在;第2个字段包括挂载选项,如rw代表读写访问权,第3个字段是要导出的NFS的位置,包括主机名和目录。
(3)autofs是一种服务,要启动这项服务,在shell提示下键入以下命令:
$ sudo /sbin/service autofs restart
要查看活跃的挂载点,在shell提示下键入以下命令:
$ sudo /sbin/service autofs status
如果在autofs运行时修改了/etc/auto.master配置文件,则必须在shell提示下键入以下命令来通知automount守护进程重新载入配置文件:
$ sudo /sbin/service autofs reload
5、可以运行df命令查看是否挂载成功:
取消挂载的命令如下:
$ sudo umount /mnt/root_nfs
七、目标板NFS配置操作
主机IP:192.168.1.101
目标板IP:192.168.1.230
将USB转串口连接上,在终端输入minicom与板子连起,作为“超级终端”使用。
启动目标板并连通网络后,首先查看目标板kernel自身是否支持NFS,在minicom中输入cat /proc/filesystems命令查看其中是否有NFS一行,若没有则表示内核不支持NFS,就需要重新编译和烧写内核;有则OK,接下来就可以直接进行mount操作了。
具体命令是:
# mount -t nfs -o nolock 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs
无任何提示表示成功,这时可以进入/mnt/root_nfs目录,对文件进行cp、mv等操作。
但是如果使用命令mount -t nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs,则会有如下的错误提示(也就是省去了&-o nolock&):
# mount -t nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error=-5
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
这时如果使用ls /mnt/root_nfs命令查看该目录内容时,你会发现此时NFS确确实实已经挂载成功了。
然后取消挂载的时候会出现如下的错误提示:
# umount /mnt/root_nfs/
lockd_down: no lockd running.
而成功取消挂载时没有任何提示,同样此时NFS也确实已经取消挂载了。
那么出现上面错误提示的可能原因是:
nfs mount默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
简单的解决方法:kill文件锁(lockd)或者使用mount -o nolock命令。
上面说的文件锁具体是什么原因,目前还没有找到更好的解决办法。不过,如果主机防火墙有设置时,也可能导致目标板无法正常访问。
CCAV前十分钟:中国领导人都很忙,中十分钟:中国人民生活都很幸福.后十分钟:外国人在水深火热之中.
在线时间5 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
Powered by
逛了这许久,何不进去瞧瞧?【图文】嵌入式linux的NFS开发环境的建立及配置实例_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
嵌入式linux的NFS开发环境的建立及配置实例
上传于||文档简介
&&嵌​入​式​L​I​N​U​X​开​发
大小:43.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 嵌入式系统驱动 的文章

 

随机推荐