吳兆芝,曲 波
(南京曉莊學院,江蘇 南京 211171)
ARM處理器具有體積小、功耗少、成本低、性能高等特點,被越來越多地使用在工業(yè)控制領域.本文以ARM實驗箱作為實驗環(huán)境、ARM Linux作為操作系統(tǒng)平臺、GNU工具鏈作為開發(fā)工具,使用嵌入式Web及嵌入式CGI編程技術,設計實現(xiàn)了一個ARM主機遠程控制系統(tǒng).本系統(tǒng)采用B/S方式,在客戶端主機使用瀏覽器通過網絡訪問ARM主機的嵌入式Web服務程序,由Web服務程序調用其內部的嵌入式CGI子程序,由CGI子程序調用ARM主機的應用程序,實現(xiàn)對ARM主機的遠程控制.
1 嵌入式Web編程技術
具備網絡能力的嵌入式系統(tǒng)中最主要的趨勢之一,就是包含Web(HTTP)服務器.對于ARM Linux操作系統(tǒng)而言,盡管存在幾種較適合于嵌入式系統(tǒng)的開放源碼Web服務器[1],如thttp和Boa等,但其體積較大(約50~70K左右),而且有些版本還不同程度地受到許可條款的限制.本文提出的嵌入式Web編程技術的目的是以最少的代碼實現(xiàn)Web[2]服務器的基本功能:
(1)TCP/IP標準網絡服務一般可有兩種實現(xiàn)方式,一種是利用系統(tǒng)的超級服務器負責接收用戶請求,然后調用相應的服務器程序;另一種是創(chuàng)建服務器守護進程,由服務器守護進程直接接收用戶請求.前者適用于訪問頻度較低的網絡服務.筆者采用守護進程方式[3,4]工作,利用Linux提供的daemon函數實現(xiàn).
(2)從服務器響應用戶請求的方式來看,有循環(huán)方式、多線程方式、多進程方式等多種模式.考慮到Linux操作系統(tǒng)的特點和Web服務的特點,采用多進程方式[3,4].
(3)只處理GET、POST請求.
(4)環(huán)境變量是Web服務器與CGI通信的重要手段,客戶端的特征信息和查詢信息都是通過環(huán)境變量提供給CGI的.為簡化程序,本文實現(xiàn)的嵌入式Web服務只提供公共網關協(xié)議CGI所必需的環(huán)境變量.
在Web/Server系統(tǒng)中,由面向Web的服務器完成對用戶客戶端Web請求的服務,本質上就是對HTTP協(xié)議請求的響應過程.本系統(tǒng)的目的是實現(xiàn)對ARM主機的遠程控制,無需使用過于復雜的Web頁面,所以只要能響應客戶端瀏覽器的GET和POST請求就足夠了.主控程序如下:
static void get_http()
{
int x;
char *p,*q,req[1024];
if (getline(req,sizeof(req))<=0||
(p=strpbrk(req, “ ”)) == NULL)
return;
*p ++ = '