以嵌入式微处理器和嵌入式操作系统为核心的嵌入式技术是近年来一项新兴的热门技术,特别是以ARM公司的32位IP核为基础的ARM嵌入式微处理器,以其高性能、低功耗、低成本等优势,得到了广泛的应用。然而,目前在网络存储领域,内商用市场上的网络存储系统大都采用x86等成熟的硬件平台和商业化操作系统,成本昂贵、核心技术知识产权受保护。本文提出把ARM9微处理器和源码开放的嵌入式Linux操作系统应用在网络存储领域,构建一个附网络存储NAS(Networkattached Storage)基本系统,拓展了ARM9微处理器的应用,也为NAS系统的发展提供了方向。
NAS系统是一个具有专一功能的网络存储系统,可实现与网络设备直接连接,使客户机与存储器之间直接传送数据;结合具有开放式、强大和稳定的网络性能的嵌入式Linux操作系统,内置与网络连接所需的协议,能实现低成本、即插即用、管理和设置简单的存储系统。
1 系统结构
NAS系统把存储设备和网络接口集成在一起,直接通过网络存取数据,使其成为专用的网络文件存储及文件备份设备。因此,一个基本的NAS系统应包括基本的硬件设备、接口,操作系统,网络通信和上层应用程序4个部分。
在硬件方面,系统采用32位的嵌入式微处理器EP9315作为主CPU。由于EP9315集成1/10/100 Mbps的以太网LAN控制器,因此只需外接物理层(PHY)接口芯片,即可实现稳定、高效率的以太网接入。在操作系统方面,作为一个只需要实现网络存储和文件管理的系统,应该采用面向存储的专用操作系统。基于Linux强大和稳定的网络功能、源代码的开放性,系统选用嵌入式Linux作为NAS的操作系统;通过对Linux的裁剪,去掉许多通用的功能,能大大提高设备的性能。
网络通信方面: 由于NAS服务器采用Linux操作系统,客户机PC一般都是Windows系统,Linux系统支持TCP/IP协议,但是不支持NetBIOS(Network Basic Input and Output System),因此两者之间的通信需要一个中介。本系统利用Samba来实现个功能。
在应用程序方面:NAS设备的远程访问和管理以及数据传输,都需要相应的应用程序来支持;否则,即使将NAS接入网络中,对用户来说它也只是个无法访问的“黑箱”。本系统的应用程序实现了硬盘管理、用户和组管理、网络配置、系统时间设置、网络共享管理等。NAS系统设计框图如图1所示。
2 系统硬件设技
系统采用Cirrus Logic公司的ARM9系列的32位微处理器EP9315作为主控制器。
2.1 EP9315主要特性介绍[2]
EP9315内嵌先进的运行于200 MHz的ARM920T微处理器内核,内核工作电压为1.8 V,输入/输出电压为3.3 V;内部集成了一个高性能的1/10/100 Mbps以太网媒体访问控制器(MAC),通过与支持MII接口的外置PHY(物理层接口)简单连接,系统即可实现高性能、低开销的Internet访问功能。
EP9315的IDE接口可以支持与两个ATAPI工业标准兼容设备的连接,支持主模式和从模式,其内部的DMA控制器支持Multiword DMA和Ultra DMA模式的数据传输。EP9315的其他特性还有:通用存储器接口(SDRAM、SRAM、ROM和Flash),Raster/LCD接口,带12位A/D转换器的触摸屏接口,键盘接口,UART接口,3通道USB2.0全速主口,12通道DMA控制器等。其丰富的外围接口大大降低了系统开发费用。
2.2 硬件电路
NAS系统主要硬件结构框图如图2所示[3]。
其中主要部分功能描述如下:
复位电路 实现系统上电复位和在系统工作时用户按键复位。电源电路 为12 V—5 V、5 V—3.3 V和5 V—1.8 V的电压转换。IDE硬盘需要12 V电压,EP9315微处理器的内核工作电压为1.8 V,其片内功能模块的工作电压为3.3 V,电压转换采用7805和LM1117系列转换器实现。电源管理系统功能框图如图3所示。
RS232接口电路 用于与上位PC机的串口通信,通过串口实现对操作系统的开发、调试。在系统的初始状态,EEPROM和Flash存储器均为空,此时需要设置系统启动配置模式为16位串行启动,以把初始化代码写到Flash中。
JTAG调试接口 可对芯片内部的所有部件进行访问,通过该接口对系统进行软、硬件调试和编程,进行应用程序的开发、调试。
Flash存储器 用于存放用户应用程序、嵌入式Linux操作系统以及其他在系统掉电后需要保存的用户数据等。
SDRAM存储器 为系统程序的运行空间,系统及用户数据、堆栈均位于SDRAM存储器中。
EIDE接口 用于实现IDE硬盘的接入。
1/10/100 Mbps以太网物理层接口 为系统提供以太网接入的物理通道。本系统通过该接口接上以太网物理层接口芯片KS8721BL,来实现高速的以太网接入,大大简化了系统的硬件电路设计。
3 NAS系统的软件设计
当完成系统的硬件设计与调试以后,接下来的就是嵌入式Linux操作系统的移植以及NAS应用程序的开发。NAS系统的软件主要包括嵌入式Linux操作系统,设备驱动程序、文件共享协议及应用程序。NAS系统软件的体系结构如图4所示。
作为一个NAS系统,整个系统中必须有一个核心操作系统,作为对硬件的管理,软件的协调执行,并对外部调用提供 API。在核心操作系统之上是外部硬件设备驱动程序,使硬件能正常工作,为系统的正常运行提供基本条件。因为 NAS主要是实现网络存储,所以要更多地考虑对网络和存储两方面功能的支持,在设备驱动之上是对一些基本网络协议的支持和对专用网络存储服务器进行网络数据访问的文件共享协议(SMB)的支持,使Windows、Linux用户都能对NAS设备进行访问。最上层是应用程序模块,提供UI(User Interface),实现对NAS的配置和管理。
3.1 嵌入式Linux操作系统
3.1.1 嵌入式系统的Bootloader
上面的软件体系结构图没有单独列出初始化代码Bootloader,但它是嵌入式系统重要的一部分。对任何计算机系统来说,系统的启动都有一个初始化的过程,嵌入式系统也不例外。本嵌入式系统采用Redboot作为系统的Bootloader。Redboot是一个采用eCos开发的程序,是目前比较流行的一个功能强大、可移植性强的Bootloader[4]。
移植到本系统的Redboot除了具有一般Bootloader的硬件初始化和引导内核功能外,还具有以下功能:引导脚本以方便启动Linux操作系统,命令行接口,串行和网络通信协议,内嵌GDB stub以支持GDB调试,支持Flash映像文件系统,通过BOOTP协议支持网络引导,也可配置静态IP。Redboot是建立在eCos系统上的一个独立的最小系统,可通过eCos系统提供的配置工具(比如图形化的Configtool)对Redboot进行源代码级别的裁剪配置。
3.1.2 嵌入式Linux的移植
由于嵌入式设备没有足够的内存和存储资源来完成编译过程,通常的方法是在主机上完成针对目标机的代码编译。这样的工具就是交叉编译工具,交叉编译工具集有专门的网站可以下载,并下载针对不同ARM处理器的Linux内核移植补丁。本系统采用Linux2.4.21的内核,采用的交叉编译工具集合为cross2.95.3。
嵌入式Linux是在标准的Linux基础上,经过适当的简化、裁剪,加入一些特定的功能,形成一个精巧、高效、满足特定应用需求的专用(定制)操作系统。它具有用户可裁剪、可配置的特点。NAS系统最重要的是存储,通过对Linux的裁剪,去掉许多通用的功能,使其成为一个专用于存储、精简、高
效的操作系统。
Cirrus Logic公司已为内核写好了针对EP9315微处理器的补丁,加上这个补丁的内核就是一个能运行在基于EP9315微处理器系统上的版本,接下来就可以在此基础上进行内核的配置与编译。通过不断的配置、编译,产生合适的嵌入式Linux内核,使之在功能和大小之间取得优化的结果,以满足本系统的需要。
3.2 Linux设备驱动程序开发
嵌入式系统的差异性决定了系统开发者不但需要进行特定硬件的设计,同时需要编写相关的设备驱动程序,它是内核用于完成对物理设备的控制操作的功能模块。除了CPU、内存以及其他很少的几个部分之外,所有的设备控制操作都必须由被控设备相关的代码,也就是驱动程序来完成[5]。
在Linux中,将各种设备大致分为3种基本类型:字符设备、块设备及网络设备。其中,字符设备是指采用字符流方式访问的设备,如字符终端、串口。对应的字符设备驱动的接口是标准的文件系统调用接口。
块设备是采用数据块方式访问的设备,如IDE硬盘等。由于块设备通常都提供文件系统支持,因此常用的设备访问方式是通过文件来进行的。字符设备和块设备在Linux中都被看成是一种特殊的文件,称为“设备文件”。由于每个设备都至少由文件系统中的一个文件来代表,这样的设备文件在系统中就唯一确定了对应的设备。网络设备是采用数据包传输方式访问的设备。与前两者不同,Linux采用的方法是给它们分配一个唯一的名字(比如eth0);同时,内核和网络设备驱动间的通信采用了一套与数据包传输相关的函数,如最常见的套接字(socket)接口。网络设备通过ifconfig系统调用来创建和配置。
其他的还有一些驱动程序不属于以上3类,比如USB等总线驱动。它们一般是作为内核提供的公共服务,和其他驱动联合起来使用。
3.3 文件共享协议
由于NAS服务器采用Linux操作系统,客户机PC一般都是Windows系统,而Windows和Linux平台之间的文件格式是完全不同的,因此Linux不能对Windows用户直接提供基本服务。本系统通过应用SMB协议实现这种功能[6]。Samba是一套使用SMB(Server Message Block)协议的应用程序,通过支持这个协议,Samba允许Linux服务器与Windows PC机之间进行通信。本系统采用的Samba的版本为samba3.0.20b。
在开发过程中,需要在Linux服务器上进行所有的软件开发。本系统通过建立网络文件系统(Network File System,NFS),把Linux服务器上的特定分区共享到目标系统上,实现在目标系统上操作Linux服务器和在线对程序进行调试和修改。
3.4 NAS系统应用程序设计
NAS设备本身一般没有显示器、键盘、鼠标等这些与交互的外设,那么通过什么途径使系统管理员完成对这样一个“黑箱”的配置和管理呢?NAS系统应用程序的设计主要就是要实现对“黑箱”的配置和管理。基于 Web(Webbased)的管理是目前在 NAS系统管理中用得最多、最方便的方式之一。本系统实现的功能如下:
① 硬盘管理。系统可挂载IDE、USB硬盘,支持VFAT/EXT2/EXT3文件系统,每个分区能有独立的文件系统。
② 用户和组管理。支持用户和组的增加、修改、删除。一个用户可以是几个不同组的成员。
③ 网络配置。局域网中如果有DHCP服务器就无需设置IP地址,否则,通过超级终端,在串口控制命令行设置IP、DNS等。
&nbs
p; ④ 系统时间设置。系统时间可以手动设置,也可以通过NTP服务自动同步。
⑤ 网络共享管理。包括共享名设置、属性、共享路径、有效用户设置,是否可写操作等。
本项目基于EP9315实现了一个基本的NAS系统,加以完善就可以作为中小型用户的存储系统方案。通过本项目,便于开发者对ARM9微处理器和嵌入式开发作更深入的实践研究,推广了ARM微处理器更广泛的应用。
参考文献
[1] 胡天翔.网络存储技术在企业中的发展及应用[J] .计算机技术与发展,2006,16(7)。
[2] Cirrus Logic.EP9315 Users Guide.2004。
[3] 李驹光,郑耿,江泽明. 嵌入式Linux系统开发详解——基于EP93XX系列ARM[M] . 北京:清华大学出版社,2006。
[4] Red Hat.RedBoot Users Guide.2001。
[5] Alessandro Rubini Sc Jonathan Corbet.LINUX设备驱动程序[M]. 魏永明,骆刚,姜君,译. 第2版. 北京:中国电力出版社,2002。
[6] 刘承凌,刘发贵. 基于Samba的Linux与Windows资源共享的实现[J]. 现代电子技术,2004(23)。