在应用程序方面: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微处理器更广泛的应用。
(李维成 刘晓平)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。