环境: PC机操作系统RedHat Linux 9.0 ARM-LINUX开发环境 webs218.tar.gz压缩包 armv4l-unkown-linux-gcc交叉编译器 UP-NETARM2410-S嵌入式实验平台 PC机Pentium500以上,硬盘40G以上,内存128M以上
1. 新建一个目录,将这个实验所需要用到的压缩包复制进去并解压。 从网站下载压缩包webs218.tar.gz,并且解压。 tar xvzf webs218.tar.gz 解压缩后的文件夹是 ws031202,之后进入该文件夹下的LINUX。 #cd ws031202/LINUX
2. 执行第一步:修改LINUX目录下的Makefile 文件 因为GoAhead默认是以x86体系结构来构造的,因此这里需要把Makefile文件中的编译器更改为能够在ARM体系结构下运行的交叉编译器。在Makefile文件开头添加如下两个变量: CC=armv4l-unknown-linux-gcc
AR=armv4l-unknown-linux-ar
之后将该文件中所有的cc都更改为$(CC)即可,在最后面一行。这样在Makefile文件中使用到的编译器就是开发板所使用的交叉编译器了。
3.执行第二步:
修改LINUX目录下的main.c
文件
由于该开发板本身没有hostname,例如在开发板下输入如下命令:
hostname
可以看到none,说明开发板不存在hostname。
因此在main.c下的initWebs( )函数中使用到的gethostbyname
函数无用。所以把如下内容屏蔽,并在之后直接将IP地址写入intaddr。
注释内容:
/*
if (gethostname(host, sizeof(host)) < 0) {
error(E_L, E_LOG, T("Can't get hostname"));
return -1;
}
if ((hp = gethostbyname(host)) == NULL) {
error(E_L, E_LOG, T("Can't get host address"));
return -1;
}
memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],
(size_t) hp->h_length);
*/
添加内容:
intaddr.s_addr=inet_addr("192.168.0.115");
注:括号内的内容为开发板的IP地址,此处实验台的IP地址为192.168.0.115。
4.编译
完成如上操作之后,准备在LINUX目录下进行编译:
make clean
make
之后可以看到如下内容:
……
-DWEBS -DUEMF -DOS="LINUX" -DLINUX -DUSER_MANAGEMENT_SUPPORT -DDIGEST_ACCESS_SUPPORT-I..\
main.o libwebs.a
main.o(.text+0x539): In function `websGetCgiCommName':
/arm2410s/ws031202/LINUX/main.c:325: the use of `tempnam' is dangerous, better use `mkstemp'
使用ls命令就可以看到生成的可执行程序webs。
5.运行并测试
使用minicom进入开发板,并且将宿主机的相应目录mount到开发板的
host目录下:
mount–t nfs 192.168.0.121:/arm2410s /host
之后进入LINUX目录,并且运行webs程序:
cd /host/ws031202/LINUX
./webs &
注:1、./webs& 中的&参数表示该程序在后台持续执行。
之后进入宿主机打开浏览器,并且在地址栏输入192.168.0.115
可以看到home.asp页面
6 测试CGI
好,现在让我们用 C 语言写一个神圣的 CGI 程序 -- Hello,World!
vi hello.c # 编辑源文件
// Begin
#include main() {
printf("Content-type:text/html\n\n");
printf("Hello,World!");
}
// End
armv4l-unknown-linux-gcc -o hello hello.c # 编译
将该程序放在 Web 服务器的 cgi-bin 目录下,然后通过以下方式访问:
这将在浏览器里打印出 Hello,World!
这就算得上是一个 CGI 程序了,是不是很简单?^_^ 第一句 printf() 是打印头信息,让 Web 浏览器知道以下打印的数据是什么类型的数据,本例子中指定了 text/html 类型,即 html 文档,所以下面的那句 printf() 打印的内容就会像我们写网页内容一样在浏览器上显示出来。
7移植
将webs复制到新建文件夹goahead中的bin中(如没有bin可以建立文件夹);
把ws031202下的web文件夹拷贝到goahead文件夹下
将goahead下载到目标板;
进入执行bin下的webs
./webs&
还不懂留意