arm linux imx6u移植goahead web服务器

arm linux imx6u移植goahead web服务器

源码下载

1、源码版本goahead2.5
2、 百度云下载链接https://pan.baidu.com/s/1kklYCSVTwly5Me1d6Hx4rQ 提取码:678g

源码结构

1、|各种OS移植子目录,分别有:CE、ECOS、LINUX、LYNX、MACOSX、NW、QNX4、VXWORKS、WIN
2、| utils:当前只有webcomp.c,即网页编译器
3、| www:存放web网页
4、| wwwdemo:goAhead带的demo网页,里面包含了goAhead的一些文档
5、| goAhead服务器源程序文件(C程序文件)

源码移植

1、修改Makefile文件

CROSS_COMPILE   =aarch64-linux-gnu-
AS     = $(CROSS_COMPILE)as
LD     = $(CROSS_COMPILE)ld
CC     = $(CROSS_COMPILE)gcc
AR     = $(CROSS_COMPILE)ar
STRIP  = $(CROSS_COMPILE)strip

修改最后一行:

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

早期版本如2.18的源码中,最后一行为:

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

修改时不仔细可能会导致编译时前后使用的编译器不一致而出错。
2、修改LINUX目录下的main.c:
(1)、修改initwebs(…) 函数中代码使设备获取网卡的IPaddress:
注释以下代码:

/*
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");
/*

修改为如下代码:

struct  ifreq ifr;
int sockfd = -1;

sockfd= socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0 )
{
    printf("socket");
    return -1;
}
strcpy(ifr.ifr_name,ETHERNET_WIRE);
if(ioctl(sockfd, SIOCGIFADDR, &ifr) < 0 )
{
     printf("ioctl:gethost ip error");
     return-1;
}
printf("ifr_name:%s\n", ifr.ifr_name);
//printf("localhosp ip: %s\n", inet_ntoa( ((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr ) );
intaddr = ((struct sockaddr_in *)&(ifr.ifr_addr))->sin_addr;
fprintf(stderr,"host addr:%s\n", inet_ntoa( intaddr ));

也可以改为固定IP地址

intaddr.s_addr = inet_addr(T("192.168.3.81"));		

注:

gethostbyname函数在此处无效,如果不修改则会出现的问题是:板子启动完成后,可执行文件webs刚打开,ps下就没有webs的pid,这是因为IP不生效,webs出错所以打不开。另外,我的设备要求IP是DHCP模式,不能给其固定IP,所以在代码中修改为从网卡处获取设备的当前IP地址,注意修改后的代码要包含以下头文件及宏,否则编译报错。
#include <sys/ioctl.h>
#include <net/if.h>
#define ETHERNET_WIRE “eth0”
#define ETHERNET_WIFI “ra0”

(2)、修改服务器根目录:
注释掉以下代码:

/*
getcwd(dir,sizeof(dir));
if((cp = strrchr(dir, '/')))
{
	*cp = '\0';
}
sprintf(webdir,"%s/%s", dir, rootWeb);
*/

修改为:

sprintf(webdir,"%s", rootWeb);
fprintf(stderr,"web dir: %s\n", webdir);

staticchar_t     *rootWeb = T("web");

改成

static char_t  *rootWeb = T("/mnt/web");

注:

此处根据实际情况修改为自己的放置网页代码的目录即可。

注释掉默认页面设置:

//websSetDefaultPage(T("default.asp"));

(3)、修改服务器主页:

修改websHomePageHandler函数中的homepage设置:

//websRedirect(wp, “home.asp”);
websRedirect(wp, “index.htm”);

注:

此处把源码中的主页替换为自己的主页即可。

(4)、注意:

如果在没有修改前就在LINUX文件夹下make过,然后接着修改,改完后再次make时,则会出现以下问题:
main.o: Relocations in generic ELF (EM: 3)
main.o: could not read symbols: File inwrong format
这是因为编译器不一致造成的,这样问题只要make clean后,再次make即可。

(5)、移植到arm环境中
将 linux下的webs拷贝到arm板子中,执行 ./webs &就可以

(6)、CGI执行
GoAhead支持标准的CGI执行,代码中已经设置关联了CGI的放置目录,如代码:websUrlHandlerDefine(T("/cgi-bin"),NULL, 0, websCgiHandler, 0);
注意此处设置的cgi-bin的根目录即是web文件的目录,所以只需要把CGI可执行文件放到xxx/web/cgi-bin/目录下即可被GoAhead调用了。注意CGI代码文件也需要使用上面相同的编译器来编译。

(7)、目录结构如图所示
!](https://img-blog.csdnimg.cn/20210404142526535.png)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值