如今在嵌入式設備中所使用的web服務器主要有:boa、thttpd、mini_httpd、shttpd、lighttpd、goaheand、appweb和apache等。javascript
1.介紹php
Boa誕生於1991年,做者Paul Philips。是開源的,應用很普遍,特別適合於嵌入式設備,網上流行程度很廣。它的官方網站說boa是最受人喜好的嵌入式web服務器。功能較爲強大,支持認證,cgi等。Boa 是一個單任務的HTTP SERVER,它不像傳統的web服務器那樣爲每一個訪問鏈接開啓一個進程,也不會爲多個鏈接開啓多個自身的拷貝。Boa對全部的活動的http鏈接在內部進行處理,並且只爲每一個CGI鏈接(獨立的進程)開啓新的進程。所以,boa在同等硬件條件下顯示出更快的速度。測試代表boa在Pentium 300MHZ下可以每秒鐘處理幾千次點擊,在20 MHz 386/SX下可以每秒鐘處理幾十次點擊訪問。css
Boa和thttpd等,與apache等高性能的web服務器主要區別是,它們通常是單進程的服務器,只有在完成一個用戶請求後才能響應另外一個用戶的請求,沒法併發響應,但這在嵌入式設備的應用場合裏已經足夠了。html
Boa設計主要出於速度和安全,是指不被惡意用戶暗中破壞,而不是指它有很好的訪問控制和通訊加密。能夠添加SSL來保證數據傳輸中的保密和安全。java
2.操做系統python
All POSIX (Linux/BSD/UNIX-like OSes)linux
3.版本程序員
從0.90到如今的最新發布版本0.94。最新發布版本0.94:boa-0.94.13.tar大小爲120k,解壓後爲436k,編譯以後的可執行代碼在60k左右。最近開發版本:boa-0.94.14rc21web
4.可執行程序的大小、內存需求狀況數據庫
Boa有最少的資源需求。很是少的內存需求,能耗很小。 特別適合於嵌入式市場。含有gcc 2.95.3和 GNU libc 2.2.5的boa的二進制文件大小爲61K( 495K statically linked )。使用庫uClibc,boa變得更小(92K statically linked)。
有人曾作過測試:所用環境AMD Duron 700,384MB RAM, RealTek 8139,SiS900 chipset-based NICs ,LinkSys 10/100 hub,Linux 2.4,結果是:Boa的虛擬內存(VmSize)大小是1696kB,85%是庫文件。虛擬內存數據(VmData size)大小是108kB。Boa每次連個併發鏈接消耗掉20kB的內存。
參考比較表:
Server
Stripped Binary Size
VmSize
External Libraries
Boa 0.94.13
61kB
1700kB
0
Apache 1.3.26
277kB
11,000kB
9
thttpd 2.20c
64kB
1800kB
0
5.功能、特色
l 支持HTTP/1.0(實驗性的、有條件的支持HTTP/1.1)
l 支持CGI/1.1,編程語言除了C語言外,還支持Python, Perl, PHP,但對PHP沒有直接支持,沒有mod_perl, mod_snake/mod_python等。
l 它能夠配置成SSL/HTTPS和 IPv6。
l 支持虛擬主機功能。
Boa服務器與其它服務器的不一樣:
爲了追求速度和簡單性,boa服務器在一些方面不一樣於一些流行的web服務器。
CGI程序的REMOTE_HOST環境變量沒有設置
The REMOTE_HOST environment variable is not set for CGI programs, for reasons already described. This is easily worked around because the IP address is provided in the REMOTE_ADDR variable, so (if the CGI program actually cares) gethostbyaddr or a variant can be used.
Boa不具備ssi(server side includes)。
We don't like them, and they are too slow to parse. We will consider more efficient alternatives.
Boa不具備訪問控制。
Boa will follow symbolic links, and serve any file that it can read. The expectation is that you will configure Boa to run as user "nobody", and only files configured world readable will come out.
沒有chroot選項。
There is no option to run chrooted. If anybody wants this, and is willing to try out experimental code, contact the maintainers.
官方網站:www.boa.org
1.介紹
Thttpd是ACME公司設計的一款比較精巧的開源Web服務器。它的初衷是提供一款簡單、小巧、易移植、快速和安全的HTTP服務器,而事實上,Thttpd也正是這樣一款服務器。它在Unix系統上運行的二進制代碼程序,僅僅400k左右,在同類Web服務器中應該是至關精巧的。在可移植性方面,它可以在幾乎全部的Unix系統上和已知的操做系統上編譯和運行。Thttpd在默認的情況下,僅運行於普通用戶模式下,從而可以有效地杜絕非受權的系統資源和數據的訪問,同時經過擴展它也能夠支持HTTPS、SSL和TLS安全協議。Thttpd尤其稱道的是已經全面支持IPv6協議, 而且具備獨特的Throttling功能,能夠根據須要限制某些URL和URL組的服務輸出量。此外,Thttpd全面支持HTTP 1.1協議(RFC 2616)、CGI 1.一、HTTP 基本驗證(RFC2617)、虛擬主機及支持大部分的SSI(Server Side Include)功能,並可以採用PHP腳本語言進行服務器端CGI的編程。
thttpd是一個很是小巧的輕量級web server,它很是簡單,對於併發請求不使用fork()來派生子進程處理,而是採用多路複用(Multiplex)技術來實現。所以效能很好。對於小型web server而言,速度快彷佛是一個代名詞,經過官方站提供的Benchmark,能夠這樣認爲:thttpd至少和主流的web server同樣快,在高負載下更快,由於其資源佔用小的緣故。Thttpd還有一個較爲引人注目的特色:基於URL的文件流量限制,這對於下載的流量控制而言是很是方便的。象Apache就必須使用插件實現,效率較thttpd低。Thttp是開源的。是用C語言編寫的。使用的不少。
2.操做系統
Thttpd支持多種平臺,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。
3.版本
最新版本:thttpd-2.25b.tar 130kB,解壓後497kB
4. 可執行程序的大小、內存需求狀況
編譯後的可執行的二進制文件爲60kB左右,與boa差很少。版本已從1.90a發展到2.25b,
使用內存不多,沒查到具體的數據。
5.特色、功能
thttpd中是一個簡單,小型,輕便,快速和安全的http服務器.
特色:
簡單:它可以支持HTTP/1.1協議標準,或者超過了最低水平
小巧:它具備很是少的運行時間,由於它不fork子進程來接受新請求,而且很是謹慎
的分配內存
便攜:它可以在大部分的類Unix系統上運行,包括FreeBSD, SunOS 4, Solaris 2, BSD/OS, Linux, OSF等等
快速:它的速度要超過主流的Web服務器(Apache, NCSA, Netscape),在高負載狀況下,它要快的多。
安全:它努力的保護主機不受到攻擊,不中斷服務器
thttpd,適合靜態資源類的服務,好比圖片、資源文件、靜態HTML等等的應用,性能應該比較好,同時也適合簡單的CGI應用的場合。
功能:
l 支持CGI1.1。
l 支持基本的認證功能。
l 支持Chroot功能
l 支持Throttling。
l 支持IPv6。
l 支持多虛擬主機功能。
l 支持自定義錯誤頁。
l 支持標準日誌記錄。
l Thttpd處理了大量的信號,這些信號是經過標準的Unix kill(1) command發出的。
l 經過擴展它也能夠支持HTTPS、SSL和TLS安全協議。
使用建議: 對於那些併發訪問量中等,而又須要較強響應能力、並指望可以控制用戶訪問流量,並且有較高安全性需求的用戶而言,thttpd Web服務器顯然是一個比較好的選擇。 thttpd目前的最新版本是2.2.5版。
下圖爲www.acme.com/software/thttpd網站對幾種web server比較圖。
· Software – 哪一種web服務器
o Model - what kind of server it is. The models are:
§ fork - start a new process for each request.
§ pre-fork - pre-start a pool of processes which each handle multiple requests.
§ threads - use threads instead of processes.
§ Java threads - this version of the Java runtime uses "Green threads" instead of native threads, so it acts more like the select-based servers.
§ select - use non-blocking I/O and the select() system call to handle multiple requests in a single process, single thread.
從上面能夠看到thttpd、boa都是使用select方式,apache使用的是pre-fork方式,因爲apache是多進程方式,thttpd、boa是單進程方式,所使用的內存要遠小於apache,且速度快於apache。
o Auto-conf (自動配置)- whether there's a script to automatically configure the build process for your OS.
o Basic auth (基本認證)- whether the server supports Basic Authentication, for password-protected web pages.
o Chroot - whether the server lets you use the chroot() system call to enhance security.
o Throttling - the ability to set bandwidth limits on certain pages, so they don't use more than their fair share of the server's resources.
o Tar bytes - the uncompressed source tarchive size.
o Source files - how many source and header files.
o Source lines - how many lines in the source and header files.
o Exe - the executable size. For the compiled program this is size of the main executable file, stripped. For the Java servers it's the total size of the .class files or .zip files. For Roxen it's the size of the Pike interpreter.
· 基礎測試系統。The benchmark test system is a 297MHz Ultra Sparc with 256MB RAM / 512MB swap running Solaris 2.6, otherwise totally quiescent. RLIMIT_NOFILE is 256 soft / 1024 hard, and v.v_maxup is 3941.
· RPS – 每秒響應請求次數。maximum requests per second. This is determined by running the test load at various parallel-request rates and finding the maximum response rate. See the graph below for the full data.
o Small files - the small-file test load consists of 1000 files, each 1KB long, requested randomly.
o CGI - the CGI test load consists of a trivial "hello world" C program. .
· Max users – 最大處理的用戶數。This is determined by running the test load at various parallel-request rates and seeing when it starts screwing up. Typical screwups are running out of memory or processes, so that requests start timing out or getting refused.
o Large files - the large-file test load consists of 100 files, each 1MB long, requested randomly. Also, each connection is throttled to simulate a 33.6Kbps modem. Note that 1000 33.6Kbps connections is 3/4 of a T3.
上面的比較中,thttpd和boa都沒有使用最新版本,boa的最新版本已經支持基本認證、自動配置等功能。Thttpd和boa的基本功能差很少,能夠互相替換。如今選用web服務器時,同時有boa和thttpd的狀況下,選擇使用boa的狀況居多。我在一篇論文中提到一點,說:thttpd在運行過程當中所須要的資源要遠大於boa,但沒有驗證過。
官方地址:http://www.acme.com/software/thttpd/
下載地址:http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz
1. 介紹
Mini_httpd是一個小型的HTTP服務器。開源,它的性能不強,可是它很是適合於中小訪問量的站點。Mini_httpd和thttpd都是ACME Labs 開發的軟件,功能沒有thttpd強。
2. 操做系統
與thttpd相同。
3. 版本
發佈的版本從1.00到1.19。最新發布的版本是version 1.19.tar 41kB,解壓後爲140kB。
4. 功能、特色
它實現了HTTP服務器的全部的基本功能,包括:
· 支持CGI功能
· 支持基本的驗證功能
· 支持安全 .. 上級目錄功能
· 支持通用的MIME類型
· 支持目錄列表功能
· 支持使用 index.html, index.htm, index.cgi 做爲首頁
· 支持多個根目錄的虛擬主機
· 支持標準日誌記錄
· 支持自定義錯誤頁
· Trailing-slash redirection
· 它能夠配置成SSL/HTTPS和 IPv6.
5.可執行文件大小、內存使用狀況
編譯後可能要小於boa、thttpd,內存使用可能小於boa、thttpd。Mini_httpd的功能,thttpd功能幾乎都覆蓋了。
mini_httpd 也是相對比較適合學習、實驗使用,大致實現了一個Web Server的功能,支持靜態頁和CGI,可以用來放置一些我的簡單的東西,不適宜投入生產使用。
官方地址:http://www.acme.com/software/thttpd/
下載地址:http://www.acme.com/software/mini_httpd/mini_httpd-1.19.tar.gz
1.介紹
Shttpd,開源。它是另外一個輕量級的web server,具備比thttpd更豐富的功能特性,支持CGI, SSL, cookie, MD5認證, 還能嵌入(embedded)到現有的軟件裏。最有意思的是不須要配置文件!因爲shttpd能夠輕鬆嵌入其餘程序裏,所以shttpd是較爲理想的web server開發原形,開發人員能夠基於shttpd開發出本身的webserver,官方網站上稱shttpd若是使用uclibc/dielibc(libc的簡化子集)則開銷將很是很是低。
2.操做系統
Windows, QNX, RTEMS, UNIX (*BSD, Solaris, Linux)。
3.版本
它的最新版本是:shttpd-1.38.tar ,75kB,解壓後爲278kB。發佈的版本從2004年的1.3到如今的2007年的1.38
4.功能、特色
l 小巧、快速、不膨脹、無需安裝、簡單的40KB的exe文件,隨意運行
l 支持GET, POST, HEAD, PUT, DELETE 等方法
l 支持CGI, SSL, SSI, MD5驗證, resumed download, aliases, inetd模式運行
l 標準日誌格式
l 很是簡單整潔的嵌入式API
l 對庫dietlibc 支持友好,對uClibc (*)不友好。
l 容易定製運行在任意平臺:Windows, QNX, RTEMS, UNIX (*BSD, Solaris, Linux)
不具備的功能:
virtual hosts, user home directorires, ACL (access control lists), traffic shaping, keep-alive connections, FCGI (Fast CGI) support.
5.可執行文件大小、內存使用狀況
編譯後的可執行的二進制文件爲40kB左右.
網上查詢結果是有關內容不多。使用範圍不廣。有網友對它的評論是:shttpd功能算是比較全的, 但在處理二進制數據時不夠穩定, 時有異常. 有待觀察。
官方網站:http://shttpd.sourceforge.net/
下載地址:http://sourceforge.net/project/showfiles.php?group_id=126090&package_id=137886
1.介紹
Lighttpd是一個德國人領導的開源軟件,歷時只有三年。其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好而且靈活的web server環境。具備很是低的內存開銷,cpu佔用率低,效能好,以及豐富的模塊等特色。lighttpd 是衆多OpenSource輕量級的web server中較爲優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,而Apache之因此流行,很大程度也是由於功能豐富,在lighttpd上不少功能都有相應的實現了,這點對於apache的用戶是很是重要的,由於遷移到lighttpd就必須面對這些問題。實用起來lighttpd確實很是不錯,apache主要的問題是密集併發下,不斷的fork()和切換,以及較高(相對於 lighttpd而言)的內存佔用,使系統的資源幾盡枯竭。而lighttpd採用了Multiplex技術,代碼通過優化,體積很是小,資源佔用很低,並且反應速度至關快。利用apache的rewrite技術,將繁重的cgi/fastcgi任務交給lighttpd來完成,充分利用二者的優勢,如今那臺服務器的負載降低了一個數量級,並且反應速度也提升了一個甚至是2個數量級!lighttpd 適合靜態資源類的服務,好比圖片、資源文件、靜態HTML等等的應用,性能應該比較好,同時也適合簡單的CGI應用的場合,lighttpd能夠很方便的經過fastcgi支持php。
2.操做系統
Unix、linux、Solaris、FreeBSD
3.版本
最新版本lighttpd-1.4.17.tar,783kB,解壓後爲3.48MB
4.功能、特色
下面是lighttpd官方網站給出的lighttpd特色,
l virtual hosts
l virtual directory listings
l URL-Rewriting, HTTP-Redirects
l automatic expiration of files
l Large File Support (64bit fileoffsets)
l Ranges (start-end, start-, -end, multiple ranges)
l on-the-fly output-compression with transparent caching
l deflate, gzip, bzip2
l authentication
l basic, digest
l backends: plain files, htpasswd, htdigest, ldap
l fast and secure application controlled downloads
l Server Side Includes
l User Tracking
l FastCGI, CGI, SSI
l PHP-Support:
l same speed as or faster than apache + mod_php4
l includes a utility to spawn FastCGI processes (neccesary for PHP 4.3.x)
l via FastCGI and CGI interface
l support Code Caches like Turckmm, APC or eaccelarator
l load-balanced FastCGI
l (one webserver distibutes request to multiple PHP-servers via FastCGI)
l Security features:
l chroot(), set UID, set GID
l protecting docroot
l strict HTTP-header parsing
5.可執行文件大小、內存使用狀況
沒有查到具體數據。
Lighttpd缺點就是bug比較多,軟件並不穩定,並且文檔太簡略,有些功能須要你本身猜想才懂得怎麼配置。尤爲是使用內存,很難說清楚具體使用量,通常在10-20M(繁忙站點),但有時候會突發到100多M,並穩定下來。不過相對apache的使用量,這個已經不算多。
lighttpd雖然是web服務器中的輕量級。但對於嵌入式web服務器來講仍是較大的一個web服務器,功能較強。
有人評論lighttpd:lighttpd、apache 屬重量級服務器, 成熟穩定, 體積較大, 在複雜的嵌入式應用上可選用.
Lighttpd使用的不普遍,在google中搜索:嵌入式 lighttpd,結果幾乎沒有相關的內容。Lighttpd使用內存比其它小型嵌入式web服務器內存資源要多。畢竟它不是專爲嵌入式設備開發的。
官方網站:www.lighttpd.net
1.介紹
GoAhead Webserver是爲嵌入式實時操做系統(RTOS)量身定製的Web服務器。它的目標也許不在於目前的WEB服務器市場,而是面向當嵌入式系統深刻咱們的工做與生活的明天,那時,它也許會成爲使用最普遍的WEB服務器。GoAhead Webserver構建在設備管理框架(Device Management Framework)之上,用戶能夠像標準的Web Services同樣來部署本身的應用,不須要額外的編程。GoAhead Webserver支持SOAP客戶端(Simple Object Access Protocol,簡單對象訪問協議),XML-RPC客戶端,各類Web瀏覽器和單獨的Flash客戶端。GoAhead Webserver支持一種類ASP的服務器端腳本語言,其語法形式和微軟的ASP語法基本相同(Active Server Page)。GoAhead Webserver是跨平臺的服務器軟件,能夠穩定地運行在Windows,Linux和Mac OS X操做系統之上。GoAhead Webserver是開放源代碼的,這意味着你能夠隨意修改Web服務器的功能。這款WEB服務器很是小巧,它的WIN CE版本編譯後的大小還不到60k,它的輸出一般也是面向一些小屏幕設備。在性能方面,使用一顆24MH z的68040處理器,它的響應速度爲20次/秒,使用266MHz的Pentium處理器能夠達到50次/秒的響應速度。
2.操做系統
Windows CE, Wind River VxWorks, Linux, Lynx, QNX,與Windows 95/98/NT
3版本
Goahead從2003年開始發佈,最新的版本:webs218.tar ,827kB,解壓後爲2.28MB
4.功能、特色
· 很小的內存消耗
· 支持認證功能Digest Access Authentication (DAA)
· 支持安全的通訊,例如SSL(安全的套接字層)
· 支持動態Web頁面,如ASP頁面
· 可使用傳統的C語言編程定製Web頁面裏的HTML標籤
· 支持CGI(公共網關編程接口)
· 嵌入式的JavaScript腳本翻譯器
· 獨特的URL分析器
· 它基本上屬於一個HTTP1.0標準的WEB服務器,對一些HTTP1.1的特性如(持久鏈接)也提供了支持。每秒65次connections
5.可執行文件大小、內存使用狀況
內存需求60K,它的WIN CE版本編譯後的大小還不到60k。
自 2004 年 2.18 版以後, GoAhead 官方再也不對它免費許可的升級和支持,若是是學習和研究之用, 移植很方便, 沒必要關心太多; 若是商用, 那些已知的 bug 就必須手工去改,包括對 cgi 的支持, 對操做系統差別而引用的 bug,參考下這個 http://www.eybuild.com/develop/demoshow.htm ,這個就是用的 GoAhead。
GoAhead官方網站:http://webserver.goahead.com/
1.介紹
appWeb有兩種許可,一種是GPL,免費的,另一種是商業許可,有30天的試用期。免費的版本在http://www.appwebserver.org/ 下載,appWeb的商業版本由Mbedthis公司發佈和維護,網址是http://www.mbedthis.com/。appweb 是下一代嵌入式web服務器,它天生是爲嵌入式開發的,它的最初設計理念就是安全。Appweb是一個快速、低內存使用量、標準庫、方便的服務器。與其它嵌入式web服務器相比,appweb最大特色就是功能多和高度的安全保障。Appweb簡單、方便、開源。
2.操做系統
Linux, Windows, Mac OSX , Solaris
3.版本
Appweb最新版本是appweb-src-2.2.2 ,大小1.195MB,解壓後6.22MB
4.功能、特色
AppWeb提供的一些關鍵好處:
l 低開發成本。支持cgi/1.一、javastript、esp、php(4and5),加快開發進度。
l 最小的資源需求。一秒能響應3500個請求,很是迅速,而且緊湊(110KB)。
l 靈活的開發環境。Appweb高度模塊化,能夠根據須要取捨。
l 可靠性
具備的功能:
· 支持嵌入式JavaScript,esp,egi,cgi和php。.
· 容易使用。 大量的例子文檔可用。
· 安全。支持SSL、認證。 Secure Socket Layer (SSL) including both client and server certificates. Digest and Basic Authentication. Sandbox directives to limit denial of service attacks.
· 模塊化. Select only the features you need via dynamically loadable modules. Also supports granular source code compilation directives.
· 性能突出。. Fastest performance in its class. Over 3500 requests per second on a PC class device. Memory footprint from 110K. Code and web pages are fully ROMable.
· 符合標準. AppWeb supports HTTP/1.0, HTTP/1.1, CGI/1.1, SSL RFC 2246, HTTP RFC 2617
· 方便. AppWeb has been ported to Linux, Windows, Mac OSX and Solaris and support the following CPU architectures: ARM7, MIPS32, i386/X86, PowerPC and Sparc
Feature Overview
Dynamic Content
· Embedded Server Pages (ESP)
· Embedded Gateway Interface (in-memory CGI)
· CGI/1.1
· PHP (4 and 5)
Embedded Server Pages
· Server-side JavaScripting
· Integrated session state management
· Scripted generation of HTML
· Extensible via new functions
· Manage client state-data via sessions
· Post-back paradigm. Same page for form and post logic
Security
· Secure Sockets Layer (SSL)
· Basic and Digest Authentication
· Directory and URL location based authorization
· Sandbox limits
· Access and access violation logging
Modularity
· Dynamic loading of modules
· Extensible URL handlers
· Extensible / replaceable authorization, SSL and script
Ease of Use
· Apache-style configuration file
· Debugging and trace logging
· Packaged installations for Linux and Windows
· Run as a service / daemon
Other Features
· HTTP server and client access program
· Named and IP based virtual hosts
· Listen on multiple ports
· Compile web pages and files into C code for execution from ROM
Standards
· HTTP/1.1
· CGI/1.1
· Apache configuration file compatibility
Performance
· Multithreaded with high performance thread pool
· Request throughput (> 3,500 requests per second)
· Scales on multi-cpu systems
· Small memory footprint even under heavy load (from 400K)
Developer Features
· HTTP server and client libraries
· Shared and static libraries supplied
· C and C++ APIs
· Operate single-threaded or multithreaded (Compile or run-time selectable)
· Easy, intuitive programming model
· Integrate with common event mechanism: Windows Messages, Unix select, dedicated thread
· Coding minimized as most features can be specified via the configuration file
· Cookbook of samples (cut and paste to get going)
· SMP safe
· Extensive debug trace logging
O'Brien describes AppWeb as a "mini-Apache" in part because it features compatibility with Apache configuration syntax. "One of our customers was able to solve a problem using Apache documentation from the Internet," O'Brien notes. AppWeb is not based on the apache codebase, however. "It's a clean implementation," says O'Brien. "It's really hard to shrink something down."
AppWeb architecture
5.可執行文件大小、內存使用狀況
內存使用110KB, Small memory footprint even under heavy load (from 400K)。
官方網站http://www.appwebserver.org/
最新的apache版本是httpd-2.2.4.tar,6.07MB,解壓後爲27.2MB,在嵌入式web服務器中不多使用,在網上搜索看到有人在vxwork上用過apache,在其它方面沒有,我認爲,goahead、appweb具備豐富的功能,沒有使用apache的必要。另外一個緣由是由於apache是一個多進程web服務器,使用的內存不少。
因爲apache的prefork工做模式有關。每一個apache進程只能同時服務於一個http鏈接。這種模式好處在於每一個進程不互相干擾,穩定性好;缺點也創建在優勢之上,就是佔用資源多,即便每一個進程只使用2M內存(若是使用了php,這點內存根本不夠),100的併發鏈接就用掉200M的內存。
如今的嵌入式linux中CGI程序主要使用C語言。對於編寫C語言的CGI程序,能夠編寫好程序以後,在linux操做系統下編譯,用針對硬件平臺的linux的交叉編譯工具編譯就能夠,寫的html網頁界面在記事本寫便可。我之前寫的CGI程序就是在此環境下寫的。這也是最廣泛的開發方法。
對於用C語言編寫CGI程序還可使用CSP/eybuild提供的平臺庫及其開發套件,它能夠將CGI程序嵌入式到網頁中,能夠提升開發效率。傳統用C作CGI的方法是直接使用printf() 等標準I/O函數輸出HTML代碼,這樣不但使得C程序和HTML程序交織的混亂不堪,還使得頁面輸出的流程控制變得很是複雜。CSP與之不一樣,它充分吸收了ASP/JSP/PHP等以HTML/ XML爲模板嵌入腳本語言優勢,並充分融合C語言的語言特性。使得CSP的開發更快速、更高效,同時還大大提了最終代碼的可讀性和維護性。 CSP設計的最原始的初衷,就是要爲嵌入式開發定製的一套相似 ASP/JSP/PHP的C語言開發工具。針對設備WEB開發CSP提供了豐富的平臺庫和開發工具,它們爲設備系統的WEB交叉開發和移植提供了有力的支持。經過交叉開發,能夠在其它硬功件平臺徹底未準完畢的狀況下進行高層軟件的開發。這不只能爲產品開發有效地節約軟硬件資源,還爲WEB程序提供簡單有效地調試工具。
但缺點是,CSP/eybuild不是一個開源的項目,若是你是我的使用或出於學習、研究目的你能夠從eybuild的官方站點http://www.eybuild.com 免費下載,或發郵件到 eybuild@hotmail.com 免費索取。它的站點上能夠下載針對x8六、arm920T的CSP/eybuild開發平臺,其它平臺須要向網站上定購。若是你想在你的嵌入式設備的開發板上試用或出於學習和研究目的,你也可把您目標板及編譯環境的詳細資料發給eybuild@hotmail.com,請求爲你的目標板單獨製做一份交叉編譯開發的CSP/eybuild平臺。若是你想你的商用產品或項目中使用CSP/eybuild,你必須在CSP/eybuild的商用受權後纔可以使用。商用受權後您將能夠獲得很好的技術支持和技術培訓。關於商用受權的詳細流程,可郵件至eybuild@hotmail.com 垂詢。
用C語言編寫CGI與其它語言編寫CGI的比較:
C語言簡潔緊湊,使用方便、靈活,對程序的語法結構要求不是很嚴,這就使得編程
人員在編程時具備很大的靈活性,能夠設計出本身風格的程序。不像UNIX SHELL、Perl和TCL,C語言是一種編譯語言,源程序代碼要被系統的續譯器翻譯成機器能直接執行的二進制代碼,所以用C語言編寫的CGI程序的運行速度要比用解釋性語言編寫的程序快。使用編澤語言的另外一個好處是即便CGI執行程序陷入黑客之手,他們也沒法像分析用解釋性語言編寫的CGI程序那樣找到程序中的漏洞。因爲C語言最初是針對系統設計的,這使得C語言的字符串處理能力比較差,若是CGI程序須要對字符串進行一些複雜的操做,用C諾言實現起來將比較麻煩,代碼量也較多。如今網上用C語言編寫的CGI程序僅次於Perl(Perl編寫程序簡單方便)。
CGI與JSP的比較:
Servlet是Java技術對CGI編程的回答。Servlet程序在服務器端運行,動態地生成Web頁面。與傳統的CGI和許多其餘相似CGI的技術相比,Java Servlet具備更高的效率,更容易使用,功能更強大,具備更好的可移植性,更節省投資。詳細內容見備註。JSP是強於CGI,這也是如今CGI技術的使用沒有JSP使用多的緣由。但如今嵌入式web服務器端程序開發,仍是CGI較多。因爲使用JSP技術,在嵌入式web服務器開發中不多使用,在網上沒有查到關於在嵌入式web服務器上應用的有關內容。
要實現閱讀器的lmt,所需的CGI代碼量估計不會不少,關鍵在於調試。
根據上面的分析,考慮到使用範圍寬廣程度,在小型服務器、不要求太強功能,推薦選用boa、thttpd,其實它們足能夠知足大多數狀況下的需求,也是使用最廣、可參考最多的嵌入式web服務器。若是要求強大的功能,支持javastript等,推薦選用goahead、appweb。
一個網友的我的意見:
boa 的功能比較齊全, 便對嵌入式應用不少功能就是冗餘(如virtual host), 內存使用量較大些.
thttpd 功能較少, 實現簡單. 內存使用量較少. 同時比較方便擴展.
shttpd 功能功能算是比較全的, 但在處理二進制數據時不夠穩定, 時有異常. 有待觀察.
light-httpd, apache 屬重量級服務器, 成熟穩定, 體積較大, 在複雜的嵌入式應用上可選用.
goAhead 是個比較專用的 webserver, 大部分功能都在服務它本身提供的 goform 功能和
ASP/javascript 功能. 最後的 2.1.8 版仍有很多bug. (見下)
mini-httpd 與 thttpd 是同一家, 功能幾乎徹底同樣.
boa 缺陷:
(1) 未提供 CGI 解析頭處理.
可按這個地址方便修改. http://bbs.chinaunix.net/viewthread.php?tid=824840
(2) 對 POST 數據使用臨時文件緩衝, 對沒法創臨時文件的小系統系統, 須要手工改下這部代碼.
不少人報告在移植時不能POST 數據, 都是這個緣由.
(3) ...
thttpd 缺陷:
(1) CGI1.1 標準支持不完整(不般影響不大), 未提供對協議要求的其它HTTP頭處理,
如:If-Modified-Since, Accept-Language等應用程序就收不到.
(2) 直接使用 socket 到 CGI 應用的重定, 會致使提供大量 POST 數據時(如上傳文件),
CGI應用不讀徹底部 POST 數據就沒法向瀏覽器應答 bug
(3) ...
goAhead 缺陷:
(1) 專用, 如喜歡它提供的 goform和 asp 令論.
(2) CGI 對二進制輸出有不少 bug.
(3) 爲實現單一任務處理, 在很平臺採用延時輪詢接收隊列, 處理效率不高.
(4) 其它 bug 有不一羅列了, 移植時要一個個訂下.
我的觀點, 僅供參考.
Good Luck!
CGI, mod_perl, PHP, JSP性能比較
這是網上一篇關於CGI,mod_perl,PHP,JSP的性能比較的文章,從中能夠看出它們的性能。
測試結果很大程度上依賴於機器的硬件/軟件配置,並隨配置變化而產生差別,所以:
本測試結果 *僅供參考*
測試用硬件:
CPU: Intel PII 300(66x4.5)
RAM: 192M
HD: IBM 20G(2M cache)
測試用軟件:
OS: Slackware 7(自行編譯的2.2.14核心)
Web: Apache 1.3.12(標準模塊按缺省配置,全部模塊靜態編譯)
PHP 4.0 RC1(加入了MySQL支持)
mod_perl 1.23(缺省配置,未加EVERYTHING=1)
ApacheJServ 1.1(缺省配置)
JDK: JDK 1.2.2
JSDK: JSDK 2
JSP: GNUJSP 1.0.0
JSP: GNUJSP 1.0.0
本測試是用Apache自帶的Apache Bench(ab)進行的,命令爲:
/www/bin/ab -c 20 -n 1000 CGI/腳本URL
此命令表示使用 20 個併發鏈接,進行 1000 次請求。全部測試均在本機進行,各類測試均反覆進行5次,去掉最大最小值後取平均值。 我分別測試了C寫的CGI、Perl寫的CGI、用mod_perl執行的Perl CGI、PHP和JSP。
各類CGI/腳本均輸出內容類似的簡單頁面,內容以下:
html
body
h1The xxxx Hello Program/h1
p
Hello xxxx World!
/body
/html
測試結果(只取了最具表明性的 Requests per second 即每秒處理請求數這一項)
CGI/腳本類型 每秒處理請求數
C CGI 128
Perl CGI 69
mod_perl 223
PHP 237
JSP 21
測試結論:
除了JSP以外,其它幾種CGI/腳本的表現大體是正常的。Perl程序解釋執行,做爲
CGI運行時又須要另外fork進程,因此最慢;mod_perl和PHP都直接在httpd內部運行腳本,省掉了fork的消耗,因此快了不少;C程序雖然本應最快,但做爲CGI 運行時也是由於fork而使性能大打折扣。至於JSP...我想這個結果並不具備表明性。畢竟測試用機只有192M內存,用top看看,一個JAVA就佔了11M。何況測試用機自己是一臺Web server,測試時還有好幾十個httpd在跑不過無論怎麼說,在配置較低的服務器上,跑PHP、mod_perl在性能上要好過JSP是確定的。
附測試用程序:
C程序 hello.c
#include stdio.h
int main(void)
{
char s[] = "C CGI";
printf ("Content-Type: text/html ");
printf ("html "
"body "
"h1The C CGI Hello Program/h1 "
"p "
"Hello %s World! "
"/body "
"/html ", s);
return 0;
}
用 gcc -o hello hello.c 編譯,把 hello 放到 cgi-bin目錄下。
Perl程序 hello.pl
#!/usr/bin/perl
#!/usr/bin/perl
$s = "Perl CGI";
print "Content-Type: text/html ";
print <<DONE
html
body
h1The Perl CGI Hello Program/h1
p
Hello $s World!
/body
/html
DONE
把hello.pl放到cgi-bin目錄下,兼做Perl CGI和mod_perl 腳本測試用。
PHP文件 hello.php
html
body
h1The PHP Hello Program/h1
<? $s = "PHP"; ?>;
p
Hello <? echo $s ?>; World!
/body
/body
/html
JSP文件 hello.jsp
html
body
h1The JSP Hello Program/h1
p
<% String s = "JSP"; %>;
p
Hello <%= s %>; World!
/body
/html
Java Servlet和JSP的技術概述以及比較
Java Servlet及其特色
Servlet是Java技術對CGI編程的回答。Servlet程序在服務器端運行,動態地生成Web頁面。與傳統的CGI和許多其餘相似CGI的技術相比,Java Servlet具備更高的效率,更容易使用,功能更強大,具備更好的可移植性,更節省投資(更重要的是, Servlet程序員收入要比Perl程序員高:-):
高效:
在傳統的CGI中,每一個請求都要啓動一個新的進程,若是CGI程序自己的執行時間較短,啓動進程所須要的開銷極可能反而超過實際執行時間。而在Servlet中,每一個請求由一個輕量級的Java線程處理(而不是重量級的操做系統進程)。
在傳統CGI中,若是有N個併發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重複裝載了N次;而對於Servlet,處理請求的是N個線程,只須要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有着更多的選擇,好比緩衝之前的計算結果,保持數據庫鏈接的活動,等等。
方便:
Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。
功能強大:
在Servlet中,許多使用傳統CGI程序很難完成的任務均可以輕鬆地完成。例如,Servlet可以直接和Web服務器交互,而普通的CGI程序不能。Servlet還可以在各個程序之間共享數據,使得數據庫鏈接池之類的功能很容易實現。
可移植性好:
Servlet用Java編寫,Servlet API具備完善的標準。所以,爲I-Planet Enterprise Server寫的Servlet無需任何實質上的改動便可移植到Apache、Microsoft IIS或者WebStar。幾乎全部的主流服務器都直接或經過插件支持Servlet。
節省投資:
不只有許多廉價甚至免費的Web服務器可供我的或小規模網站使用,並且對於現有的服務器,若是它不支持Servlet的話,要加上這部分功能也每每是免費的(或只須要極少的投資)。
JSP及其特色
JavaServer Pages(JSP)是一種實現普通靜態HTML和動態HTML混合編碼的技術,有關JSP基礎概念的說明請參見《JSP技術簡介 》。
許多由CGI程序生成的頁面大部分仍舊是靜態HTML,動態內容只在頁面中有限的幾個部分出現。可是包括Servlet在內的大多數CGI技術及其變種,老是經過程序生成整個頁面。JSP使得咱們能夠分別建立這兩個部分。例如,下面就是一個簡單的JSP頁面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>歡迎訪問網上商店</TITLE></HEAD>
<BODY>
<H1>歡迎</H1>
<SMALL>歡迎,
<!-- 首次訪問的用戶名字爲"New User" -->
<% out.println(Utils.getUserNameFromCookie(request)); %>
要設置賬號信息,請點擊
<A HREF=http://www.blue1000.com/article/"Account-Settings.HTML">這裏</A></SMALL>
<P>
頁面的其他內容。.
</BODY></HTML>
下面是JSP和其餘相似或相關技術的一個簡單比較:
JSP和Active Server Pages(ASP)相比
Microsoft的ASP是一種和JSP相似的技術。JSP和ASP相比具備兩方面的優勢。首先,動態部分用Java編寫,而不是VB Script或其餘Microsoft語言,不只功能更強大並且更易於使用。第二,JSP應用能夠移植到其餘操做系統和非Microsoft的Web服務器上。
JSP和純Servlet相比
JSP並無增長任何本質上不能用Servlet實現的功能。可是,在JSP中編寫靜態HTML更加方便,沒必要再用 println語句來輸出每一行HTML代碼。更重要的是,藉助內容和外觀的分離,頁面製做中不一樣性質的任務能夠方便地分開:好比,由頁面設計專家進行HTML設計,同時留出供Servlet程序員插入動態內容的空間。
JSP和服務器端包含(Server-Side Include,SSI)相比
SSI是一種受到普遍支持的在靜態HTML中引入外部代碼的技術。JSP在這方面的支持更爲完善,由於它能夠用Servlet而不是獨立的程序來生成動態內容。另外,SSI實際上只用於簡單的包含,而不是面向那些可以處理表單數據、訪問數據庫的「真正的」程序。
JSP和JavaScript相比
JavaScript可以在客戶端動態地生成HTML。雖然JavaScript頗有用,但它只能處理以客戶端環境爲基礎的動態信息。除了Cookie以外,HTTP狀態和表單提交數據對JavaScript來講都是不可用的。另外,因爲是在客戶端運行,JavaScript不能訪問服務器端資源,好比數據庫、目錄信息等等。
Java很佔內存嗎?
使用Java平臺進行嵌入式設備開發時,其對內在的使用量,會不會比使用原始語言如C/C++更大些呢?這取決於軟件的複雜性。Java因爲虛擬機和內庫的緣由,有可能會致使內存開銷的增大。下面比較一下Java平臺內存的佔用狀況(基於Sun的實現):
CLDC(Connected Limited Device Configuration,運算功能有限、電力有限的嵌入式裝置,如PDA 、手機等):可工做於100K(RAM),JIT(Just In Time,即時編譯技術)須要最大些。典型的部署要求500K-16M(RAM)。
CDC(Connected Device Configuration,運算能力相對較佳、並請在電力供應上相對比較充足的嵌入式裝置,如冷氣機、電冰箱等):VM約爲250K,JIT小於300K,VM+JIT+基礎類庫約佔2-2.5M。典型的部署要求:4M-32M。
固然,內存的佔用量還取決於應用的大小及內在的使用狀況。能夠看出,其實Java平臺不會佔用太大的內存。可是,這只是問題的一半。另外一半是,Java代碼最後部署時是以類文件來部署的,它主要是包括字節碼和元數據。經過對CVM數據的分析,能夠看出,字節碼佔據着大概30%的數據量。而採用JIT編譯的代碼相對於字節碼而言,能夠發現,內存的佔有量增長了,並有一個7-8倍的ARM指令集。因爲,能夠估計:
Java類轉成字節碼的速度≈1/30%≈3.3x;
原始語言轉成字節碼的速度≈7x。
這意味着,Java代碼的內存使用量約爲原始語言代碼的一半。固然這只是很是粗略的估算,但倒是合理的估算。
使用Java的JIT後,只有那些使用頻率高的代碼纔會被編譯。而在系統中只是偶然被執行的代碼則採用解釋來編譯。同時,JIT儘可能使被編譯的代碼其內存佔有量保持在一較小的範圍內。對CVM(CDC所使用虛擬機),默認值爲512K。而在一些較優秀的程序中,能夠發現,其值爲100K-300K。
這也就是說,使用Java編寫的程序,只有使用頻率比較高的代碼才致使內存佔用的增長。相反,使用C/C++編寫的程序,整個代碼都須要進行編譯。所以,不能說使用Java語言編寫的程序佔用的內存就會比使用C/C++編寫的程序大。這決定於軟件相對於平臺代碼的複雜度及大小。若是軟件規模比較大,Java平臺所消耗的內存遠小於Java類文件簡潔性節約的內存,這種狀況下,使用Java平臺將有利於節約內存。若是軟件的規模比較小,則Java平臺消耗的內存就比較明顯了,能夠考慮使用C/C++來開發,以節約內存。
---------------------------------------------------------------------
一:移植Boa(web服務器)到嵌入式Linux系統
1、Boa程序的移植
一、下載Boa源碼
下載地址: http://www.boa.org/
目前最新發行版本: 0.94.13 (幾年沒更新版本了)
下載 boa-0.94.13.tar.gz,
注意:若從boa上下載的是boa-0.94.13.tar.tar,解壓方式同樣
解壓:
二、生成Makefile文件
進入boa-0.94.13,直接運行src/configure文件
[tekkamanninja@Tekkaman-Ninja src]$./configure |
三、修改Makefile文件(注意:必須用cross-2.95.3, 如使用3.4.一、4.1.1等等會出錯) 四、交叉編譯
[tekkamanninja@Tekkaman-Ninja src]$ make |
五、去除調試信息,減少體積。(可選)
[tekkamanninja@Tekkaman-Ninja src]$/home/tekkamanninja/working/source/2.95.3/bin/arm-linux-strip boa |
六、將編譯好的程序放入根文件系統的/bin目錄下。
[tekkamanninja@Tekkaman-Ninja src]$ cp boa/home/tekkamanninja/working/nfs/rootfs/bin/ |
2、配置Boa
Boa須要在/etc目錄下創建一個boa目錄,裏面放入Boa的主要配置文件boa.conf。在Boa源碼目錄下已有一個示例boa.conf,能夠在其基礎上進行修改。
一、Group的修改
[root@~]#adduser -g user boa |
二、ScriptAlias的修改
修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
爲 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
這是在設置CGI的目錄,你也能夠設置成別的目錄。好比用戶文件夾下的某個目錄。
三、ServerName的設置
修改 #ServerName www.your.org.here
爲 ServerName www.your.org.here
注意:該項默認爲未打開,執行Boa會異常退出,提示「gethostbyname::No such file or directory」,因此必須打開。其它默認設置便可。你也能夠設置爲你本身想要的名字。好比我設置爲:ServerName tekkaman2440
此外,還須要:
將mime.types文件複製/etc目錄下,一般能夠從linux主機的 /etc目錄下直接複製便可。
(如下配置和boa.conf的配置有關)
建立日誌文件所在目錄/var/log/boa
建立HTML文檔的主目錄/var/www
建立CGI腳本所在錄 /var/www/cgi-bin
[tekkamanninja@Tekkaman-Ninja log]$ mkdir -m 777 boa |
3、運行Boa
開發板操做:
[root@~]#boa
若是發現boa沒有運行,則能夠在開發板的/var/log/boa/error_log文件中找緣由。
好比端口已被其餘程序佔用:
或是用戶設置錯誤等等,均可以查到。 |
4、功能測試
靜態網頁測試
將靜態網頁存入根文件系統的/var/www目錄下(能夠將主機 /usr/share/doc/HTML/目錄下的index.html、homepage.css和img、stylesheet-images目錄複製到/var/www目錄下)
我參考《嵌入式Web服務器移植 》的作法以下:
在根文件系統的/var目錄下
[tekkamanninja@Tekkaman-Ninja var]$ cp /usr/share/doc/HTML/index.html www/ |
直接在瀏覽器中輸入開發板的IP地址(好比個人是http://192.168.1.2) ,出現fedora的歡迎網頁。靜態HTML調試成功。
CGI功能測試
一、編寫HelloworldCGI.c程序
[tekkamanninja@Tekkaman-Ninja source]$ vi helloworldCGI.c
(主程序的程序開頭必定要用Tab,而不是空格,否則編譯可能不經過)
#include<stdio.h> |
2.交叉編譯生成CGI程序
[tekkamanninja@Tekkaman-Ninja source]$/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc-o helloworldCGI helloworldCGI.c |
將helloworldCGI 拷貝至根文件系統的/var/www/cgi-bin/下
[tekkamanninja@Tekkaman-Ninja source]$ cp helloworldCGI../nfs/rootfs/var/www/cgi-bin/ |
3.測試
瀏覽器輸入網頁出現 Hello,world. 調試成功!
[tekkamanninja@Tekkaman-Ninja src]$ cd ../.. |
CC = /home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gcc |
[tekkamanninja@Tekkaman-Ninja source]$tar xzf boa-0.94.13.tar.gz |
1、下載並解壓
下載的官方主頁:www.lighttpd.net
我下的是目前最新的lighttpd-1.4.18
解壓:
[tekkamanninja@Tekkaman-Ninja source]$ tar xjvf lighttpd-1.4.18.tar.bz2
2、配置和交叉編譯
[tekkamanninja@Tekkaman-Ninja source]$ cd lighttpd-1.4.18
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ CC=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc ./configure -prefix=/lighttpd -host=arm-9tdmi-linux-gnu --disable-FEUTARE -disable-ipv6 -disable-lfs
這裏特別注意一下:-prefix=/lighttpd , 我是將軟件先裝在Host的根目錄下的lighttpd文件夾內,而後將其複製到開發板的根文件系統的根目錄下。我之因此這樣作是由於這個軟件在make install時會配置他私有的庫文件的路徑,在開發板運行時會在-prefix= 的文件加下找他的私有庫文件。而我又是交叉編譯給開發板,這樣配置比較方便移植。
--disable-FEUTARE -disable-ipv6 -disable-lfs 能夠不加。
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ make
3、程序安裝
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ make install
拷貝配置文件到開發板根文件系統的etc文件夾並進行適當修改:
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cp doc/lighttpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ kwrite /home/tekkamanninja/working/nfs/rootfs/etc/lighttpd.conf
必需修改的地方有:
server.document-root = "/srv/www/htdocs/"
改成server.document-root = "/home/lighttpd/html/"
你能夠本身定義,這裏就是設置web服務的根目錄。
屏蔽一下語句,否則嵌入式這樣的小系統下可能沒法啓動
#$HTTP["url"] =~ "\.pdf$" {
# server.range-requests = "disable"
#}
開看程序須要那些動態庫:
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ ~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d src/lighttpd
Dynamic section at offset 0x20790 contains 21 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0xc200
0x0000000d (FINI) 0x231c0
0x00000004 (HASH) 0x8128
0x00000005 (STRTAB) 0xa338
0x00000006 (SYMTAB) 0x8b48
0x0000000a (STRSZ) 5946 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x30860
0x00000002 (PLTRELSZ) 960 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0xbe40
0x00000011 (REL) 0xbe00
0x00000012 (RELSZ) 64 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0xbd70
0x6fffffff (VERNEEDNUM) 2
0x6ffffff0 (VERSYM) 0xba72
0x00000000 (NULL) 0x0
拷貝動態庫:
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cp ~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libdl-2.3.2.so~/working/nfs/rootfs/lib/
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cp ~/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/arm-9tdmi-linux-gnu/lib/libdl.s* ~/working/nfs/rootfs/lib/
在開發板爲此程序新建一個用戶及存儲網頁的根目錄以及一個log目錄:
開發板操做:
[root@~]#adduser -g user lighttpd
Changing password for lighttpd
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
Enter new password:
Bad password: too short.
Warning: weak password (continuing).
Re-enter new password:
passwd[786]: password for `lighttpd' changed by user `root'
Password changed.
[root@~]#
HOST 操做:
[tekkamanninja@Tekkaman-Ninja lighttpd-1.4.18]$ cd ../../nfs/rootfs/home/lighttpd/
[tekkamanninja@Tekkaman-Ninja lighttpd]$ su
口令:
[root@Tekkaman-Ninja lighttpd]# mkdir html
[root@Tekkaman-Ninja lighttpd]# chmod 777 html/
[root@Tekkaman-Ninja lighttpd]# mkdir ../../var/log/lighttpd
[root@Tekkaman-Ninja lighttpd]# chmod 777 ../../var/log/lighttpd
將移植好的程序(整個目錄,其中包含了bin、sbin、lib和share目錄)拷貝到開發板根文件系統的根目錄下:
[root@Tekkaman-Ninja lighttpd]# mv /lighttpd /home/tekkamanninja/working/nfs/
[root@Tekkaman-Ninja lighttpd]# exit
exit
4、運行程序
在開發板上操做:
[root@~]#/lighttpd/sbin/lighttpd -f /etc/lighttpd.conf
將測試靜態網頁放在server.document-root設置的目錄下,並在HOST的瀏覽器下輸入開發板IP,測試經過。
至於CGI的運行,我還不懂配置,有空再研究!
三:移植shttpd Web服務器到嵌入式Linux系統