日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

goahead php,Goahead移植教程 | 学步园

發布時間:2024/4/13 php 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 goahead php,Goahead移植教程 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前在系統中用的是boa webserver ,但是在頻繁提交多次后,boa會出現request.c 99錯誤并刷屏,造成系統無法正常工作,于是采用了goahead webserver,這個也是適用于嵌入式的服務器,同樣支持CGI,下面是移植過程,以及出錯糾正。

我的平臺是:主機Windows XP,帶有虛擬機上的Ubuntu,

首先從goahead官網上下載到goahead webs218,這個版本相對穩定。解壓縮。

我是直接把goahead的可執行文件編譯到zImage中,所以首先在uclinux-dist/user下創建goahead文件夾,把剛才解壓出來的文件夾WS031202復制到goahead下,然后修改uclinux-dist/user下kconfig和Makefile文件,在kconfig下添加:

config USER_GOAHEAD

bool "go_ahead"

default y

help

just go_ahead

上面USER_GOAHEAD要和Makefile中的CONFIG_USER_GOAHEAD保持一致。www.linuxidc.com兩個go_ahead可以自由編寫,default y意思是在編譯內核時用make就可以直接編譯進去zImage,這樣就省去了make menuconfig時選取的過程。

在Makefile中添加:

dir_$(CONFIG_USER_GOAHEAD)?????????????? += goahead/LINUX

因為goahead適用于多平臺,所以包含有用于多個平臺的編譯文件和makefile、main.c,因此我們要用的是Linux文件夾下的Makefile,而不是上層的,同時在user/Makefile指定編譯路徑可以包含多層文件,所以添加的是上面的內容。

然后再uclinux-dist/user/goahead下修改部分文件:

【1】Linux下的main.c

(1)修改

initwebs(...) 函數中:

/*

if ((hp = gethostbyname(host)) == NULL) {

error(E_L, E_LOG, T("Can'tget host address"));

fprintf(stderr,"initWebs: host name %s\r

",host);

return -1;

}

memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],

(size_t) hp->h_length);

*/

intaddr.s_addr = inet_addr("192.168.1.100"); // 板子IP

gethostbyname函數在此處無效,如果不修改則會出現的問題是:板子啟動完成后,可執行文件webs剛打開,ps下就沒有webs的pid,這是因為IP不生效,webs出錯所以打不開。

(2)fork改成vfork

因為uclinux不支持fork,只支持vfork,所以必須改掉。

(3)修改跟目錄

把static char_t? *rootWeb = T("web");改成static char_t? *rootWeb = T("/home/httpd");

如果有需要可以改變首文件home.asp成需要的網頁文件。

(4)不能修改tempnam

如下。好多地方說要修改這個,但是這個僅適用Linux而不是uclinux

不要把pname1 = tempnam(NULL, T("cgi"));//原來的

改成pname1 = (char_t*)mkstemp( T("cgi"));

這個改了后打開CGI就特別遲緩,而且webs占用CPU達到百分之九十多。

【2】misc.c中

屏蔽以下:

//static int strnlen(char_t *s, unsigned int n);

//static int strnlen(char_t *s, unsigned int n)

//{

// unsigned int? len;

// len = gstrlen(s);

// return min(len, n);

//}

如果不屏蔽。。。。

【3】Makefile中

加上:

CC=nios2-linux-uclibc-gcc -elf2flt

AR = nios2-linux-uclibc-ar

LD = nios2-linux-uclibc-ld

OBJCOPY = nios2-linux-uclibc-objcopy

加上:

romfs:

$(ROMFSINST) /bin/$(NAME)

修改最后一行:

$(CC) -c -o $@ $(DEBUG) $(CFLAGS) $(IFLAGS) $<

下面的

CFLAGS = -DWEBS -DUEMF -DOS="LINUX" -DLINUX -Dfork=vfork -D__uClinux__ $(UMSW) $(DASW) $(SSLSW) $(IFMODSW)

LDFLAGS = $(SSLLI $(IFMODLI -elf2flt="-s 16000" -Wl,-v -Wl,-d

$(CFLAGS) $(IFLAGS) \中去掉$(IFLAGS)

修改不修改并沒有影響。

【4】

如果自己在../romf/home下創建文件夾web,而不是配置指定,就會出現問題:

jffs2 compression type not available

因為這個文件根本不識別。

【5】如果在沒有修改前就在Linux文件夾下make過,然后接著修改,改完后再次make時,則會出現以下問題:

main.o: Relocations in generic ELF (EM: 3)

main.o: could not read symbols: File in wrong format

這是因為編譯器不一致造成的,這樣問題只要make clean后,再次make即可

總結

以上是生活随笔為你收集整理的goahead php,Goahead移植教程 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。