移植goahead 到开发板笔记

用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

你可能感兴趣的:(linux)