隨著計算機、通信、自動控制、微電子等技術的發展。電器設備上網已經成為現實。與傳統的單片機相比,嵌入式設備重要的突破之一就是解決了設備和internet的互連問題.近年來.嵌入式技術飛速發展.種類繁多、功能強大的CPU和片外連接.為網絡應用提供了穩定、可靠的硬件環境:嵌入式操作系統對這些硬件和以太網也有很好的支持,搡作系統的移植大為簡化,這就為嵌入式web服務器的實現提供了方便。嵌入式web服務器將監控系統中的各種辦議的數據轉換成統一的TCP/IP協議格式,以便用戶通過以太網遠程訪問web服務器。該文結合快速發震的嵌入式技術。給出了一種基于嵌入式網絡化遠程監控系統的web服務器實現方案。
通過創新實踐課程設計建立嵌入式系統主體環節,嵌入式系統的最小結構和系統應用設計基本技能,培養分析和解決一些簡單的實際問題的能力,為今后畢業設計奠定基礎。隨著嵌入式技術的發展和高速寬帶網絡的普及, 利用網絡實現遠程監控已為人們廣泛接受, 嵌入式網絡監控技術正是在此條件下逐步發展成熟起來的。用戶使用 Web瀏覽器, 通過以太網遠程訪問內置 Web服務器的監控攝像機, 不但可以實現對現場的遠程視頻監控, 而且可以向監控現場發送指令。在整個系統的實現過程中, 嵌入式 Web 服務器起著十分重要的作用。高端嵌入式設備快速發展,硬件成本顯著下降,有的嵌入式系統硬件已經與通用計算機接近。同時隨著Internet的迅速發展,網絡化的嵌入式產品已經成為IE產業的最大增長點,將嵌入式設備接入Internet將成為一種必然,嵌入式設備中運用Web技術也是一種必然,但一個穩定好的、適應性強的、安全性高的、可以適合多嵌入式操作系統的和有自己知識產權的嵌入式Web服務器軟件也還是一個市場的需求。因此本課題主要研究和實現了一個模塊化的、通過模塊配置可以適合幾種嵌入式操作系統、屏蔽目標平臺的異構性的嵌入式Web服務器,并對安全性問題也給出了詳細的研究和解決方案。
研究目的和意義
1.通過嵌入式課程設計,熟練掌握 C 語言的編程方法。基于 WEB的遠程監控的實現,CGI的編寫和使用,將理論聯系到實踐中去,提高我們的動腦和動手的能力。
2.使用博創UP-NETARM2410-S嵌入式開發平臺,通過采購部分元器件完成開發板設計
3.本課題的研究目的是用 BOA 服務器、CGI、IE瀏覽器設計一個通過 IE 瀏覽器監控電機的系統,能夠通過兩個簡單的按鍵對電機進行啟動和停止的控制,并能夠在 IE 瀏覽器上看到電機的當前狀態。
4.由于基于 WEB的嵌入式遠程監控系統將成為今后遠程監控技術發展的主流方向,所以需要設計出簡單實用,讓人們更滿意的產品。
總體方案設計
整體方案設計
系統總體設計是基于嵌入式系統和 WEB服務器結合的思想開發的,其網絡拓撲結構如圖 2.1所示,一個設備的核心處理器只能連接一個Web服務器,有n個設備據需要n個Web服務器,想要將這n個設備連接在一起就必須用交換機作為中轉站,這樣就可以將其余的所有設備連接,實現信息的交換,而交換機則需要一個監控機來進行監督。
圖 2.1 系統網絡拓撲圖
而針對本次課程設計提出的系統設計就是這拓撲結果中的一個單元,如圖 2.2所示。
圖 2.2系統方案框圖
硬件系統設計——核心處理器的選擇
核心處理芯片需要完成處理和支持整個系統的功能需求,通過運行 BOA 服務器要實施的接收來自各個客戶端的請求和信息,并根據獲得的請求和信息進行相應的后臺處理以及信息的反饋。為完成上述功能,實現服務器正常運行,對處理芯片進行選型,對比現有處理芯片的優缺點,選擇 ARM9 S3C2410X 芯片作為設計開發嵌入式服務器系統的核心處理芯片。S3C2410X 微處理器是一款由 Samsung 公司為手持設備設計的低功耗、高集成度的基于ARM920T 核的微處理器,為了降低系統總成本和減少外圍器件,這款芯片還集成了以下部件:16KB 指令 Cache、16KB 數據 Cache、MMU、外部存儲器控制器、LCD 控制器、NAND FLASH 控制器、4 個 DMA 通道、3 個 UART 通道、1 個 IIC 總線控制器、1 個 IIS總線控制器、4 個 PWM 定時器、1 個內部定時器、通用 IO 口、實時時鐘、8 通道 10 位ADC 和觸摸屏接口、USB 主、USB 從、SD/MMC卡接口等。
軟件環境選擇
1.操作系統的選擇
當選定了硬件系統后,為了配合硬件達到系統的最優控制要求,對市面上常用的嵌入式系統進行分析比較。
(1)價格比較:Linux是完全免費的操作系統,只需遵循 GPL聲明,不需支付任何費用;WinCE是微軟的商用嵌入式操作系統,使用它需要支付 WinCE及其開發環境的費用,開發出來的每套產品也需交納一定費用。uc/os—II系統,可以免費用于學習或科研,但開發商使用產品或銷售都是收費的。
(2)開放性比較:Linux是源代碼完全開放的操作系統,可以自由下載,并且在遵循GPL聲明的前提下可以自由地修改、移植,為系統的開發和調試帶來極大的便利;winCE是部分源碼開放的商用操作系統,如果要修改其中的代碼,需獲得微軟公司的授權;uc/os—II也是開放的實時操作系統。
(3)文件系統的比較:Linux支持絕大部分文件系統,只需選擇相應的文件系統即可;
WinCE僅支持 Windows系列的 FAT16、有限文件系統;uc/os—II本身沒有包括文件系統,需購買或移植。Linux與 ARM處理器從以上可以看出,Linux系統在諸多方面都存在優勢,而且本身的 ARM處理器與 Linux也有著緊密的聯系。因此采用 Linux操作系統。
2.服務器的選擇
典型的嵌入式 Web服務器有 Boa和 thttpd兩種,它們和 Apache等高性能的 Web服務器主要的區別在于它們一般是單進程服務器,只有在完成一個用戶請求后才能響應另一個用戶的請求,而無法并發響應,但這在嵌入式設備的應用場合里已經足夠了。Boa是一個非常小巧的 Web服務器,可執行代碼只有約60KB。它是一個單任務 Web服務器,只能依次完成用戶的請求,而不會 fork出新的進程來處理并發連接請求。但 Boa支持 CGI,能夠為 CGI程序fork出一個進程來執行。Boa的設計目標是速度和安全,在其站點公布的性能測驗中,Boa的性能要好于 Apache服務器。經過上述的對比和判斷,選擇Boa作為系統的嵌入式服務器。
綜合以上的討論以及選擇,根據系統的實際需求,最終確定了采用 S3C2410X為核心處理器,Linux為嵌入式操作系統,boa為服務器以及相應的 http瀏覽器的系統設計方案。
硬件設計
系統硬件平臺介紹
我們所介紹的硬件平臺是基于 ARM體系結構,由北京博創興業科技有限公司開發的UP-NetARM2410-S實驗儀器。 UP-NetARM2410-S的 CPU為 ARM920T內核的三星S3c2410芯片,由于有 MMU(內存管理單元)可以運行標準的 ARM-LINUX內核。通過這個平臺,我們可以實現嵌入式 LINUX中的針對無 MMU的開發過程。
S3C2410芯片介紹
S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數據Cache,MMU,支持TFT的LCD控制器,nand閃存控制器,3路UART,4路DMA,4路帶PWM的Timer,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS接口,2個USB主機,1個USB設備,SD主機和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。
系統的硬件設計方案
通常的嵌入式設備的硬件架構是以嵌入式微處理器為核心,通過CPU擴展接口以及平臺硬件的支持,把眾多的外設單元集成到整個系統中,并通過CPLD等邏輯轉換器件和其他硬件電路完成對外設模塊進行讀寫和控制操作。基于S3C2410的硬件平臺設計最主要的工作是外圍電路的設計,包括系統總線、片選、存儲系統、輸入和輸出設計。由于S3C24l0片上集成了很多設備的控制器,外圍電路的設計變得很簡單。本系統利用S3C2410出色的內核性能和豐富的外部接口構造一個嵌入式系統平臺。下圖3.1表示了本文所設計的嵌入式Web服務器的硬件結構框圖。
圖3.1系統硬件結構框圖
ARM處理器的外圍設備
1.電源電路
設備提供 12v的電源,經 LM1085-3.3V 和 AS1117-1.8V 分別得到3.3V 和1.8V 的工作電壓。開發板上的芯片多數使用了 3.3V 電壓,而 1.8V 是供給 S3C2410 內核使用的。5V 電壓供給 LCD、電機、總線等電路使用。
圖3.2 電源電路
2.硬件復位電路
硬件復位電路由IMP811T構成,實現對電源電壓的監控和手動復位操作。2410-S主板復位電路設置專用邏輯:IMP811T的復位電平可以使CPUJTAG(nTRST和板級系統(nRESET)全部復位;來自仿真器的ICE_nSRST信號只能使板級復位;來自仿真器的ICE_nTRST可以使JTAG(nTRST)復位,通過跳線選擇是否使板級nRESET復位。nRESET反相后得到RESET 信號。硬件復位電路如圖3.3所示。
圖3.3 硬件復位
BOA服務器的簡介與搭建
1.嵌入式 Web服務器 Boa 的特點
Boa 是一款單任務的HTTP 服務器, 與其他傳統的 Web 服務器不同的是當有連接請求到來時, 它并不為每個連接單獨創建進程, 也不通過復制自身進程來處理多鏈接, 而是通過建立 HTTP 請求列表來處理多路 HTTP 連接請求, 同時它只為 CGI 程序創建新的進程,這樣就在最大程度上節省了系統資源, 這對嵌入式系統來說至關重要。同時它還具有自動生成目錄、自動解壓文件等功能, 因此 Boa 具有很高的 HTTP 請求處理速度和效率, 在嵌入式系統中具有很高的應用價值。
2.Boa 的功能實現
嵌入式 Web 服務器 Boa 和普通 Web 服務器一樣, 能夠完成接收客戶端請求、分析請求、響應請求、向客戶端返回請求結果等任務。它的工作過程主要包括:
( a) 完成 Web 服務器的初始化工作, 如創建環境變量、創建 TCP 套接字、綁定端口、開始偵聽、進入循環結構, 以及等待接收客戶瀏覽器的連接請求;
( b) 當有客戶端連接請求時,Web 服務器負責接收客戶端請求, 并保存相關請求信息;
( c) 在接收到客戶端的連接請求之后,分析客戶端請求, 解析出請求的方法、URL 目標、可選的查詢信息及表單信息, 同時根據請求做出相應的處理;
( d)Web 服務器完成相應處理后, 向客戶端瀏覽器發送響應信息, 關閉與客戶機的TCP 連接。嵌入式 Web 服務器 Boa 根據請求方法的不同,做出不同的響應。如果請求方法為HEAD,則直接向瀏覽器返回響應首部;如果請求方法為 GET,則在返回響應首部的同時,將客戶端請求的 URL 目標文件從服務器上讀出,并且發送給客戶端瀏覽器;如果請求方法為 POST,則將客戶發送過來的表單信息傳送給相應的 CGI 程序,作為 CGI 的參數來執行 CGI 程序,并將執行結果發送給客戶端瀏覽器。 Boa的功能實現也是通過建立連接、綁定端口、進行偵聽、請求處理等來實現的。
3.Boa的搭建與移植
(1)準備源代碼、解壓軟件包,安裝源代碼到 boa網站 http://www.boa.org下載 boa-0.94.13.tar.gz 源代碼,或者使用光盤的boa-0.94.13.tar.gz 軟件包。$tar xzvf boa-0.94-13.tar.gz
(2)進入 src 目錄,編譯源代碼。
解壓后 src 目錄下有 Makefile.in 文件,但沒有 Makefile 文件,為了編譯源代碼,需要先生成Makefile 文件,在 src 目錄下運行 configure 命令$./configure
生成的 Makefile 文件是針對 X86平臺的,為了生成能夠在 ARM 上運行的 boa,需要修改 Makefile 文件。將 Makefile 的 31~32 行內容:
CC = gcc
CPP = gcc –E
應用(在交叉編譯時使用):
然后輸入 make 命令進行編譯,在 src 目錄下就會生成 boa 文件。$ make然后將該文件添加到文件系統中,重新下載文件系統。如果不幸出現―icky Linux kernelbug!‖的錯誤,請將 src下 boa.c 的第 226 行注釋掉,重新編譯下載即可。
(3)安裝 boa 服務器
主要是配置 boa 服務器。boa 啟動時需要一個配置文件 boa.conf,該文件的缺省目錄由src/defines.h 文件的 SERVER_ROOT 定義,或者在啟動 boa的時候通過參數―-c‖指定。其中指定的默認目錄是:/etc/boa/。
(4)登錄 boa 服務器
在 PC 機瀏覽器地址欄輸入目標系統的 IP 地址(http://172.31.55.91),訪問存在于目標系統中的網頁。
應用程序設計
1.程序設計依賴關系
通過對系統的分析以及對服務器的了解,系統確定了以下的軟件開發系統方案,如圖4.2 所示。
圖 4.1 軟件依賴關系
圖4.2 乘法功能實現流程圖
程序段電機程序的流程圖如下圖4.3所示。
圖 4.3 電機部分流程圖
驅動程序設計
驅動部分主要有兩部分組成:電機驅動和網卡驅動,其中以電機驅動為主。由于在本套系統設計中,不可能每次開機都要由操作人員將驅動加入內核,這樣既不方便又費時費力,所以系統采用將驅動編譯進內核的模式。
(1)電機驅動
電機驅動程序流程
1、開啟設備時,配置 IO 口為定時器工作方式
2、配置定時器的各控制寄存器
3、在 s3c2410_dcm_ioctl 中提供調速功能接口
4、應用程序dcm_main.c 中調用
5、實現直流電機速度的調整
驅動加載過程
以電機驅動為例:編譯直流電機cd/arm2410s/kernel-2410smake menuconfig進入 Main Menu / Character devices 菜單,選擇 DC MOTOR
模塊加載:
編譯內核模塊:
make dep
make
make modules
直流電機模塊的編譯結果為:/arm2410s/kernel-2410s/drivers/char/s3c2410-dc-motor.o
(2)加載模塊
在超級終端中,通過加載 NFS 運行編譯結果:
mount–t nfs 192.168.0.121:/arm2410s /host
Insmod/host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
嵌入式平臺下的調試
客戶端與服務器交互的調試與分析
由于/etc 目錄只允許讀不允許寫,但我們搭建的 BOA服務器的運行要求在/etc目錄下有 mime.types(用來指明不同文件的擴展名對應的 MIME 類型)并且還要在/etc/boa/下有相應的配置文件 BOA.conf,則需要我們重新生成根文件系統等,將我們需要的文件填到相應的位置,然后再重新生成鏡像文件并燒寫文件系統。
將編寫好的html 程序(名稱改為 index.html,因為這是輸入地址后默認的訪問文件) 放到目錄 var/www 下。需要的 c 語言程序用 arm-linux-gcc 編譯生成相應的 cgi 程序,到目錄/var/www/cgi-bin 下。啟動 boa 服務器,在根目錄下輸入 ifconfig 命令可以查找到服務器的 ip 地址,在客戶端的地址欄輸入該地址,就可以訪問到相應的網頁,通過該網頁用戶可以監控電機。
電機控制的調試與分析
Linux 下的直流電機程序包括模塊驅動程序和應用程序兩部分。Module驅動程序實現了以下方法:
static struct file_operations s3c2410_dcm_fops = {
owner:THIS_MODULE,
open: s3c2410_dcm_open,
ioctl: s3c2410_dcm_ioctl,
release:
s3c2410_dcm_release,
};
開啟設備時,配置 IO 口為定時器工作方式:
({
GPBCON&=~ 0xf;
GPBCON|= 0xa;
}
配置定時器的各控制寄存器:
({ TCFG0 &= ~(0x00ff0000);
TCFG0 |= (DCM_TCFG0);
TCFG1 &= ~(0xf);
TCNTB0 = DCM_TCNTB0; /* less than 10ms */
TCMPB0 = DCM_TCNTB0/2;
TCON &=~(0xf);
TCON |= (0x2);
TCON &=~(0xf);
TCON |= (0x19); })
在 s3c2410_dcm_ioctl 中提供調速功能接口:
case DCM_IOCTRL_SETPWM:
return dcm_setpwm((int)arg);
應用程序 dcm_main.c 中調用:
ioctl(dcm_fd, DCM_IOCTRL_SETPWM, (setpwm *factor));
實現直流電機速度的調整。
a.編譯直流電機模塊
cd /arm2410s/kernel-2410s
make menuconfig
進入 Main Menu / Characterdevices 菜單,選擇 DC MOTOR 為模塊加載:
b.編譯內核模塊:
make dep
make
make modules
直流電機模塊的編譯結果為:
/arm2410s/kernel-2410s/drivers/char/s3c2410-dc-motor.o
c. 編譯應用程序
cd /arm2410s/exp/basic/10_dcmotor/
make
生成 dcm_main
d.掛載驅動模塊
insmod/host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
e.運行程序
mount –t nfs 192.168.0.xxx:/arm2410s /host
insmod/host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
cd /host/exp/basic/10_dcmotor/
./dcm_main
參考文獻
[1] 孫天澤,袁文菊,張海峰.嵌入式設計及Linux驅動開發指南—基于ARM9 處理器[M].北京:電子工業出版社,2005
[2] 于明,范書瑞,曾祥燁.ARM9嵌入式系統設計與開發教程[M].北京:電子工業出版社,2006
[3]王田苗.嵌入式系統設計與實例開發[M].北京:清華大學出版社,2003
[4] Samsung Electronics.S3C2410X32-Bit RISC Microprocessor User’s Manual,2003
[5] 周立功等. ARM嵌入式Linux系統構建與驅動開發范例.北京:北京航空航天大學出版社,2006
[3] 王進德 編著《嵌入式 LINUX 程序設計與應用案例》 中國電力出版社 2007.5
[4] 鄭慕德 編著《嵌入式微型計算機系統實例教程-ARM 與 LINUX》 科學出版社2006.7
附錄
乘法程序清單:
#include
#include
intmain(void)
{char*data;
longm,n;
printf("%s%c%c","Content-Type:text/html;charset=gb2312 ",13,10);
printf("
printf("
乘法結果
");data= getenv("QUERY_STRING");
if(data== NULL)
printf("
錯誤!數據沒有被輸入或者數據傳輸有問題");
elseif(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2)
printf("
錯誤!輸入數據非法。表單中輸入的必須是數字。");
else
printf("
%ld和%ld的成績是:%ld。",m,n,m*n);
return0;
}
電機網頁的HTML表單:
-
ARM
+關注
關注
134文章
9351瀏覽量
377435 -
服務器
+關注
關注
13文章
9793瀏覽量
87945
原文標題:ARM開發板上實現WEB服務器設計制作全過程
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
嵌入式Web服務器BOA怎么在ARM9上移植?
迅為IMX6ULL開發板搭建 Web 服務器
如何在單片機跑裸機的環境下實現簡易的web服務器呢
嵌入式web服務器系統設計,基于-ARM簡單嵌入式WEB服務器系統設計.doc

ElfBoard技術貼|如何在ELF 1開發板上搭建流媒體服務器

評論