嵌入式Linux NFS方式下应用程序的实现

发布时间:2010-10-10 22:22    发布者:conniede
关键词: arm , linux , nfs , 服务器
1 前言

嵌入式Linux下的应用程序的开发,与Windows下应用程序的开发大不相同。在Windows环境中,可以直接在PC上使用各种集成编译开发工具,完成程序编辑、编译和运行,而在嵌入式Linux环境下,缺少简单、高效的开发工具,程序的开发需要在PC+嵌入式Linux平台完成。因此,在程序的调试运行过程中,需要在Linux服务器和嵌入式开发板间交换信息,这种信息交换目前最常用的方式是FTP方式,即:先在Linux服务器上编辑源文件,然后交叉编译生成可执行文件,再通过FTP下载到嵌入式主机系统中运行,如出现错误则回到Linux服务器上重新编译,再下载运行,直到程序正确运行为止。但FTP方式缺点是效率比较低,而且无法在线调试。这里笔者讨论另一种更高效率的信息交换方式,即:NFS(网络文件系统)方式下嵌入式Linux下的应用程序的实现方法。本文以三星公司ARM9内核芯片S3C2410开发板接口为基础,软件采用Linux 2.4.21,编译器为arm-linux-gcc的交叉编译器。

2 嵌入式Linux开发平台的建立

在嵌入式Linux下开发应用程序,必须建立一个完善的嵌入式Linux开发环境。

2.1 嵌入式Linux开发平台构架

嵌入式Linux 开发平台构架主要包括:嵌入式Linux 服务器、工作站、嵌入式开发板系统,其结构如图1所示。


嵌入式Linux 服务器由一台PC充当,主要作为嵌入式Linux内核编译、应用程序编译的公共平台,这里安装标准的Redhat Linux操作系统 ,工作站为普通局域网计算机,可以是一台或多台,安装Windows操作系统,一般用来完成各种日常工作,可视需要与Linux 服务器、嵌入式开发板系统连接,嵌入式开发板系统是用来开发嵌入式应用程序,它必须与Linux 服务器进行网络连接,目的是建立网络文件系统,把Linux服务器上的特定目录共享到待调试的嵌入式开发板系统上,从而实时地对应用程序进行编辑、编译、调试。另外嵌入式开发板系统可通过串口与工作站RS232连接,使用工作站上的超级终端作为嵌入式开发板系统上的输入/输出终端。

2.2 嵌入式开发板操作系统的移植

嵌入式开发板操作系统就是嵌入式Linux,它指的是标准Linux操作系统的内核,把标准Linux操作系统的进行适当的裁剪,加入一些特定的功能,形成一个小巧、高效的满足特定需要的专用操作系统,然后移植到ARM体系结构的开发板系统上,移植主要包括建立交叉编译环境、修改内核源码、内核裁剪和内核编译4个环节。

2.2.1建立交叉编译环境

交叉编译是指利用运行在某台计算机上的编译器编译某个源程序生成在另一种结构计算机上运行的目标代码的过程。编译器的生成依赖于相应的函数库,而这些函数库又得依靠编译器来编译。建立交叉编译环境就是将ARM使用的编译器(如:arm-linux-gcc)和函数库(如:glibc)安装到指定目录,并使用configure配置好Makefile文件。

2.2.2 修改内核源代码

Linux内核分为体系结构相关部分和体系结构无关部分。在Linux启动的第一阶段,内核与体系结构相关部分首先执行,它会完成硬件寄存器设置,内存映射等初始化工作。然后把控制权转给内核中与系统体系结构无关的部分。在移植工作中要修改的代码主要集中在与体系结构相关的部分。ARM芯片的体系结构在arch/arm目录下。首先根据芯片手册修改boot/init.S文件中的:片选组基地址寄存器、DRAM存储配置寄存器、DRAM片选寄存器、中断屏蔽寄存器等。然后修改内核的链接及装入ELF。最后将系统中可用页面的数目、文件系统大小等信息以参数形式从启动代码传给内核,完成设置陷阱,初始化中断,初始化计时器,初始化控制台等一系列操作而使内核正常启动。

2.2.3 内核裁剪和编译

Linux内核的裁剪支持三种配置方式,即make confg、make menuconfig、make xconfg,一般采用菜单式用命令make menuconfig对系统进行裁剪样较为简单(具体见ARM9配置手册)。内核裁剪之后,最后要进行交叉编译后在arch/arm目录下生成内核映象文件zImage,分别使用命令如下:make clean(清理编译环境);make dep(编译依赖文件);make zImage(编译内核)进行内核编译。

3 嵌入式Linux NFS开发环境的建立

NFS(Network File System)即:网络文件系统,它是一种将远程主机上的目录通过网络连接到本地主机的一种机制。通过对网络文件系统的支持,用户可以很方便地在本地主机上操作远程主机上的共享目录。因此,可以通过建立网络文件系统,把Linux服务器上的特定目录共享到嵌入式开发板系统上,这样就可以直接在嵌入式开发板上操作Linux服务器,特别是能够实时在线地对程序进行编辑、调试、运行,极大地提高了嵌入式Linux下的应用程序的开发的效率。  
嵌入式Linux 开发平台下的NFS环境配置,主要是对嵌入式Linux服务器端的NFS配置和嵌入式开发板系统的NFS客户端配置,使其支持NFS。

3.1 Linux服务器端的NFS配置

以root账户登录Linux服务器,编辑共享目录配置文件exports,设定共享目录及权限,执行# vi/etc/exports命令,在exports文件中添加 /home/work 192.168.33.*(rw)后保存,其作用是是将/home/work设为共享目录,IP地址在192.168.33.*范围内的计算机可以用读写的方式访问共享目录/home/work;接着执着命令
#/etc /rc.d /init.d /protmap start来进行端口映射;最后执行命令
#/etc /rc.d /init.d /nfs start来启动NFS服务,启动NFS服务后,还需检查Linux服务器的iptables、ipchains等选项及文件/etc/hosts.deny、/etc/hosts.allow来确保没有屏蔽NFS使用的端口和允许通信的主机。配置完毕后,可以在Linux服务器上运行如下命令:

# mount –t nfs 192.168.33.1:/home/work /mnt 进行NFS服务器的回环测试,验证共享目录是否能够被访问,若配置成功,执行 # is/mnt命令后,能够在/mnt目录中看到/home/work共享目录中的内容。


3.2 嵌入式开发板系统NFS客户端的配置

首先运行在嵌入式开发板系统的Linux内核支持NFS客户端,运行#make menuconfig命令后,选择菜单中Fils System--->选项,按车回键后选择下级菜单中的Network File System--- >选项,按车回键后选中级菜单中的NFS system support和Provide NFSv3 client support两项,保存退出;然后分别运行# make clean、# make dep、# make zImage命令来重新编译内核,最后在arch/arm/boot中生成一个内核映像文件zImage;然后在Redboot下运行命令Redboot >load –v –r –b 0x312000,将Linux内核文件zImage下载到嵌入式开发板系统的SDRAM并烧写到FLASH中,其中0x312000为开发板系统SDRAM的地址,文件下载完毕后出现如下提示信息:Raw file loaded 0x00312000-0x003fae5f,再运行命令Redboot >fis create –b 0x312000 -1 0xc37df zImage将其保存在FLASH文件系统中;最后分别执行命令fis load ramdisk.gz、 load zImageis、exec –r ox1000000 0x312000后,开发板系统中的配置好嵌入式Linux NFS开始运行。在嵌入式开发板系统的Linux Shell下,运行# mkdir /mnt/nfs命令来建立Linux服务器输出共享目录的挂载点,运行# mount –o nolock –t nfs 92.168.33.1: /home/work /mnt/nfs命令使Linux服务器的输出目录:/home/work通过NFS映射到了嵌入开发板系统的/mnt/nfs。

4 嵌入式Linux NFS方式下应用程序的实现

完成了对Linux服务器端的NFS配置和嵌入式开发板系统NFS客户端的配置后,使双方均能支持NFS才能在此方式下进行应用程序的开发。

4.1 NFS方式的应用程序开发流程

首先在Linux服务器上编辑源文件,然后交叉编译,最后生成可执行文件,生成的执行文件在嵌入式开发板端通过NFS方式挂载Linux服务器的共享目录,让应用程序直接运行在嵌入式开发板系统中,进行编译、调试。其具体开发流程如图2所示。


当完成了应用程序的调试与运行后,就可以将调试好的应用程序下载到嵌入式开发板系统的FLASH文件系统,或直接编译到嵌入式Linux内核并烧写到系统的FLASH,从而最终形成一个独立的嵌入式应用系统。

4.2 NFS方式下的一个应用程序实例

下面是一个求n!的阶乘的简单示例,来说明基于嵌入式Linux的应用程序的实现方法。
第一步:编辑应用程序:

在Linux服务器的工作目录:即输出共享目录/home/work下使用Vi文本编辑器来编辑应用程序,应用程序取名为jiecheng.c。输入命令 # vi jieccheng.c,完成源程序代码编辑后,保存文件并退出Vi。

源程序代码如下:


第二步:编译应用程序:

输入命令 # arm-linux-gcc –o jiecheng jieccheng.c来编译应用程序,当命令执行完毕后,会在/home/work目录下生成可执行文件jiecheng。

第三步:在嵌入式开发板端挂载Linux服务器的输出共享目录:

启动在嵌入式开发板端系统的配置好的Linux,使用PC超级终端作为用户操作界面,输入如下命令样 # mkdir /mnt/fns //建立Linux服务器的输出共享目录挂载点

# mount –o nolock –t fns 1992.169.3.1:/home/work/ /mnt/nfs //Linux服务器的输出目录:/home/work通过NFS映射到了嵌入开发板系统的/mnt/nfs。

# cd /mnt/nfs //进入目录

# ls //显示目内容

# ./jiecheng //运行求阶乘程序

程序运行后,用户可以在使用PC超级终端上输入一个整数后可以看到输出结果。

5 结束语

由于采用NFS方式避免了将可执行文件从Linux服务器频繁下载到嵌入式开发板端的过程,因此用这种方式开发应用程序可以大大提高应用程序的开发效率。本文的创新点是:在自已构造的基于ARM9内核芯片,处理器为S3C2410为基础的开发板系统上,实现了NFS方式下的应用程序开发。
本文地址:https://www.eechina.com/thread-31417-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表