一:移植Boa(web服務器)到嵌入式Linux系統php
1、Boa程序的移植css
一、下載Boa源碼
下載地址: http://www.boa.org/
目前最新發行版本: 0.94.13 (幾年沒更新版本了)
下載 boa-0.94.13.tar.gz,html
注意:若從boa上下載的是boa-0.94.13.tar.tar,解壓方式同樣
解壓:linux
二、生成Makefile文件
進入boa-0.94.13,直接運行src/configure文件web
[tekkamanninja@Tekkaman-Ninja src]$./configure瀏覽器 |
三、修改Makefile文件(注意:必須用cross-2.95.3, 如使用3.4.一、4.1.1等等會出錯) 四、交叉編譯服務器
[tekkamanninja@Tekkaman-Ninja src]$ makeapp |
五、去除調試信息,減少體積。(可選)dom
[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> Hello,world.\n");printf("\n"); printf("\n"); exit(0); }
|
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系統