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等。
④ 系统时间设置。系统时间可以手动设置,也可以通过NTP服务自动同步。
⑤ 网络共享管理。包括共享名设置、属性、共享路径、有效用户设置,是否可写操作等。
本项目基于EP9315实现了一个基本的NAS系统,加以完善就可以作为中小型用户的存储系统方案。通过本项目,便于开发者对ARM9微处理器和嵌入式开发作更深入的实践研究,推广了ARM微处理器更广泛的应用。