好久沒有寫文章了,最近比較忙了,論文、實習……一堆事情,廢話少說,直奔主題
今天來談談最近做的一個東西,在用的freescale Imx27中架一個WEB server ,其實就是一個簡單的B/S架構了。
首先,既然是一個WEB server ,那麼肯定有一個伺服器了,在一個嵌入式板子上,不可能架一個像apache這麼大的伺服器的,即使架在裡面,整個板子的效能是可想而知的……
1.一步一步來,首先需要選擇什麼樣的伺服器,一些好心的人,已經為我們提供了蠻多的嵌入式server了,只要我們配置一下環境就可以了。有 boa,httpd,yhttpd,easyhtpd,lighttpd 等等了,具體選擇哪個,根據你的愛好了……
這裡我選擇了一個thttpd ,你可以到網上下載一個了,具體怎麼找,百度之……google之……
1)這裡我下載了一個thttpd-2.25b.tar.gz
2)解壓tar xzvf thttpd-2.25b.tar.gz
3)cd thttpd-2.23b
4)修改Makefile檔案中的CC ,選擇你的交叉編譯器了
CC = /opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin/arm-926ejs-linux-gcc
./configure—host=ann—linux
$vi Makefile
LDFLAGS= -static//指定為靜態編譯
當然也可以不用靜態編譯,這樣會讓thttpd變得很大,去掉之後,用arm-linux-readelf -d thttpd 命令來讀取這個包中缺少什麼樣的包,卻什麼加什麼……
5) 現在就可以交叉編譯一下了
簡單make 之後用arm-926ejs-linux-strip thttpd 去掉調試資訊……
6)修改一下thttpd.conf這個設定檔,具體配置方法:
# This secti
on overrides defaults
#聲明CGI程式的目錄,是以dir為根目錄的路徑
dir=/opt/dvsdk/dm365/web
#chroot
#屏蔽chroot是為了運行動態編譯的CGI
user=root# default = nobody
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
# This section _documents_ defaults in effect
port=81
#port參數用於更改連接埠號碼(可不改,若還運行了別的WEB伺服器,則需用不同連接埠)
# nosymlink# default = !chroot
#symlinks
# novhost
cgipat=/cgi-bin/*
# nothrottles
2.第二部是配置CGI的環境,當然就是很簡單了,只要修改一下thttpd.conf這個檔案裡,見上面,上面已經為你配置好了……
這個開發環境已經基本配置好了,現在總結一下我在這個過程中犯過的錯誤,有些錯誤糾結了我好久……
回想這個過程,真是……
1)編譯好之後得CGI檔案,必須用chmod a+x XXX.cgi 給它執行的許可權,否則就是亂碼,或者就跳出一個下載的頁面,這個問題錯誤至少多花了我2個小時的時間,鬱悶死了
2) 第二個是編譯CGI檔案需要交叉編譯環境,但是我不知道腦子怎麼短路了,竟然犯如此低級的錯誤,又至少多話了我一個小時間……
3)列印HTML檔案,什麼樣的形式,出現了各種各樣的問題……
4)亂碼問題,是Linux支援UTF-8而PC上面一般用的是GD2312格式,導致這個問題,可以轉化一下……
5)GET方法和POST方法的選擇問題,有一個標準……
6)還有當然就是程式的錯誤了
7)在使用過程中,要學會使用shell指令碼,不然同樣的幾條步驟,在測試的時候需要反覆的輸入,耽誤時間……
8)當然,Makefile檔案編寫也是很重要的,不同的目錄,不同的檔案相互調用,怎麼寫Makefile檔案,讓其出來我們需要的binary檔案呢?也是需要學習的……
總之,看似簡單的東西,做起來什麼問題都有了,這就是眼高手低……
當然,在調試的過程中,遇到錯誤的時候,要善於分析,有時候不知道怎麼的,腦子不停使喚,一個勁的轉牛角尖,導致白白浪費了大量的時間。
經過艱苦的奮鬥,這個禮拜四終於全部搞定了,其他的就是介面的美化,javascript、HTML 和Linux 一些常見的應用程式變成了了,整個架構出來了,什麼都變得那麼的輕鬆……