Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101939
  • 博文数量: 31
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-18 11:29
文章分类

全部博文(31)

文章存档

2011年(1)

2010年(1)

2009年(2)

2008年(27)

我的朋友

分类: LINUX

2008-05-08 09:45:12

Goahead是一款适合嵌入式的web Server, 支持asp,cgi,embedded JavaScrip等脚本语言基本上在windows下或者在redhat9下面只要make一下就能运行了.
在uclinux下面要稍微改动一下代码.
源码改动的地方基本上是
1.把fork改为vfork,
2.把gethostbyname函数替换掉.
 
改动Goahead自带的makefile使其采用arm-elf-gcc编译并转换应用程序elf格式为flt
就差不多了.
 
下面是我的移植过程中记录的详细步骤:
 
首先到 下Goahead源码包,
看一下web目录下的usr/doc等说明文件。
 
修改Goahead/LINUX/makefile文件
==================================================================
1. makefile 中 加了一个 宏:


  CFLAGS = -DWEBS -DUEMF -DOS="LINUX" -DLINUX $(UMSW) $(DASW) $(SSLSW)
$(IFMODSW) -D__NO_PACK
  -D__NO_PACK 是我自己加的。
  __NO_PACK 屏蔽Goahead编译是产生的#program 警告,不加这个宏也没关系。
 
2. 修改Goahead/LINUX/Makefile
  LDFLAGS += $(SSLLIB) $(IFMODLIB) -Wl,-elf2flt
  -Wl,-elf2flt 与“+” 是自己加的。
 
  CFLAGS 添加 -Wall -O2选项。(优化代码size与速度)
  如下:
  CFLAGS += -Wall -O2 -DWEBS -DUEMF -DOS="LINUX" -DLINUX $(UMSW) $(DASW)
$(SSLSW) $(IFMODSW) -D__NO_PACK
 
 
3. 修改ucLinux下makefile文件,使其支持 add costume vender/user application.
  可以略过这一步,直接在Goahead,LINUX目录下make clean;make 然后把webs.exe文件
copy到 romfs目录下。
  (在romfs下建立home\web\ 目录)
 
  详见 12.编译过程。
 


  在uclinux下make clean操作会清空romfs目录,所以最好在Goahead的makefile里
  加入如下几段(在make romfs时会自动拷贝到/home/web/目录下。)
  romfs:
  $(ROMFSINST) /home/web/$(NAME)
 
  同时在uclinux/venders/samsung/44b0/makefile里
  ROMFS_DIRS = bin dev etc home lib mnt proc usr var home/httpd home/web
  home/httpd home/web 是自己添加的。
 
4.
在 Goahead/LINUX/makefile 开头添加
#####################################################################
CROSS_COMPILE = arm-elf-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump


####################################################################
 
同时把 DEBUG = -g -Wall 改为
DEBUG = -Wall
很明显,这里是修改为gcc为arm-elf-gcc编译,同时去掉debug信息。
或者你可以直接把几个 $(cc) 直接修改为 arm-elf-gcc .
 
 
修改Goahead源码部分:
==================================================================
5. uclinux 采用 uClib-c (我得lib是用uClib-c的,用uClibc没有试过)
 
6. 修改所有arm-elf-gcc 不认识的宏。把这些宏改写成一行就可以了。一般就是因为"\"
等.
 
7. fork 改为 vfork (main.c (LINUX) )
 
8. webs.c Line 1434
fmtAlloc(&msgbuf, WEBS_MAX_URL + 80,
  T("\r
\
  T("This document has moved to a new location.\r
\
  T("Please update your documents to reflect the new location.\r
\


  T(" \r
"), url);
  arm-elf-gcc似乎不认识 “\”这个符合,只能把fmtAlloc语句写成一行。
 
9. uemf.h 文件 LINE 242
去除 timeval的定义,在uclinux下重复定义了。
#if (defined (LINUX) && !defined (_STRUCT_TIMEVAL))
struct timeval
{
  time_t tv_sec; /* Seconds. */
  time_t tv_usec; /* Microseconds. */
};
#define _STRUCT_TIMEVAL 1
#endif
 
10. main.c (LINUX) 中
websGetCgiCommName(..)函数中
把pname1 = tempnam(NULL, T("cgi")); 改为
pname1 = (char_t*)mkstemp( T("cgi")); (估计不改tempnam 也无什么大碍)
 
 
11.
  main.c(linux) 文件


  initwebs(...) 函数中:
  /*
  if ((hp = gethostbyname(host)) == NULL) {
  error(E_L, E_LOG, T("Can't get 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.0.128"); // 44B0的网卡IP
 
  gethostbyname函数在此处无效,我屏蔽了这段,不得已只能直接写入IP地址给
intaddr了。
 
  在不能调试的情况下,gethostbyname这一段实在是花了我大半的时间。
  最要命的是,我的44b0板子里的tftp 死活不工作,没办法只好一边一边的编译内核,
下载到板子上运行查看串口的数据。
  不然可以用tftp把webs 通过网络下载到板子运行,就不用编译内核了。
 
12. 编译过程:
 


  >cd uclinux目录下
  >make config;make clean;
  >make lib_only;make user_only
  >make romfs
  >cd 进入Goahead/LINUX目录
  >make clean
  >make
  >cp -i webs.exe /romfs/home/web/webs.exe ( webs.exe程序编译后大概 80k左
右吧。)
  >cd 到uclinux目录下
  >make image
  >make
 
 
 
13. 要关闭IE的代理。
  先ping一下 目标板,看网络通不通,或者在目标板子上ping一下pc机。
  IP地址就是 第11步中 指定的IP 。
  然后
  > cd /home/web/
  > ./webs
  启动 Goahead。 网页可以放在与webs.exe 同一级的web目录下。 web目录是Goahead源


  在Goahead运行中,有网页请求的时候,我的超级终端中会出现如下东东:
  “> skput:over: 0c071aa4:272 put:272 dev:eth0<2>kernel BUG at skbuff.c:92!”
  不知道什么意思。
 
14. Goahead/web 下有详细的文档说明。关于 configure 跟install的一定要看。
 
--badegg 学习笔记

阅读(916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~