嵌入式uClinux应用程序的NFS开发

发布者:梦想启航最新更新时间:2013-10-31 来源: 21ic关键字:NFS  uClinux  目标机 手机看文章 扫描二维码
随时随地手机看文章
在目标机上可以运行uClinux了,接着就需要开发完成特定任务的应用程序了。由于嵌入式uClinux的特殊开发环境(主机——目标机),其应用程序的开发模式也有多种。

一种是在主机上编写程序,然后编译、连接、调试,成功后将程序和内核一同编译并下载到目标板。这种模式中不利于开发的问题有:主机和目标机的运行环境(如指令集,函数库等)不同。另一种是通过网线或串口线将目标机和主机连起来,直接在目标机上开发调试。这种模式使用NFS将主机的特定目录mount到目标机上,对主机的操作就是对目标机的操作。采用 NFS模式可以方便应用程序的开发,减少映像文件的下载次数和对flash的烧写次数。这对于缩短开发周期,提高开发效率,加快产品的上市时间相当重要。

1 NFS的简要介绍

NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。

NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。

使用NFS Server还需要激活至少两个系统守护进程:rpc.nfsd用于管理Client使用主机共享目录的权限,包含对Client的IP的判别; rpc.mountd用于管理NFS的文件系统。当Client通过rpc.nfsd后,在使用NFS Server提供的文件前,还必须取得使用权限的认证。rpc.nfsd及rpc.mountd的系统服务是由nfs-utils提供的。

2配置主机和目标机的NFS服务

嵌入式系统的开发是基于主机/目标机,在主机上要安装目标机的交叉编译工具。需要在主机上编译出可以在目标机上运行的可执行文件。该可执行文件通常需要下在到目标机上才可以运行,而利用NFS可以不用下载即可运行。下面以主机RedHat9.0+PC,IP为192.168.111.8;目标机 uCLinux(内核为linux.2.4.x)+S3C44B0,IP为192.168.111.1的环境讲解使用NFS需要的配置。

2.1主机上的配置

NFS服务需要内核(Kernel)支持,因此,内核版本最好高于2.2.x。如果重新编译内核,一定要选择支持NFS。主机上的配置均以root用户进行。

2.1.1确认是否安装了NFS服务

NFS服务一般在RedHat9.0安装时就默认安装的。检查是否安装了nfs的方法是:
(1)查看/etc/rc.d/init.d目录下是否有nfs和nfslock文件,如果有说明主机已经安装了nfs服务。(#ls /etc/rc.d/init.d/)
(2)#rpm -qa| grep -i nfs,出现redhat-config-nfs-1.0.4-5,
nfs-utils-1.0.1-2.9这表示安装了NFS。如果没有安装,安装过程如下:
#mount /dev/cdrom /mnt/cdrom(挂载光盘)
#cd /mnt/cdrom/RedHat/RPMS
#rpm -ivh nfs-utils-1.0.1-2.9.i386.rpm rpm2.1.2检查RPC程序是否已经启动

#rpcinfo –p,检查系统RPC运行状况,若出现
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper 表示已经启动RPC程序。

2.1.3启动主机上的NFS服务,并关闭防火墙

NFS服务一般不会在开机时自动启用。启动该服务:
(1)#ntsysv,选中nfs,nfslock和portmap;或者#setup,选择System services里的nfs,nfslock和portmap。
(2)启用portmap服务,# /etc/rc.d/init.d/portmap start。也可以#service nfs start 和#service portmap start启动服务。激活portmap后,就会出现一个端口号为111的rpc服务。至于nfs则会激活至少两个以上的系统守护进程,然后就开始监听 Client的请求,用#cat /var/log/messages可以看到以上操作是否成功。
由于防火墙会关闭NFS服务(2049端口号)的对外服务,所以必须关闭防火墙。在RedHat9.0上运行setup,选择Firewall configuration,选中No firewall。然后到上一层菜单选择System services,去掉ipchains 和iptables 两项服务。

2.1.4设置共享目录

在文件/etc/exports中设定允许被访问的共享目录以及访问的权限。该文件的格式:/共享目录 主机名称或IP(权限参数)。修改此文件添加共享目录(该目录要存在),/home/pub *() //允许所有主机访问此目录,权限为rw.
/home/nfs 192.168.111.8(rw) //允许IP为192.168.111.8的主机访问此目录。权限为读写。
权限参数设定为:
rw:读写权限 ro:只读权限
no_root_squash:如果是root使用共享目录,对于此目录,他就具有root的权限
root_squash:如果是root使用共享目录,那么他的权限将被压缩为匿名者(nobody)
all_squash:不论NFS的使用者身份如何,他都会被压缩成为匿名使用者(nobody)
anonuid:前面的匿名使用者的UID设定值,通常为nobody;也可自行设定UID的值。(这个UID必需要存在于/etc/passwd中)
anongid:同anonuid,但是变成groupID就是了
sync:资料同步写入到内存与硬盘中
async:资料会先暂存于内存当中,而不会直接写入硬盘[page]

2.1.5使/etc/exports文件生效,导出共享目录

修改了/etc/exports文件后,不需要重新激活nfs,只需要重扫描/etc/exports的文件,将设定重新加载即可,所使用的命令格式为#exportfs [-aruv]。其参数说明:
-a 全部挂载(或卸载) /etc/exports 文件中的设定
-r重新挂载/etc/exports里的设定,此外也更新/etc/exports及/var/lib/nfs/xtab
-u 卸载所挂目录
-v将共享的目录的情况显示到屏幕上
这里,输入#exportfs –rv,会将/etc/exports中所设置的共享目录输出。
exporting 192.168.111.8:/home/nfs
exporting *:/home/pub
reexporting 192.168.111.8:/home/nfs to kernel
每次修改了/etc/exports文件后都需要运行一次该命令。

2.1.6检查主机配置是否正确

(1)检验所共享的目录内容,可以查看/var/lib/nfs/xtab这个文件:
# cat /var/lib/nfs/xtab 显示共享出去的目录信息。也可以用#showmount–e 192.168.111.1显示主机上的共享目录.
(2)观察NFS激活的端口号,# netstat –utln显示内容中有
udp 0 0 0.0.0.0:2049 0.0.0.0:*
这里2049是nfs服务所开启的端口,其它的端口是RPC Server其它程序随机产生的,每次restart nfs都会得到不一样的端口号。
(3)mount自己提供的共享目录。#mount –t nfs 192.168.111.1:/home/pub /mnt/nfs,将主机/home/pub挂载到/mnt/nfs目录下。如果 mount成功,表示主机配置正确。#cd /mnt/nfs,#ls 看见的内容就是/home/pub下的内容。

2.1.7卸载共享目录,停止NFS服务

卸载共享目录#umount /mnt/nfs(#umount /home/nfs)
停止(启动)portmap服务 # /etc/rc.d/init.d/portmap stop(restart)
停止(启动)nfs服务 #/etc/rc.d/init.d/nfs stop(restart)

2.2目标机上的配置

目标机为内核为ARM7TDMI的S3C44BO板,运行uClinux操作系统。在目标机端使用NFS挂载主机上的共享目录,需要配置内核和相应的用户程序(make menuconfig)。

2.2.1配置内核

Networking options --> (缺省) //开启网络功能
Network device support --> (缺省)
File systems ->Network File Systems——〉 //支持NFS文件系统
<*> NFS file system support
# Provide NFSv3 client support

2.2.2用户程序配置

Network Applications -->
# portmap
BusyBox -->
# mount(mount nfs support)(mount/unmount 命令有两个地方可以选择,Filesystem Applications 或BusyBox。这里推荐选择BusyBox。
配置完毕后,将编译生成的映像文件image.rom下载到目标机上flash中。

3 基于NFS的应用程序开发


3.1在主机上编译程序,并生成在目标机上运行的程序

在主机/home/pub下编辑hi.c,其内容:
#include
main(){printf(“hi! Good!n”);}
交叉编译hi.c,#arm-elf-gcc –Wall –Wl,-elf2flt –o hi hi.c生成flt格式的可执行文件hi。修改hi的权限#chmod 711 hi。该文件可以直接下载到目标机上运行,这里利用NFS看其执行情况。

3.2目标机利用NFS挂载主机并进行调试

用串口线将主机的COM1和目标机的COM0连接起来,同时接上网线。在主机上打开minicom(设置参数:57600 8N1,无流控)用于同目标机通讯。目标机上电或者复位,开始启动uClinux,显示信息成功后进入sh。

在目标机上建立/var/nfs用于挂载主机上的目录(这里采用的是romfs只读文件系统,/var使用的是RAM disk驱动的ext2文件系统。所以仅/var可以用于读写,其它目录只可以读)# mkdir /var/nfs
启动目标机上portmap服务 # portmap &
挂载主机上的共享目录#mount -t nfs 192.168.111.1:/home/pub /var/nfs
#ls /var/nfs可以看到主机上/home/pub的文件。此时,可以运行该目录下的可执行程序hi,#./hi(注意要加“./”)出现hi! Good!。程序正常运行,将其编译到内核里。将hi拷贝到uClinux源码包的/romfs/bin下编译,生成的image.rom可以下载到 flash。在板子上的/bin下就有hi程序了,并且可以直接执行hi。

卸载使用umount # umount /var/nfs。如果让目标机启动时自动运行portmap服务,可以修改rc文件(uClinux源码中),在最后加入/bin/portmap&,mkdir /var/nfs。

4 小结

使用NFS开发模式,关键在于对主机和目标机的配置。如果配置不当,就会mount失败。以下是值得注意的地方:
mount成功,可是运行程序. /hi时报告错误:Permission denied.即主机拒绝操作。需要修改主机上程序的权限chmod 777 /home/pub/hi。然后在目标机端运行./hi即可。
主机上设置时候一定要关闭防火墙,不然目标机mount的时候没有响应。
目标机上一定要先开启portmap服务。
主机和板子的IP在同一个网段。
如果要运行大的应用程序,在Mount的时候最好加上:
-o rsize=1024,wsize=1024,timeo=15的参数,否则多半会得到server not responsing的提示信息。
关键字:NFS  uClinux  目标机 引用地址:嵌入式uClinux应用程序的NFS开发

上一篇:Linux系统启动时间优化方案
下一篇:嵌入式Linux实时化技术

推荐阅读最新更新时间:2024-05-02 22:49

用CCD摄像获取高速运动目标的图像
    摘要: 在超速抓拍系统中,如何用CCD摄像机获取高速运动目标的图像是决定方案论证及系统设计成败的关键。文中对电子快门速度和成像的关系及用普通摄像机捕捉高速运动目标可能产生的问题进行了分析并提出选用非标摄像象机时应考虑的几个主要方面。        关键词: CCD摄像机 物像关系 电子快门 逐行扫描 帧频率 1 引言     近几年,国家对基础建设的投资日益加大,公路建设更是水涨船高。现代化交通监理的需求越来越迫切。公安部已提出:科技强警,向科技要警力。超速抓拍系统正在这种形势下提出的。     超速抓拍系统实际上是一种智能化交通监理系
[电源管理]
联发科全年智能出货目标3亿套LTE 5%
    IC设计大厂联发科(2454)于今(27)日召开法说会。联发科总经理谢清江表示,今年全年联发科出货智慧型手机目标为3亿套,较去年的2.2亿套,年成长约36%,而在市场关心4G LTE的部分,谢清江表示,LTE今年占比约会达5%的水准。 以联发科在LTE的产品推出计划,谢清江表示,LTE产品会先推出AP和Modem分开的产品,第二季即会有客户进入量产,而整合的LTE SoC单晶片要到第三季才有Sample推出,第四季将有客户进入量产,入门款、中低阶和高阶都有。 谢清江表示,联发科LTE会是很完整的产品线,四核、八核都会有产品,制程也将以20nm甚至16nm推进,相信可满足客户需求。 而就所有智慧型手机晶片的分布来看,谢清江表示
[手机便携]
基于uClinux的远程温度监控系统的实现
引言 当今社会已经进入数字信息技术和网络技术高速发展的后pc(post-pc)时代,嵌入式设备已经渗透到各个领域,逐渐向着网络化方向发展,如视频监控、网络摄像头、远程控制、信息家电等都离不开嵌入式设备与网络的结合。 目前,国内的远程温度监控系统主要是用单片机和pc终端完成,单片机将采集到数据的经串口发送到pc机,pc机将数据处理后,采用tcp/ip协议将数据发送到互联网上,实现数据的远程采集。这种方式依赖于pc机,不灵活、不稳定、功耗高,采用ARM架构的微处理器为核心的嵌入式单元作为独立的终端实现的远程温度监控系统,具有体积小、价格低、功耗低、稳定可靠的特点,可用于远程监控、教学实验等。 1.系统的硬件组成 本文描
[单片机]
基于<font color='red'>uClinux</font>的远程温度监控系统的实现
arm linux上建立nfs文件系统
nfs文件系统建立(主机ip地址为192.168.3.170,开发板ip地址为192.168.3.100) 1.安装 nfs-kernel-server # sudo aptitude install nfs-kernel-server 2、设置主机共享目录,我就直接用根目录,编辑文件/etc/exports,增加以下内容 /home/puke/arm *(rw,sync,no_root_squash) 表示在任意子网上共享/目录,该目录可读写(rw),同步(可能要执行sudo chmode 777 exports) 3、启动NFS服务,在UBUNTU终端输入: # sudo /etc
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved