第一篇:基于ARM-Linux的嵌入式HTTPS服務器與實現.
基于ARM-Linux的嵌入式HTTPS服務器與實現
隨著計算機技術和微電子技術的發展,嵌入式系統在工業控制、信息家電、通信設備、智能儀器等領域得到了越來越廣泛的應用。在這些領域,網絡化、信息化的要求也隨著Internet的迅猛發展而逐漸突出,越來越多的嵌入式設備有接入網絡實現遠程控制的需求,其基本的方法是在嵌入式設備上實現HTTP服務器,通過萬維網在客戶端用瀏覽器對設備進行訪問。同時,這種方法不可避免地帶來互聯網上的安全問題,而HTTPS(安全超文本傳輸協議)是由Netscape公司提出的以SSL(安全套接層)為基礎的安全HTTP方法,因此構建嵌入式HTTPS服務器,將有效地為嵌入式設備的網絡化提供安全保障。本文對HTTP傳輸協議和SSL安全協議以及基于ARM的嵌入式技術等關鍵技術進行了深入的研究。首先分析了HTTPS這個安全傳輸設施的實現方法,即在標準的TCP/IP參考模型中在HTTP標準協議層和下面的TCP/IP傳輸協議層之間額外附加一層SSL安全層,緊接著對基于請求/響應模式的HTTP協議的信息交換的基本過程和SSL握手協議的安全加密的詳細過程進行了分析與研究。然后,設計了系統的整體架構,硬件采用了應用廣泛的32位ARM920T處理器S3C2410,操作系統采用了開源的嵌入式Linux操作系統,應用層的實現以Linux系統調用和OpenSSL開源庫為基礎。其次,建立了HTTPS服務器的支撐環境,在宿主機上通過Vmware虛擬機技術建立了Linux操作系統并通過一系列的服務配置建立起交叉編譯環境;在硬件平臺上燒寫了系統引導程序bootloader,并以此為基礎進行了嵌入式Linux和根文件系統的配置、編譯和移植。最后,在深入研究了相關理論后,設計了服務器的基本結構和功能模塊,在利用Linux的系統調用和OpenSSL API的基礎上,使用C語言實現了基于ARM-Linux的嵌入式HTTPS服務器。實驗結果表明,該服務器實現了與客戶端瀏覽器的HTTPS的交互過程,能正確解析瀏覽器發出的HTTP請求,并根據請求資源和請求方法的不同做出不同的響應,返回給瀏覽器靜態資源或者CGI程序的處理結果。同主題文章
【關鍵詞相關文檔搜索】: 信號與信息處理;ARM;Linux;HTTP;SSL 【作者相關信息搜索】: 武漢理工大學;信號與信息處理;王虹;戴帥;
第二篇:網站服務器托管HTTPS如何保障數據傳輸安全
網站服務器托管HTTPS如何保障數據傳輸安全
網站服務器托管用戶主機中的數據與訪客之間的傳輸是通過http協議傳輸的,然而http是明文傳輸,相對的HTTPS屬于加密傳輸,會更安全。
對稱加密
假如現在小客與小服要進行一次私密的對話,他們不希望這次對話內容被其他外人知道??墒?,我們平時的數據傳輸過程中又是明文傳輸的,萬一被某個黑客把他們的對話內容給竊取了,那就難受了。
為了解決這個問題,小服這家伙想到了一個方法來加密數據,讓黑客看不到具體的內容。該方法是這樣子的: 在每次數據傳輸之前,小服會先傳輸給小客一把密鑰,然后小服在之后給小客發消息的過程中,會用這把密鑰對這些消息進行加密。小客在收到這些消息后,會用之前小服給的那把密鑰對這些消息進行解密,這樣,小客就能得到密文里面真正的數據了。如果小客要給小服發消息,也同樣用這把密鑰來對消息進行加密,小服收到后也用這把密鑰進行解密。
這樣,就保證了數據傳輸的安全性。HTTPS 如何保證數據傳輸的安全性?
這種方法稱之為對稱加密,加密和解密都用同一把密鑰。
這時,小服想著自己的策咯,還是挺得意的。但這個策略安全的前提是,小客擁有小服的那把密鑰??蓡栴}是,小服是以明文的方式把這把密鑰傳輸給小客的,如果黑客截取了這把密鑰,小服與小客就算是加密了內容,在截取了密鑰的黑客老哥眼里,這和明文沒啥區別。非對稱加密
小服還是挺聰明的,意識到了密鑰會被截取這個問題,他又想到了另外一種方法:用非對稱加密的方法來加密數據。方法如下:
小服和小客都擁有兩把鑰匙,一把鑰匙是公開的(全世界都知道也沒關系),稱之為公鑰;而另一把鑰匙是保密(也就是只有自己才知道),稱之為私鑰。并且,用公鑰加密的數據,只有對應的私鑰才能解密;用私鑰加密的數據,只有對應的公鑰才能解密。所以在傳輸數據的過程中,小服在給小客傳輸數據的過程中,會用小客給他的公鑰進行加密,然后小客收到后,再用自己的私鑰進行解密。小客給小服發消息的時候,也一樣會用小服給他的公鑰進行加密,然后小服再用自己的私鑰進行解密。這樣,數據就能安全到達雙方。HTTPS 如何保證數據傳輸的安全性?
想著這么復雜的策略都能想出來,小服可是得意的不能再得意了…..還沒等小服得意多久,小客就給它潑了一波冷水。
小客嚴肅著說:其實,你的這種方法也不是那么安全啊,還是存在被黑客截取的危險啊。例如:
你在給我傳輸公鑰的過程中,如果黑客截取了你的公鑰,并且拿著自己的公鑰來冒充你的公鑰來發給我。我收到公鑰之后,會用公鑰進行加密傳輸(這時用的公鑰實際上是黑客的公鑰)。黑客截取了加密的消息之后,可以用他自己的私鑰來進行解密來獲取消息內容。然后再用你(小服)的公鑰來對消息進行加密,之后再發給你(小服)。這樣子,我們的對話內容還是被黑客給截取了(倒過來小客給小服傳輸公鑰的時候也一樣)。......這么精妙的想法居然也不行,小服這波,滿臉無神。
這里插講下,其實在傳輸數據的過程中,在速度上用對稱加密的方法會比非對稱加密的方法快很多。所以在傳輸數據的時候,一般不單單只用非對稱加密這種方法(我們先假設非對稱密碼這種方法很安全),而是會用非對稱加密 + 對稱加密這兩種結合的方法?;谶@個,我們可以用非對稱加密方法來安全著傳輸密鑰,之后再用對稱加密的方法來傳輸消息內容 數字證書
我們回頭想一下,是什么原因導致非對稱加密這種方法的不安全性呢?它和對稱加密方法的不安全性不同。非對稱加密之所以不安全,是因為小客收到了公鑰之后,無法確定這把公鑰是否真的屬于小服。
也就是說,我們需要找到一種策略來證明這把公鑰就是小服的,而不是別人冒充的。為了解決這個問題,小服和小客絞盡腦汁想出了一種終極策略:數字證書——我們需要找到一個擁有公信力、大家都認可的認證中心(CA)。小服在給小客發公鑰的過程中,會把公鑰以及小服的個人信息通過Hash算法生成消息摘要。HTTPS 如何保證數據傳輸的安全性?
為了防止摘要被人調換,小服還會用CA提供的私鑰對消息摘要進行加密來形成數字簽名。HTTPS 如何保證數據傳輸的安全性?
并且,最后還會把原來沒Hash算法之前的信息和數字簽名合并在一起,形成數字證書。HTTPS 如何保證數據傳輸的安全性?
當小客拿到這份數字證書之后,就會用CA提供的公鑰來對數字證書里面的數字簽名進行解密得到消息摘要,然后對數字證書里面小服的公鑰和個人信息進行Hash得到另一份消息摘要,然后把兩份消息摘要進行對比,如果一樣,則證明這些東西確實是小服的,否則就不是。HTTPS 如何保證數據傳輸的安全性?
這時可能有人會有疑問,CA的公鑰是怎么拿給小客的呢?小服又怎么有CA的私鑰呢? 其實,(有些)服務器在一開始就向認證中心申請了這些證書,而客戶端里,也會內置這些證書。
HTTPS 如何保證數據傳輸的安全性?
當客戶端收到服務器返回來的數據時,就會在內置的證書列表里,查看是否有有解開該數字證書的公鑰。
以上就是HTTPS技術的說明。浦東數據中心為用戶提供14念書俺也服務器托管技術支持
第三篇:基于嵌入式ARM9的USB設計與實現
基于嵌入式ARM9的USB設計與實現
引 言
USB(Universal Serial Bus)是通用串行總線的縮寫,因其具有方便易用,動態分配帶寬,容錯性優越和高性價比等特點,現已成為計算機的主流接口。
隨著嵌入式系統的廣泛應用,各種小型終端需要開發出與外界聯系的USB接口。目前,常用的技術有兩種?;趩纹瑱C的USB接口,特點是需要外置芯片,電路復雜,留下的CPU資源不多;基于ARM的USB接口,特點是資源豐富,但ARM系列產品較多,如果選型不當,還需要搭接較多的外圍電路,且不能很好地發揮CPU性能。USB 接口原理
USB1.1 規范[1]將USB 分為5 部分:控制器、控制器驅動程序、USB 芯片驅動程序、USB設備以及針對不同USB 設備的客戶端驅動程序。
(1)控制器(Host Controller)主要負責執行由控制器驅動程序發出的命令。
(2)控制器驅動程序(Host Controller Driver), 在控制器與USB 設備間建立通信
管道(Pipe)。
(3)USB 驅動程序(USB Driver),提供對不同USB 設備及芯片的支持。(4)USB 設備(USB Device), 有兩類USB 設備:一類稱為功能設備(Function),另
一類是稱為USB 集線器(HUB),可以連接多個USB 設備。
(5)USB 設備驅動程序(Client Driver Software)及特定應用程序。主控制器的驅動軟件由操作系統支持,USB 設備開發人員一般只需編寫客戶驅動程序,實現特定功能,設備端所有功能軟件需要全面設計。USB 的四種數據傳輸模式分別是:控制型傳輸、中斷型傳輸、批量型傳輸、實時型傳輸。第一種在缺省通道中傳輸USB 接口本身的配置等控制信息,后面三種用于功能部件傳輸數據。中斷型用于鍵盤等的異步輸入輸出少量數據傳輸,批量傳輸主要用于象硬盤等塊設備的數據傳輸,在中斷和批量的傳輸過程中要傳遞交互握手信號,確保數據準確無誤。實時傳輸對帶寬有嚴格要求,但允許有一定誤碼,省去了交互握手信號的傳遞,常用于音視頻碼流數據傳輸。四種類型數據都按帶寬要求分配在1ms 一幀的數據幀內進行傳輸,連到端點(EndPoint)通道.1.1嵌入式系統USB 接口設計
要滿足高性能ARM嵌入式系統的要求,擴展USB接口必須選擇高性能USB控制器芯片,Philips公司的PDISUBD12 USB器件,是與微處理器配合使用的高性能USB接口器件,性價比很高[2][4]。PDIUSBD12主要特性有:
(1)符合USB 1.1 技術規范;
(2)USB控制器并行接口與處理器間的數據傳輸速度高達2M 字節/秒;(3)在批量模式和同步模式下均可實現1M 字節/秒的數據傳輸速率;(4)集成了FIFO存儲收發器,支持DMA 操作;(5)內置時鐘倍頻PLL電路,可編程時鐘頻率輸出;(6)多中斷模式實現批量和同步傳輸;
1.2音頻碼流USB 設備驅動程序
Windows2000 中各種USB 設備客戶驅動程序結構框架基本相同,可以從Windows2000 DDK 中獲得USB 設備驅動程序范例代碼,對范例代碼作少量修改就可以滿足特定功能需要。圖1 顯示了驅動程序各層間的數據傳遞關系,底層USB 主控制器驅動程序(USB Host Driver)由操作系統提供支持,設備驅動程序只需要對USB Host Driver 上傳的I/O 數據包IRP 作出響應,并把要輸出數據以IRP 形式下傳給USB Host Driver 即可[5] [6]。在ISO(實時型)模式下傳輸音頻碼流,USB 客戶程序除了WDM(Windows Driver Model)驅動常規處理外,必須計算好帶寬,并為驅動程序在非分頁存儲區內分配好環行緩沖區(Ringbuffer),以便USB 主控制器可以不間斷輸出實時數據。RingBuffer 的大小按下式 計算:
每幀字節數 × 每緩沖幀數 × 緩沖區數 ; 每傳完一緩沖區,USB Host Driver 回調(CallBack)一次客戶驅動程序,USB 帶寬
按每1ms 傳送1 幀數據來分配,要實現8kHz 采樣頻率、8bits 編碼的音頻PCM 碼流傳輸,幀數據包大小必須設為8Bytes,若設置4 個緩沖區交替工作,每緩沖區分20 幀傳送, 則RingBuffer 的大小為640Bytes,那么USB 主控制器每20ms 的頻率中斷回調一次客戶驅動程序是合適的。驅動程序通過IoSetCompletionRoutine()函數給每個IRP 設置回調函數入口地址[6],每完成一個IRP 緩沖區數據傳送操作,回調一次該地址指向的函數,以便把下一緩沖包數據壓入到IRP 棧,直到全部數據流傳送完畢或人為終止傳送。S3C2440A特點
S3C2440A的CPU部分主要集成了電源模塊、復位和時鐘模塊、觸摸屏和小鍵盤模塊、程序存儲器和數據存儲器模塊。同時提供如下豐富的外圍接口:同步存儲器(SDRAM)和NAND FLASH控制接口,可擴展到1 GB的存儲的空間;4個DMA通道和24個中斷端口;能控制STN LCD和TFT液晶屏顯示,支持觸摸屏功;USB接口A型和B型各一個;3個串行口、I2C,SPI,I2S等接口;帶AC97音頻接口;具備SD卡、數碼相機接口和網絡接口。
S3C2440A還具備多種工作模式,管腳為17×17方型分布,橫向從左1到右17編號,縱向從下A到上U編號,分類為A1~A17,B1~B17,C1~C17依此類推到U1~U17。這些管腳所對應的功能并不是惟一的,通常只要使能變化,S3C2440A就能實現不同的控制功能。該設計涉及到的 S3C2440A,其管腳如表1所示分為3類。
串口電路
串口在該設計中的作用是通過計算機加載USB驅動程序,原理如圖2所示。
3.1電源電路
由于S3C2440A芯片的管腳對電壓提出了不同要求,所以需要完成電源的變壓,其原理 如圖3所示。驅動程序的研究
按USB接口,其設備結構可分為USB Host(主機)和USB Device(外部設備)。USB主機控制USB設備進行通信,而主機與主機之間,或USB設備與USB設備之間是不能通信的。
4.1 USB主機
USB主機的功能通常包含以下幾個部分:驗證USB設備是否安插好或拔除;控制USB主機與設備兩者中的數據流;返回USB主機的所顯狀態。
USB系統軟件由以下3個部分組成:主機控制器驅動(HCD)、USB驅動(USBD)、主機軟件(Host Software)。主機控制器所具備的功能如表2所示。HCD和USBD包含基于不同抽象層次的軟件接口,兩者以一定的方式協同完成任務,用以實現 USB系統的功能。它們的任務差別沒有具體定義,然而HCD要具備的一項功能就是必須支持多種不同主機控制器芯片。在一些操作系統中,當系統必須實現某些基本功能時,可由Host Software實現。
4.2 USB傳輸類型
USB定義了4種傳送類型:控制傳送、同步傳送、中斷傳送、批傳送。其中,控制傳送是指可靠的、非周期性的、突發的,并由主機客戶軟件所發起的通信,主要應用于控制命令和狀態信息的傳送;同步傳送是指在主機和設備之間周期性的、連續的通信,一般用于傳送時實信息,這種類型保留了將時間概念包含于數據的能力,但傳送并不一定很緊急;中斷傳送是指少量數據的、低速的、周期的傳送;批傳送是指非周期的、大量的、可靠的傳送,其典型應用在于傳送那些可以利用帶寬的數據。
4.3 USB設備請求
USB設備應通過缺省控制管道(Default Control Pipe)響應來自主機的請求命令。這些請求是通過使用控制傳輸來完成的。請求及請求的參數通過Setup包發向設備,由主機負責設置Setup包內的每個域的值。USB設備請求包含的請求類型有三種:標準、廠商和設備類。標準請求用來完成設備的枚舉過程;廠商請求用來完成使用者自己定義的請求;設備類請求指的是某些特定的USB設備類所傳輸出的請求,例如打印機類就屬于這一類。設備請求要求有嚴格的定義,包含的內容有類型、設備請求、值、索引和長度。
4.4 USB驅動程序結構 S3C2440A芯片支持USB1.1協議和USB 2.0協議。該設計是針對USB Host(主機,A型),并基于USB 1.1協議編寫的。程序結構和數據傳輸的流向如圖4所示。
驅動程序的編寫主要分為以下幾個部分考慮:硬件提取層、中斷服務程序、標準設備請求和主循環。硬件提取層實現的是S3C2440A對I/O端口直接的讀寫操作;中斷服務程序處理各種中斷,包括總線任務上的請求;標準設備請求完成主機送來的各種標準請求,用于完成各種枚舉請求;而主循環則負責完成前臺的數據采集等工作,所有的任務結束后都要回到主循環上去。
5結 語
該設計采用三星公司ARM9的S3C2440A芯片作為CPU,比原來基于單片機的模式,外圍電路簡單,容易可靠地實現嵌入式終端的USB接口功能。在調試中,用到的嵌入式開發板GEC2440A套件還提供了串口工具DNW。用這一工具可以檢測驅動程序的正確與否,如:程序編寫無誤,則DNW串口會提示 “USB IS CONNECT”。由于S3C2440A芯片功能豐富,如處理器可提高運算速度,LCD可人機交互,網口可連接因特網,所以開發出的嵌入式終端不但可提升整體性能,還為日后的應用奠定了基礎。
第四篇:基于ARM的嵌入式Linux終端的研討與實現.
基于ARM的嵌入式Linux終端的研討與實現
【中文摘要】嵌入式Linux是將普通Linux操縱體系入行剪裁、改動,使之能在嵌入式盤算機體系上運行的一種操縱體系。因為兼有Linux和嵌入式體系的長處,以及ARM Linux因其開放的資源特性,嵌入式Linux體系有著巨大的市場前景和商業機遇。在實際的應用體系中,對操縱體系的實時機能也有一定的請求。好比在通信體系中,如果能對操縱體系的實時機能入行優化,提高體系的響應速度,就可以用軟件實現通信協定,下降對硬件的請求,用單芯片實現通信體系,從而下降產品成本。本論文的研討主要是基于ARM920T硬件平臺,該平臺主要面向高機能的用戶產品開發。在此平臺基本上,本文圍繞著Linux內核向ARM平臺移植中幾個核心技術鋪開討論:首先對嵌入式Linux體系體系構造入行了歸納,并詳細闡述了與體系移植相關的主要層。接著,給出了啟動引導代碼Boot Loader和Linux內核初始化部門移植到硬件平臺上的整個入程,解決了移植入程中所面臨的義務和難題。最后,在對Linux內核驅動模型深入掌握的基本上,深入探討了QT/Embedded界面的移植。本文最后討論了一些當前嵌入式Linux實時優化技術。剖析了在勝利移植ARM Linux內核基本上,優化ARM Linux的中止體系,下降體系的中止延時。');【Abstract】 Embedded Linux is an Operating System running on the embedded computer system after cutting and modifying general Linux.Because of the advantages in both open source Linux and embedded system, embedded Linux has large market prospect and commercial chances, now the focus of applications for the embedded Linux has become porting Linux kernel to microprocessor.In some real embedded system applications, real time performances are demanded for operating system like ARM Linux.For example, in communication system, although the speed of ARM920T processors can reach several MHz, the response speed of Linux now is not fast enough.In this case individual hardware communication module should be added to increase the real time performances.If we could optimize the real time property of operating system, then we can realize communication agreement in software, reduce the demand of hardware.Finally we can make communication system in a single chipset and cut down the cost of products.The ***’s research is based on ARM920T hardware platform, which is mainly used for high quality user product developing.On the platform, this text discusses several key technologies about how to porting Linux kernel to ARM platform: first, draw a conclusion of embedded Linux system architecture, and describe related layers of porting system in detail;secondly, write out the whole process on porting Boot Loader and Linux kernel init code to hardware platform, solve faced duties and difficulties;finally, after highly grasp the Linux kernel driver model, deeply discuss porting QT/Embedded inte***ce.Support the project software developing, and greatly reduce the complexity and period in embedded product developing.In the end, we have dropped the conclusion about current cut edge real time technologies for embedded Linux.Based on the successfully ported ARM Linux kernel, optimize its interrupt system, reduce its interrupt delay.
第五篇:基于嵌入式web服務器的遠程控制系統 個人報告
課程名稱:嵌入式系統的軟硬件設計
論文題目:基于嵌入式web服務器的遠程控制系統 姓名: 設計背景
隨著嵌入式系統的發展和Internet的普及,在嵌入式系統中接入網絡已經成為嵌入式系統應用及網絡發展的一個重要方向,也是必然結果。嵌入式系統與Internet技術的結合,正逐漸改變著每個人的生活方式、企業的生產方式以及管理方式;從信息家電,手持數碼產品到設備管理,工業自動控制,嵌入式Internet技術有著廣闊的應用前景。
嵌入式Web服務器是嵌入式系統網絡化應用的重要方面。Web技術可跨越諸多設備和系統在硬件和軟件產品間做到即連即用,任何計算機只需用Web 瀏覽器,不需要專門的計算機和專用的軟件,即可通過以太網和TCP/IP 協議訪問各種信息終端??蛻魴C可任意設置,在全球的任何一個角落,只要能連上Internet 并有權訪問Web 服務器,便可查閱現場有關信息,給維護和管理工作帶來很大的方便。此外,設備信息通過網頁的形式體現,可以使用數據、圖表、動畫等各種豐富的表現方式??梢?,在工業控制領域,各式各樣的嵌入式設備與Web 技術的結合,可大大降低軟件系統和通信系統的設計和維護的工作量,提高現場測試和控制設備的管理水平,可實現設備遠程監控,這是現代化工業生產一大亮點。
結合Web技術的嵌入式設備存在諸多的優勢。研究嵌入式Web 服務器,以實現設備遠程訪問、監測并控制,在科技迅速發展的今天,符合人們對便捷生產、便捷生活的需求,有其重要的現實意義。系統總體方案
通過html語言編寫Web控制頁面,用戶能在Web控制MINI2440開發板,實現對LED和蜂鳴器的控制,以及通過DS18B20溫度傳感器測量溫度,實時傳回顯示的Web頁面上。
蜂鳴器控制瀏覽器中打開web服務器IP地址占空比輸入頁面LED狀態設置頁面CGI函數數據顯示頁面請求服務器CGI返回PWM設置結果頁面CGI返回LED設置結果頁面Index主頁面LED控制請求服務器溫度讀取ResponseRequestRequestRequestRequestResponse圖1 系統流程圖 系統具體設計
首先分析系統的功能需求,我們設計題目是基于嵌入式web服務器的遠程控制系統,那么此系統需要完成以下幾個功能:
1)WEB服務器的搭建
經過查閱資料我們選擇BOA服務器作為本系統的WEB服務器,BOA服務器是一個小巧高效的web服務器,是一個運行于unix或linux下的,支持CGI的、適合于嵌入式系統的單任務的http服務器,源代碼開放、性能高。具體的搭建流程參考網絡資料。2)控制頁面的編寫
控制頁面主要是通過html語言編寫,將頁面文件放置在web服務的文件根目錄下,等待瀏覽器訪問web服務器時,服務器能夠自動的返回我們所編寫的頁面,從而實現與遠程的交互 3)服務器端CGI程序的編寫
根據html和CGI調用的規范,我們將事先寫好的程序編譯成CGI文件放置到web服務器的相應文件夾中,當有相應的請求發生時,web服務器會自動條用相應的CGI程序。4)linux驅動的編寫
linux驅動主要涉及LED驅動、PWM驅動及DS18B20驅動。
4個人承擔任務
(1)蜂鳴器CGI設計
(2)LED驅動編寫
5任務內容 5.1.蜂鳴器CGI 5.1.1公共網關接口CGI 公共網關接口CGI是Web 服務器的一種標準規范,用來將Web 用戶的請求傳遞給服務器的應用程序,并將接收到的數據回送給Web 用戶。每當用戶向Web 服務器提交一個頁面請求(例如,點擊一個超鏈接或輸入一個網站地址),Web 服務器會將用戶請求的存放在服務器上的網頁返回給用戶。然而,當用戶提交一個帶有表單(form)的請求網頁時,在服務器端需要接收表單內容,必要時還要根據表單內容作必要的處理。一般來說,Web 服務器并不能直接處理表單,而是把表單內容傳送給服務器的一個小型應用程序,由該程序對表單數據進行處理并回送必要的確定信息。這種在Web 服務器與應用程序之間往返傳遞數據的方法或規范稱之為“公共網關接口(Common Gateway Interface)”,簡稱CGI。
5.1.2蜂鳴器CGI程序任務
CGI 程序需要從Web 服務器接收用戶信息,對該信息進行必要處理,最后返回處理結果.根據CGI規范以及本系統設計要求,CGI 需要完成下列任務:(1)接收用戶信息
我們在蜂鳴器WEB頁面設置控制蜂鳴器頻率的PWM占空比,用戶瀏覽器將請求頁發送給Web 服務器,由Web 服務器創建一個子進程,在子進程中調用CGI 程序,通過環境變量將用戶信息傳遞給CGI 程序。(2)解碼用戶信息并處理
用戶瀏覽器請求頁在向Web 傳遞過程中首先被編碼,以適合于使用HTTP 協議在網絡上傳送.因此,當用戶信息通過Web 服務器傳遞給CGI 程序后,CGI 程序要對接收到的用戶信息進行解碼,將其還原成初始信息,或者設置的占空比,并驅動蜂鳴器工作。(3)生成HTML 網頁
將驅動蜂鳴器工作后的結果動態生成HTML 網頁,通過Web 服務器回送給用戶瀏覽器,因為用戶瀏覽器要接收的必須是HTML 網頁。
5.1.3蜂鳴器CGI程序
(1)獲得Web 服務器傳遞的信息 data = getenv(“QUERY_STRING”);
Web 服務器將一些關鍵性信息,如請求方法(GEG、POST 等)、請求頁類型、用戶主機地址等設置為相應的環境變量。在CGI 程序中,調用系統函數getenv(),讀取這些環境變量,獲得Web 服務器傳遞的信息。(2)獲取占空比
sscanf(data,“beep_control=%d”,&beep_control);從Web 服務器傳遞的信息中獲取占空比值并保存在beep_contro中。(3)驅動蜂鳴器工作
set_duty(fd_beep, beep_control);調用該函數使蜂鳴器以占空比beep_control對應的頻率發出聲音,fd_beep是驅動設備文件的文件描述符。
voidset_duty(intfd, int duty){ ioctl(fd, PWM_IOCTL_SET_TCNTB, 1000);
ioctl(fd, PWM_IOCTL_SET_TCMPT, duty);
ioctl(fd, PWM_IOCTL_START);} 其中,ioctl是驅動中的函數,實現對PWM的一些控制,設置定時器計數值1000,占空比duty。
#define PWM_IOCTL_START
_IO(PWM_MAGIC, 0)#define PWM_IOCTL_SET_TCNTB _IOW(PWM_MAGIC, 1, int)#define PWM_IOCTL_SET_TCMPT
_IOW(PWM_MAGIC, 2, int)這三個CMD分別為啟動PWM定時器、第二個為設置PWM中TCNTB寄存器的值用于設定定時器的計數值、第三個為設置PWM中TCMPT的值用于設定占空比。(4)生成HTML 網頁
cgiHeaderContentType(“text/html”);//CGI響應內容格式
fprintf(cgiOut, “
”);fprintf(cgiOut, “fprintf(cgiOut, “
”);fprintf(cgiOut, “Control beep
”);fprintf(cgiOut, “”);printf(“set the duty of beep is %d n”, beep_control);fprintf(cgiOut, “
”);fprintf(cgiOut, “ ”);
//添加返回按鈕 fprintf(cgiOut, "