NAS系統(tǒng)軟件的體系結構如圖4所示。作為一個NAS系統(tǒng),整個系統(tǒng)中必須有一個核心操作系統(tǒng),作為對硬件的管理,軟件的協(xié)調(diào)執(zhí)行,并對外部調(diào)用提供API。在核心操作系統(tǒng)之上是外部硬件設備驅(qū)動程序,使硬件能正常工作,為系統(tǒng)的正常運行提供基本條件。因為NAS主要是實現(xiàn)網(wǎng)絡存儲,所以要更多地考慮對網(wǎng)絡和存儲兩方面功能的支持,在設備驅(qū)動之上是對一些基本網(wǎng)絡協(xié)議的支持和對專用網(wǎng)絡存儲服務器進行網(wǎng)絡數(shù)據(jù)訪問的文件共享協(xié)議(SMB)
NAS系統(tǒng)軟件的體系結構如圖4所示。
作為一個NAS系統(tǒng),整個系統(tǒng)中必須有一個核心操作系統(tǒng),作為對硬件的管理,軟件的協(xié)調(diào)執(zhí)行,并對外部調(diào)用提供 API。在核心操作系統(tǒng)之上是外部硬件設備驅(qū)動程序,使硬件能正常工作,為系統(tǒng)的正常運行提供基本條件。因為 NAS主要是實現(xiàn)網(wǎng)絡存儲,所以要更多地考慮對網(wǎng)絡和存儲兩方面功能的支持,在設備驅(qū)動之上是對一些基本網(wǎng)絡協(xié)議的支持和對專用網(wǎng)絡存儲服務器進行網(wǎng)絡數(shù)據(jù)訪問的文件共享協(xié)議(
SMB)的支持,使Windows、Linux用戶都能對NAS設備進行訪問。最上層是應用程序
模塊,提供UI(User Interface),實現(xiàn)對NAS的配置和管理。
3.1 嵌入式Linux操作系統(tǒng)
3.1.1 嵌入式系統(tǒng)的Bootloader
上面的軟件體系結構圖沒有單獨列出初始化代碼Bootloader,但它是嵌入式系統(tǒng)重要的一部分。對任何計算機系統(tǒng)來說,系統(tǒng)的啟動都有一個初始化的過程,嵌入式系統(tǒng)也不例外。本嵌入式系統(tǒng)采用Redboot作為系統(tǒng)的Bootloader。Redboot是一個采用eCos開發(fā)的程序,是目前比較流行的一個功能強大、可移植性強的Bootloader[4]。
移植到本系統(tǒng)的Redboot除了具有一般Bootloader的硬件初始化和引導內(nèi)核功能外,還具有以下功能:引導腳本以方便啟動Linux操作系統(tǒng),命令行接口,串行和網(wǎng)絡通信協(xié)議,內(nèi)嵌GDB stub以支持GDB調(diào)試,支持
Flash映像文件系統(tǒng),通過BOOTP協(xié)議支持網(wǎng)絡引導,也可配置靜態(tài)
IP。Redboot是建立在eCos系統(tǒng)上的一個獨立的最小系統(tǒng),可通過eCos系統(tǒng)提供的配置工具(比如圖形化的Configtool)對Redboot進行源代碼級別的裁剪配置。
3.1.2 嵌入式Linux的移植
由于嵌入式設備沒有足夠的
內(nèi)存和存儲資源來完成編譯過程,通常的方法是在主機上完成針對目標機的代碼編譯。這樣的工具就是交叉編譯工具,交叉編譯工具集有專門的網(wǎng)站可以下載,并下載針對不同ARM處理器的Linux內(nèi)核移植補丁。本系統(tǒng)采用Linux2.4.21的內(nèi)核,采用的交叉編譯工具集合為cross2.95.3。
嵌入式Linux是在標準的Linux基礎上,經(jīng)過適當?shù)暮喕、裁剪,加入一些特定的功能,形成一個精巧、高效、滿足特定應用需求的專用(定制)操作系統(tǒng)。它具有用戶可裁剪、可配置的特點。NAS系統(tǒng)最重要的是存儲,通過對Linux的裁剪,去掉許多通用的功能,使其成為一個專用于存儲、精簡、高效的操作系統(tǒng)。
Cirrus Logic公司已為內(nèi)核寫好了針對
EP9315微處理器的補丁,加上這個補丁的內(nèi)核就是一個能運行在基于EP9315微處理器系統(tǒng)上的版本,接下來就可以在此基礎上進行內(nèi)核的配置與編譯。通過不斷的配置、編譯,產(chǎn)生合適的嵌入式Linux內(nèi)核,使之在功能和大小之間取得優(yōu)化的結果,以滿足本系統(tǒng)的需要。
3.2 Linux設備驅(qū)動程序開發(fā)
嵌入式系統(tǒng)的差異性決定了系統(tǒng)開發(fā)者不但需要進行特定硬件的設計,同時需要編寫相關的設備驅(qū)動程序,它是內(nèi)核用于完成對物理設備的控制操作的功能模塊。除了
CPU、內(nèi)存以及其他很少的幾個部分之外,所有的設備控制操作都必須由被控設備相關的代碼,也就是驅(qū)動程序來完成[5]。