用goahead-3.1.2.tar.gz源码时,浏览器运行cgi程序时出现segment fault,捣鼓了两晚上没搞定,换了goahead-3.1.3竟然没问题了。
以后遇到实在搞不定的,可以换下新版本试试,说不定就可以了。下边是自己的移植步骤。
(1)开发版: TQ2440 ,
(2)编译linux主机: 虚拟机上的RHEL 5.4
(3)交叉 工具链: 是前段时间自己编译出来的arm-sdutyl-linux-gnueabi-gcc
(4)环境变量:
[yanglu@localhost build_boa]$ cat ~/bashEnv
#!/bin/sh
export PRJROOT=/home/yanglu/arm
export TARGET=arm-sdutyl-linux-gnueabi
export PREFIX=${PRJROOT}/tools
export TARGET_PREFIX=${PREFIX}/${TARGET}
export PATH=$PREFIX/bin:$PATH
编译goahead
可以到https://github.com/embedthis/goahead/releases上下载goahead-3.1.3.tar.gz
一、goahead 服务器编译
1、[yanglu@localhost ]$ tar zxvf goahead-3.1.3.tar.gz
[yanglu@localhost ]$ cd goahead-3.1.3
2、[yanglu@localhost goahead-3.1.3]$ make CC=arm-sdutyl-linux-gnueabi-gcc ARCH=arm
在linux-arm-default/bin中可以找到goahead和相关库文件。
二、goahead 服务器配置
1、将inux-arm-default/bin下的libest.so libgo.so 库文件拷贝到开发板/lib下
2、将inux-arm-default/bin下的goahead执行文件 拷贝到开发板自己想放的目录, 如/var/goahead/
3、将goahead-3.1.3/src下的route.txt 和 auth.txt 拷贝到和goahead文件同目录下。
为了执行cgi程序修改route.txt
route uri=/cgi-bin dir=/var/goahead/www/ handler=cgi
三、goahead 运行
[root@EmbedSky goahead]# ./goahead -v /var/goahead/www/ 192.168.1.6:8081 &
注:-v /var/goahead/www/ 目录指,goahead 服务器的根目录。
四、测试:http://192.168.1.6:8081/cgi-bin/hello.cgi
http://192.168.1.6:8081/
五、遇到的问题
1:
goahead: 0: Can't get host address for host dvr: errno 11
goahead: 0: Can't initialize server. Exiting.
解决:
方法(1) 修改开发板的/etc/hosts
vi /etc/hosts
192.168.1.6 EmbedSky 添加一句
方法(2) (自己没有试)
修改: goahead-3.1.3\src\http.c文件的setLocalHost函数
#if 0
if ((hp = gethostbyname(host)) == NULL) { //MHB 2013-10-22
error("Can't get host address for host %s: errno %d", host, errno);
return -1;
}
memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length);
ipaddr = inet_ntoa(intaddr);
#else //MHB 2013-10-22 换种方式获取ip地址 (ipv4)
int sockfd;
struct sockaddr_in sin;
struct ifreq ifr;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1) {
return -1;
}
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); //网卡多的得修改下
ifr.ifr_name[IFNAMSIZ - 1] = 0;
if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) {
return -1;
}
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
ipaddr=inet_ntoa(sin.sin_addr);
#endif
websSetIpAddr(ipaddr);
websSetHost(ipaddr);
2:
goahead: 0: Can't open config file route.txt
goahead: 0: Can't initialize server. Exiting.
解决方法:
拷贝goahead-3.1.3\src\route.txt文件到goahead同目录下
3、在用goahead-3.1.2.tar.gz源码时,浏览器运行cgi程序时出现segment fault,不知道什么原因。
用了goahead-3.1.3.tar.gz 就没出现。
附:
1、相关文件目录
/var/goahead/goahead
/var/goahead/auth.txt
/var/goahead/route.txt
/var/goahead/www/
/var/goahead/www/index.html
/var/goahead/www/cgi-bin
/var/goahead/www/cgi-bin/hello.cgi