999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

LAMP架構在嵌入式平臺上的移植與搭建

2018-10-24 04:39:04李小娜張釋如張雨珊趙榕
現代電子技術 2018年20期

李小娜 張釋如 張雨珊 趙榕

摘 要: 基于嵌入式的Web服務應用體系提出將通用服務器架構LAMP應用于嵌入式系統的設計思想。分析LAMP架構在嵌入式領域的應用優勢,設計嵌入式平臺上LAMP架構的具體實現方案,并給出LAMP中各個組件在移植、配置和優化中的具體方法。該架構為嵌入式系統的高級網絡應用提供了一種通用解決方案,其具體實現方法對嵌入式網絡服務及其監控系統的應用具有借鑒和參考價值。

關鍵詞: LAMP; MySQL; B/S架構; 嵌入式系統; Web服務; 網絡應用

中圖分類號: TN915?34; TP368.5 文獻標識碼: A 文章編號: 1004?373X(2018)20?0114?04

Abstract: A design idea of applying the general server architecture Linux?Apache?MySQL?PHP (LAMP) to the embedded system is proposed based on the embedded Web service application system. The advantages of applying the LAMP architecture in the embedded field are analyzed. The specific implementation scheme of the LAMP architecture on the embedded platform is designed. The specific methods for transplantation, configuration and optimization of every component in LAMP are presented. The architecture provides a general solution for the advanced network application of the embedded system. The specific implementation method of the architecture has a reference value for applications of embedded network service and its monitoring system.

Keywords: LAMP; MySQL; B/S architecture; embedded system; Web service; network application

0 引 言

隨著嵌入式系統對網絡功能需求的不斷提升,越來越多的嵌入式平臺移植了B/S架構的Web服務來提供網絡控制功能,在嵌入式網絡服務及其監控系統等方面有廣泛應用[1]。

目前,嵌入式平臺的Web服務做法基本是:以thttpd,boa,lighttpd等輕型服務器為主,配合移植SQLite,eXtremeDB等小型嵌入式數據庫,最后利用后臺CGI(Common Gateway Interface)服務程序,將采集的數據反映到Web頁面或存入數據庫。這些精簡架構雖然小巧靈活、結構簡單,但是其功能有限,也不具備普遍適用性,存在許多應用方面的問題。第一,在水質監測、農田信息檢測、糧倉監控等環境監控系統中,需要長期監測采集的信息,而大多數輕型嵌入式Web服務器穩定性不夠;第二,在智能家居、機房監控等場合,要求數據或系統能以動態模擬的方式呈現給用戶,僅靠CGI程序很難實現;第三,在工業控制領域中的預警處理、故障分析、安全監測等需要對數據庫表進行長期跟蹤與智能分析,而利用CGI操作大多數精簡型嵌入式數據庫不能實現完善的智能監測。

LAMP(Linux?Apache?MySQL?PHP)是指由 Linux 操作系統、Apache Web服務器、MySQL數據庫,以及超文本預處理器(Hypertext Pre?Proeessor,PHP)腳本語言組成的一種B/S服務架構,是當今能與 J2EE 和.Net 齊名的三大 Web 典型架構之一。由于J2EE中Oracle成本過高,而.Net移植性不好,所以LAMP成為目前唯一一個經過配置和優化能夠移植到嵌入式系統中的通用架構。LAMP架構基于Linux系統,Linux 作為一種 UNIX 操作系統,它是真正的多用戶、多任務、多平臺操作系統,具有穩定健壯、低成本、高性能、互操作性和開放源代碼等特點[2]。不同于傳統嵌入式精簡架構,Linux選用高穩定性的Apache服務器軟件,使用PHP動態頁面設計,并利用MySQL數據庫與PHP跨平臺連接的優勢,能夠實現具有普遍適用性的B/S服務系統,滿足信息監控對嵌入式系統的要求。

1 嵌入式LAMP系統的整體設計

LAMP 架構由4個組件構成,呈分層結構。每一層都提供了整個軟件的一個關鍵部分。

1) Linux:最底層,是整個架構的操作系統平臺。其穩定性很好,內核裁減配置方便,通用性好,支持絕大多數嵌入式硬件平臺;

2) Apache:次底層,是當今網站建設最常用的通用型Web服務器,具有良好的跨平臺和安全特性[3];

3) MySQL:代碼精簡的小型關系數據庫[4],與Apache服務器和PHP的兼容性好,通用性強,功能更加完善,其為深度嵌入,編程時需通過API接口進行訪問和操作,而不是直接使用SQL查詢命令;

4) PHP:簡單有效的動態Web頁面編程語言,與CGI和Perl相比,PHP動態頁面的執行效率更高,對MySQL提供的特殊接口能充分發揮PHP的數據處理優勢[5]。嵌入式環境下的LAMP采用PHP與CGI的配合共同完成服務程序的功能。

嵌入式的Web服務主要是在嵌入式設備中搭建Web服務架構軟件組,實現用戶與嵌入式設備之間的信息交流。在嵌入式系統中實現完整的B/S服務架構,需要根據嵌入式系統的特性做出相應調整,嵌入式的LAMP架構是以Apache服務器為服務核心;MySQL作為后臺數據庫支持;利用PHP實現Web前端網頁的高級動態顯示功能;并利用PHP實現與MySQL數據庫的交互;最后使用CGI與嵌入式系統其他數據采集或控制程序交互。圖1給出了嵌入式 LAMP在ARM平臺上的架構框圖。

在整個架構中,數據采集控制程序利用驅動程序提供的接口采集傳感器中的數據,將其傳給CGI服務程序且同時存入數據庫。CGI程序通過與服務器的標準接口將數據傳至服務器完成信息的實時顯示,同時接收從Web頁面表單傳入的請求信息,并將這些信息經過解碼重編后傳給控制程序,再由控制程序實現對設備的控制。PHP利用數據庫API對MySQL數據庫進行操作,經過分析處理之后,反映到由PHP設計的動態頁面上。

2 嵌入式Apache服務器的搭建

嵌入式Apache服務器是指在嵌入式系統中移植Apache服務器。服務器端軟件的守護程序始終在HTTP端口守候客戶的連接請求,當客戶端向服務器發起一個連接請求后,客戶和服務器之間建立起連接。守護程序在接收到客戶端HTTP請求消息后,對其進行解析,并將解析后的請求交給后臺處理程序。本文的后臺程序是PHP程序和CGI程序,待后臺程序處理完后,將客戶端需要的數據轉交給服務器,最后反映到Web頁面上。

2.1 Apache服務器的移植

Apache服務器在ARM?Linux系統上的移植主要步驟有[6]:

1) 添加Apache服務器的root權限

在編譯ARM源碼之前,由于PHP擴展了socket功能,需要用到socket的相關函數,而這類socket需要root權限,所以要讓Apache運行在root權限下。在Apache源碼包的include/http_config.h文件最開始添加下面語句:

然后在linux文件系統的/etc/目錄中建立兩個文件passwd,group,即添加一個用戶和用戶組,最后將Apache的配置文件httpd.conf中的user和group選項都改為root。

2) 移植Apache庫文件

Apache服務器的運行需要移植庫文件,可以在宿主機上直接編譯Apache源碼包,利用/user/local/目錄下生成的Apache庫文件,并將其移植到ARM平臺相同目錄下。

3) 配置Apache的PHP支持

配置Apache的PHP支持需要修改配置文件httpd.conf,將對應行改為對PHP的支持。

2.2 Apache服務器的配置與優化

對于嵌入式環境對服務器需求來看,一般同時訪問數量不會很大,訪問的請求類型比較固定,數據量也不會很大。如果每個請求都單獨開一個進程的話,就會占用太多的內存空間,但如果在單個進程中開太多線程處理請求,又會降低訪問成功率。

雖然Apache服務器相比其他輕型服務器需要消耗更多的系統資源,但是它可以工作在兩種模式下:prefork模式和worker模式。一般來說,Apache設定在prefork工作模式下,每個Apache進程只能同時服務于一個HTTP請求。這種模式的優勢在于每個進程不會互相干擾,穩定性較好,但每個進程需使用約2 000 kB內存,100個并發連接需用約200 MB的內存。當Apache服務器工作在worker模式下時,使用混合多線程多路處理模塊,讓每個子進程有多個處理線程,而每個線程服務于一個HTTP請求,這樣極大地削減了內存開銷,從而滿足高流量的服務場合。

利用Apache服務器MPM(Multi?Processing Module)多處理模塊的特點,通過對MPM配置,能夠優化多進程和多線程的操作,其中重要參數有[7]:

1) StartServers:設置httpd啟動時啟動的子進程數;

2) MinSpareServers:設置最小空閑進程數;

3) MaxSpareServers:設置最大空閑進程數;

4) MaxClients:設置Apache可同時處理的請求數;

5) MaxRequestsPerChild:設置每個子進程可處理的請求數。

這些參數對Apache服務器性能有很大影響,可以針對實際應用和板卡資源來設置Apache服務器;同時響應請求的個數、最多處理的進程數量以及每個進程開啟的線程數量,充分利用多進程與多線程的不同優勢。對于這些參數,可能需要經過反復調整試驗,使嵌入式服務器既能及時響應每個請求,又不至于因為負荷太大導致響應失敗。

3 嵌入式MySQL數據庫的搭建

嵌入式MySQL數據庫是一種為其宿主軟件或環境提供數據的模塊,通過對數據表合理的設計及數據存儲方式的科學選擇,使數據庫接到查詢指令后立即檢索信息并提交。

3.1 MySQL的移植

移植嵌入式MySQL數據庫的主要步驟有:

1) 添加ncurses支持

MySQL的交叉編譯過程需要ncurses庫的支持[8],所以首先要解壓安裝ncurses?5.9.tar.gz庫,并且需要修改configure文件,使編譯過程支持交叉編譯。即將文件中的if test "$cross_compiling"設置為yes;并注銷掉后面的錯誤打印語句。

2) 定義數據堆棧初值

需要在sql_parse.cc這個文件中添加對堆棧生長方面初值的定義,ARM平臺為1,所以添加定義語句:#define STACK_DIRECTION 1。

3) 安裝授權表

在運行數據庫之前,需要運行mysql_install_db ?u root安裝授權表,修改MySQLD的.cnf配置文件,并設置MySQL的安裝路徑basedir和data文件路徑datadir。

3.2 MySQL數據庫的配置與優化

嵌入式環境一般對數據的查詢時間要求并不是很高,且儲存的數據量也不會很大。因此需要配置MySQL數據庫,使其盡可能在保證查詢速率的同時減少內存開銷。通過在 my.cnf文件中添加以下代碼來配置慢查詢時間并啟動慢查詢:

log?slow?queries = /data/mysqldata/slowquery.log

然后根據需要設置慢查詢時間(例如long_query_time=4),經過一段時間使用之后找到比較慢的SQL查詢請求,并對它們進行針對性優化。另一方面,MySQL數據庫對相同查詢的反復執行會進行查詢緩處理,即利用內存暫存數據,這種方式不但增加了內存開銷,而且也無法存取到實時更新的數據。因此,可以在 MySQLD中強制加入一些限制來降低緩沖命中率,降低緩存空間,以保證有限的內存資源。

4 嵌入式動態交互方式的實現

目前的嵌入式Web頁面的開發模式是將界面不變的部分作為一個靜態頁面,以HTML格式存儲在ROM中,以方便嵌入式系統直接操作;利用標記替代法提供Web動態服務,對需要動態變化的內容作特殊標記,并將標記變量傳遞給CGI服務程序,由CGI完成與后臺數據的交互。本文中部分靜態和簡單動態的服務程序由CGI完成,而高級復雜的動態頁面通過PHP設計。

本文設計的CGI程序利用C語言編寫,能夠更方便地與底層驅動或嵌入式系統的其他應用層程序交互,主要CGI服務程序分為兩個模塊:

1) 程序交互模塊:CGI通過進程間通信的方式與底層控制程序、采集程序、驅動程序交互,實現對底層數據的獲取和控制命令的傳達。

2) 服務器交互模塊:CGI通過服務器提供的標準接口,接收表單的標記變量,并將從底層程序獲取的數據反饋給服務器。

在嵌入式Web頁面中實現高級動態功能需要用到PHP動態腳本或動態程序。由于PHP代碼是運行在服務器端的,利用服務器端的PHP程序實現對數據庫的操作,將數據庫中的數據動態地顯示到網頁上來。

實現PHP動態網頁[9],需要有PHP支持包,其移植需要先安裝移植zlib庫和libxml2庫。為了降低內存開銷,可以對PHP 配置文件php.ini中的一些參數進行配置:

1) max_execution_time:單一腳本占用CPU的時間(s);

2) max_input_time:單一腳本等待數據輸入的時間(s);

3) memory_limit:單一腳本運行時可占用的內存(B);

4) output_buffering :發送給客戶端的數據所占的緩存(B)。

根據具體應用情況,若用戶需要載入的數據不多,可適當減少max_input_time,并通過降低memory_limit值以降低單一腳本在運行中占用的內存。

5 結 語

嵌入式系統網絡化是嵌入式領域的市場發展方向,利用嵌入式LAMP能夠建立穩定性更好、數據處理能力更強、應用功能更加完善的監控系統。嵌入式設備成本低、體積小[10],這樣的監控系統一方面滿足了環境監測中對系統穩定性的要求,另一方面解決了照明控制、電源管理、閥門智能儀表中對數據的處理問題。筆者按照本文提出的設計方法,在ARM11開發板(核心芯片為S3C6410)上成功實現了一個嵌入式LAMP系統。該系統實現了服務器組件與嵌入式程序的交互,完成了數據的動態顯示與更新,可以對環境溫度和濕度進行實時監控。嵌入式的LAMP雖然功能強大,但系統開銷相對較大,這可通過PHP與AJAX,Java Applet等技術融合使客戶端與服務器的處理資源合理分配,并通過對LAMP各個組件的配置與優化,減小這種架構的運行開銷。隨著系統硬件性能的不斷提升,這種架構方案將會在圖書館嵌入式服務系統以及更多的嵌入式系統中得以應用。

參考文獻

[1] 劉風華,楊麗君.基于ARM的嵌入式煤礦視頻監控系統設計[J].現代電子技術,2014,37(16):8?10.

LIU Fenghua, YANG Lijun. Design of ARM?based embedded video monitoring system in coal mine [J]. Modern electronics technique, 2014, 37(16): 8?10.

[2] 雷文禮,任新成,高瑛.基于Linux平臺的通信軟件的設計與實現[J].現代電子技術,2015,38(17):30?33.

LEI Wenli, REN Xincheng, GAO Ying. Design and implementation of communication software based on Linux platform [J]. Modern electronics technique, 2015, 38(17): 30?33.

[3] 陸志烽.Linux下Apache服務器的搭建[J].數字技術與應用,2016(5):100.

LU Zhifeng. Construction of Apache server under Linux [J]. Digital technology and application, 2016(5): 100.

[4] NIXON R. Learning PHP, MySQL, JavaScript, CSS & HTML5 [M]. 3rd ed. Sebastopol: O′Reilly Media, 2014.

主站蜘蛛池模板: 97久久精品人人做人人爽| 国产成年女人特黄特色毛片免 | 伊人福利视频| 亚洲AV电影不卡在线观看| 91精品日韩人妻无码久久| 色综合五月婷婷| 97狠狠操| 综合色区亚洲熟妇在线| 日本高清在线看免费观看| 日本久久网站| 亚洲人成网站色7799在线播放| 国产香蕉97碰碰视频VA碰碰看 | 亚洲欧美一区二区三区图片| 秋霞国产在线| 欧美色综合网站| 在线看国产精品| 九色91在线视频| 亚洲人视频在线观看| 精品久久香蕉国产线看观看gif| 三上悠亚一区二区| 日韩黄色精品| 夜精品a一区二区三区| 中国国语毛片免费观看视频| 久久精品国产亚洲AV忘忧草18| 欧美区一区| 国产第一页亚洲| 91免费片| 国产av剧情无码精品色午夜| 国产尤物在线播放| 亚洲综合亚洲国产尤物| 久久综合国产乱子免费| 1024你懂的国产精品| 欧美自慰一级看片免费| 动漫精品啪啪一区二区三区| 亚洲人妖在线| 99久久精品免费看国产电影| 蜜桃视频一区二区| 免费一看一级毛片| 欧美成人日韩| 亚洲综合片| 污网站在线观看视频| 成人精品午夜福利在线播放| 国产成人精品一区二区不卡| 久热精品免费| 91伊人国产| 五月婷婷导航| 亚洲天堂精品视频| 久久精品丝袜| 亚洲色图欧美| 在线播放国产99re| 欧美性久久久久| 999精品视频在线| 欧美成人影院亚洲综合图| 久久中文字幕不卡一二区| 中美日韩在线网免费毛片视频| 九色91在线视频| 浮力影院国产第一页| 国产亚洲精品自在线| 制服无码网站| 久久综合九色综合97婷婷| 免费高清自慰一区二区三区| 久久人午夜亚洲精品无码区| 无码人中文字幕| 国产传媒一区二区三区四区五区| 色首页AV在线| 国产成人无码AV在线播放动漫| 国产亚洲欧美日韩在线一区| 国产精品欧美亚洲韩国日本不卡| 欧美亚洲香蕉| 久久久久久高潮白浆| 亚洲成人福利网站| 亚洲欧美精品在线| 亚洲系列中文字幕一区二区| aⅴ免费在线观看| 农村乱人伦一区二区| 极品私人尤物在线精品首页| 欧美一级色视频| 久久美女精品国产精品亚洲| 亚洲精品视频在线观看视频| 在线视频97| 人妻无码中文字幕第一区| 美女裸体18禁网站|