嵌入式WEB伺服器的實現

2021-06-20 15:34:42 字數 4497 閱讀 6566

《arm linux開發

-warewin 2g/3g無線傳輸

(dtu)

和路由器—筆記》

web伺服器的原理如下:

1、建立連線:web

伺服器做為服務端監聽服務埠,開啟乙個socket

檔案,web瀏覽器做為客服端建立連線此服務埠。 

2、傳送請求:web

瀏覽器通過

socket

向web

伺服器提交請求。

的請求一般是

get或

post

命令。

3、應答:web

瀏覽器提交請求後,通過

協議傳送給

web伺服器。

web伺服器接到後,進行事務處理,處理結果又通過

傳回給web

瀏覽器,從而在

web瀏覽器上顯示出所請求的頁面。 

4、關閉連線:當應答結束後,web

伺服器斷開此次連線,保證web

瀏覽器能夠與

web伺服器再次建立連線。 

web伺服器是個單程序服務。

大概的流程是:tcp socket

服務端一直監聽,當有客戶端瀏覽器連線請求時,建立連線

,處理該連線的請求,返回處理結果到瀏覽器,關閉該連線再等新連線。

tcp連線的特點是短連線,處理完乙個請求,返回結果馬上關閉該連線。這個

web伺服器能同時支援多個瀏覽器開啟,但是要排隊處理。但是對於嵌入式系統來說已經夠了。

web伺服器主要對以下幾種檔案進行處理:

**.asp檔案無輸入處理,輸出處理將解析出

web頁面動態函式,然後輸出請求頁面。

action

值處理各種按鈕請求。

upgrade.cgi*檔案輸入處理上傳的公升級檔案、對檔案進行校驗,輸出校驗結果及結果處理。

nvramdl.cgi*檔案無輸入處理,輸出引數檔案。

nvramul.cgi*檔案輸入處理上傳的檔案、對檔案進行校驗,輸出校驗結果及結果處理。

5.3.1、增加乙個動態頁面

1、在根檔案系統根存放

web頁面的目錄下新增乙個名為

*.asp

的頁面和乙個

gif,該內容為此頁面標題。

2、在程式中將

gif新增到

web*.asp

頁面。

5.3.2、增加乙個動態元素

1、將引數新增到引數列表中,乙個列表元素包括引數的關鍵字、名稱、驗證處理方法、取值範圍等。

2、把引數新增到預設引數列表中並賦預設值。

web認證使用者名稱和口令處理過程如下:

1、瀏覽器傳送訪問頁面的請求。

2、web伺服器用

401未認證錯誤拒絕請求並傳送乙個

www-authenticate響應頭標,www-authenticate響應頭標的值告訴瀏覽器使用基本認證模式。該頭標同時告訴瀏覽器使用者需要認證的區域名稱,該區域是乙個字串,用於提醒使用者使用哪乙個口令。

3、瀏覽器在使用者輸入相應使用者名稱和口令的登入密碼認證視窗中顯示區域的名稱,接下來重發附有瀏覽器請求頭標的請求,認證請求頭標包含有

base64

編碼的使用者名稱

/口令(

usemanme:password)。

4、伺服器從認證請求頭標中解碼出使用者名稱和口令,在本地查詢使用者名稱的口令,並比較來自認證頭標的口令和本地找到的口令。如果它們匹配,使用者被認為通過了認證,並返回請求的頁面。

5、由於ba

頭一起被傳送的每個

請求,web

瀏覽器需要快取一段合理的時間,以避免不斷提示使用者的使用者名稱和密碼的憑據。不同瀏覽器之間的快取策略。預設情況下,

microsoft internet explorer

的快取15

分鐘。1、

web頁面處理

要使得檔案上載能夠成功,web

頁面元素有以下要求:

l input type=file 元素必須出現在 

form

元素內。

l 必須為 input type=file 

元素指定 

name

標籤屬性的值。

l input type="submit" 提交表單的按鈕

l form 元素 

method

標籤屬性的值必須設定為 post。

l form 元素 

enctype

標籤屬性的值必須設定為 multipart/form-data。

2、web

伺服器後台處理

瀏覽器輸入型別為檔案型別,web

伺服器做輸入處理,將

web頁面上傳的檔案寫到

/tmp

目錄下,然後對該檔案做校驗。伺服器做輸出處理,根據校驗結果輸出相應資訊,校驗通過則寫到

flash

的備份區,並置公升級標誌寫到

flash

第二分割槽,然後輸出給瀏覽器校驗結果資訊並重啟系統;校驗不通過則直接輸出給瀏覽器校驗結果資訊。

3、uboot中公升級

韌體公升級是根據公升級標誌的值來判斷系統是否公升級,如果公升級標誌為空則不公升級,如果公升級標誌的值為「update

」則進行公升級操作。

公升級處理分析如下:

每次系統執行進入uboot

後從nandflash

的第二分割槽讀出公升級標誌值,如果是「

update

」則從第五分割槽讀出新的韌體,擦除第三分割槽原有的韌體,再把新的韌體寫到第三分割槽,最後擦除第二分割槽的公升級標誌。

處理流程如下圖所示:

圖5.1 uboot

中韌體公升級流程圖

4、資料的儲存空間

(1)web瀏覽器上傳韌體後伺服器將檔案儲存在根檔案系統的

/tmp

目錄下,檔名為

upload***x

,掉電即丟失。 (2

)新韌體儲存到系統的/tmp

目錄下後,公升級時從該目錄下將新韌體寫到nandflash

的第五分割槽,掉電即丟失。

(3)公升級標誌儲存在

nandfalsh

的第二分割槽的第

6-13

個位元組,公升級時內容為「

update

」,不公升級時內容被清空為0x0。 (4

)記憶體載入的核心程式儲存在

nandfalsh

的第三分割槽。

1、顯示裝置當前基本資訊,包括以下幾項:

網路型別

系統版本

重啟週期

2、顯示

lan基本資訊,包括以下幾項:

nandflash

的第二分割槽讀出

本地ip位址

子網掩碼

3、顯示

wan基本資訊,包括以下幾項:

訊號質量:動態獲取無線模組的訊號值

廣域網連線狀態:廣域網是否連線正常,動態獲取

廣域網ip

ip位址

ppp按需撥號:顯示當路由器當前的工作模式

流量統計:動態獲取廣域網接收、傳送的流量

4、顯示主要功能的開啟狀態,包括以下幾個功能:

啟用dhcp

伺服器功能

是否允許外網訪問

是否開啟nat

是否開啟遠端校時

dtu功能

網控器功能

485功能

5.8.1、

web頁面漢化

在純英文原始碼的基礎上做如下幾方面的漢化:

1、前台顯示頁面的漢化,所有.asp

頁面上文字和主選單上頁面標題按鈕漢化。

2、所有獲取動態元素的函式中漢化返回值。

3、所有驗證引數的函式中提示資訊漢化。

4、伺服器做種輸出處理函式中提示資訊漢化。

5.8.2、中英文切換 1、

web頁面基本設定頁面需增加「語言」選項引數的設定,引數中增加「語言」引數。

2、根檔案系統存放

*.asp

頁面分兩個目錄,乙個目錄存放中文頁面,另乙個存放英文頁面,主程式執行

程序時根據「語言」引數的值來判斷進入哪個目錄下啟動。

3、伺服器輸出處理結果頁面的頭尾結構的定義分中英文兩種,通過「語言」引數值來設定頁面輸出的頭尾。

4、伺服器輸出處理結果頁面每個提示資訊都要做「語言」引數值的判斷,選擇是輸出中文還是英文。

1、安全性

使用者訪問web

伺服器時提供驗證使用者名稱和密碼,避免非法使用者對裝置操作。

2、簡單實用,易維護

伺服器嵌入到裝置中,使用者設定引數、查詢狀態不需要安裝額外的軟體,只需知道裝置的ip

位址、開啟電腦的瀏覽器軟體即可訪問裝置的

web伺服器對裝置進行操作。支援多種瀏覽器的訪問,無平台限制,便於使用者對裝置的維護。動態顯示裝置資訊,時時監控裝置的狀態。

3、操作方便,靈活

圖形化操作介面簡單明瞭,實現了對裝置基本的設定引數、查詢裝置狀態、韌體公升級等功能。採用http協議,對於各種傳送請求能及時處理,通訊速度快。

嵌入式web伺服器的實現

1 引言 呼叫 open 開啟裝置,利用 ioctl 對裝置進行控制,比如設定對比度 亮度 調色盤,訪問模式等等。主要 如下 int fd open dev v4l video0 o rdwr 開啟裝置 獲取裝置的基本資訊 裝置名稱 支援的最大最小解析度 訊號源資訊等 ioctl vd fd,vid...

嵌入式Web伺服器移植

或者 最新發行版本 0.94.13 解壓 tar xzf boa 0.94.13.tar.gz 直接執行src configure檔案 a 修改 cc gcc 為 cc usr local arm 2.95.3 bin arm linux gcc b 修改 cpp gcc e 為 cpp usr l...

嵌入式Web伺服器移植

文章一僅供個人學習之用,請勿用於他途。n printf n printf n printf n printf n exit 0 交叉編譯生成helloworld.cgi arm softfloat linux gnu gcc o helloworld.cgi helloworld.c 將hellow...