在嵌入式設備中,在沒有液晶顯示的狀況下,可使用web來訪問設備,查看設備的運行狀態以及進行參數設置,相似於路由器設置。網上有不少關於各類web server的優劣的評論,在此不討論,只是介紹其中的Goahead在linux下移植的一些要點。css
goahead-3.4.9html
arm + linux 2.6,交叉編譯器arm-uclibc-gcclinux
一、把src目錄下的certs、utils、goahead-openssl目錄都刪除掉。git
二、把osdep裏面的osdep.h移到外層src去。web
三、把goahead-linux-default-me.h拷到src目錄,更名爲me.h。瀏覽器
四、配置me.h,在開頭添加兩行,表示運行的環境。bash
#define __arm__ 1 #define __linux__ 1
五、不須要SSL,把me.h中兩個宏都置爲0。服務器
#define ME_COM_OPENSSL 0 #define ME_COM_SSL 0
六、須要打印更多運行信息,把me.h中把宏ME_GOAHEAD_LOGFILE由stderr:0改成stderr:2。ui
#define ME_GOAHEAD_LOGFILE "stderr:0" #define ME_GOAHEAD_LOGFILE "stderr:2"
七、setLocalHost中調用gethostbyname多是失敗的,致使運行不起來,直接不調用了。this
八、route.txt須要改一下,把route uri=/cgi-bin handler=cgi 改成route uri=/cgi-bin dir=./web handler=cgi,表示cgi-bin目錄在web目錄下。
九、cgiHandler中要註釋掉chdir(dir);,要不找不到cgi-bin下的程序,這樣查找cgi程序時使用相對路徑。
十、編寫makefile,編譯出來可執行文件goahead。
CC=arm-uclibc-gcc #CC=gcc #-Werror FLAGS = -Wall -fPIC -g -O2 -s -ldl -lm -o SOURCE_FILE = *.c goahead: $(SOURCE_FILE) $(CC) $(FLAGS) $@ $(SOURCE_FILE) clean: rm -rf goahead .PHONY: clean
十一、佈署,建立目錄/mnt/goahead,把編譯出來的可執行程序goahead放在此目錄下,goahead目錄下再建立web目錄,此目錄存放一些網頁相關的內容(如index.html,css,image等),在web目錄下再建立cgi-bin目錄,用於存放cgi程序。
十二、./goahead執行可看到以下信息表示運行成功
goahead: 1: This system does not have IPv6 support goahead: 2: Configuration for Embedthis GoAhead goahead: 2: --------------------------------------------- goahead: 2: Version: 3.4.9 goahead: 2: BuildType: Debug goahead: 2: CPU: arm goahead: 2: OS: linux goahead: 2: Host: 0.0.0.0 goahead: 2: Directory: /mnt/goahead goahead: 2: Documents: web goahead: 2: Configure: me -d -q -platform linux-x86-default -configure . -with openssl -gen make goahead: 2: --------------------------------------------- goahead: 2: Started http://*:80 goahead: 2: ^^^^^^^^^^^ web start successful ^^^^^^^^^^^
1三、在瀏覽器中輸入ip便可看到,請求goahead的cgitest程序時,可見服務器的打印信息goahead: 2: GET /cgi-bin/cgitest HTTP/1.1,瀏覽器上顯示的頁面以下圖所示。
因爲產品中還有vxworks平臺,因此也曾移植到vxworks平臺,移植的要點和linux下差很少,把goahead-vxworks-default-me.h複製到src目錄下,改成me.h,並加上幾個關鍵的宏定義便可。
#ifndef VXWORKS #define VXWORKS 1 #endif #ifndef OS #define OS "VXWORKS" #endif #ifndef WEBS #define WEBS 1 #endif #ifndef UEMF #define UEMF 1 #endif #ifndef __mips__ #define __mips__ 1 #endif