安防监控项目---CGI接口的移植和使用

文章目录

  • 前言
  • 一、CGI
  • 二、CGI的具体移植步骤
    • 2.1 cgi源码下载
    • 2.2 搭建交叉编译环境
    • 2.3 注意事项
  • 三、测试结果
  • 总结


前言

书接上期,上期与大家分享的是boa服务器的移植,那么几天要和大家介绍的呢是一款接口,哈哈哈,用起来也是有点难度的,但是,大家要知道,有些东西虽然很高深,但是只要我们会使用能够使用最基本的就可以;这也间接证明了我们嵌入式设计的一个特点,那就是够用就行,但对于学习者来说,肯定是懂得越多越好,那我认为呢,在设计时,当黔驴技穷时,做到够用就行是OK的,但是如果说作为学习者而言,肯定是不够滴!所以学无止境呀,哈哈哈哈~,下面看下CGI!


一、CGI

首先呢CGIC是一个库,也可以称之为一个interface,这里列举一些CGI的基本功能:

	1   分析数据,并自动校正一些有缺陷的浏览器发来的数据;
	2   透明接收用GET或 POST方法发来的Form数据;
	3   能接受上传文件;
	4   能够设置和接收cookies;
	5   用一致的方式处理From元素里的回车;
	6   提供字符串,整数,浮点数,单选或多选功能来接收数据;
	7   提供数字字段的边界检查;
	8   能够将CGI环境变量转化成C中的非空字符串;
	9   提供CGI程序的调试手段,能够回放CGI程序执行时的CGI状态;

总之,CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统。

二、CGI的具体移植步骤

需要强调的是在上期分享中boa服务器是现在Ubuntu环境下进行安装测试(boa的格式为X86格式),那么我们这次移植cgi到A9平台上;

2.1 cgi源码下载

从CGIC的主站点http://www.boutell.com/cgic/下载源码,将其解压并进入源码目录;
本项目使用的是cgi的2.05版本;
下载后拷贝到Ubuntu环境下直接进行解压即可;
解压后如下:
在这里插入图片描述

2.2 搭建交叉编译环境

这里需要注意的是CC=arm-linux-gcc,生成的文件就是可以在ARM平台上运行的文件;

修改Makefile文件,找到CC=gcc,将其改成CC=arm-linux-gcc,
找到AR=ar,将其改成AR=arm-linux-ar,
找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。
找到gcc cgictest.o -o cgictest.cgi ${LIBS},将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},
找到gcc capture.o -o capture ${LIBS},将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},
保存退出。
	 
修改后的Makefile
	CFLAGS=-g -Wall
	#CROSS_COMPILE=
	CROSS_COMPILE=arm-linux-
	CC=$(CROSS_COMPILE)gcc
	AR=$(CROSS_COMPILE)ar
	RANLIB=$(CROSS_COMPILE)ranlib
	LIBS=-L./ -lcgic
	all: libcgic.a cgictest.cgi capture
	install: libcgic.a    //可以执行 make install 命令  目标
	cp libcgic.a /usr/local/lib
	cp cgic.h /usr/local/include
		@echo libcgic.a is in /usr/local/lib. cgic.h is in /usr/local/include.
	libcgic.a: cgic.o cgic.h  //libcgic.a 依赖于 cgic.c 和 cgic.h  
	rm -f libcgic.a
		$(AR) rc libcgic.a cgic.o  //一个归档命令  ar rc libcgic.a  
		$(RANLIB) libcgic.a  //“ranlib”来对静态库的符号索引表进行更新。 
	#mingw32 and cygwin users: replace .cgi with .exe
	cgictest.cgi: cgictest.o libcgic.a
		$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}
		#gcc cgictest.o -o cgictest.cgi ${LIBS}
	capture: capture.o libcgic.a
		$(CC) $(CFLAGS) capture.o -o capture ${LIBS}
		#gcc capture.o -o capture ${LIBS}
	clean:
		rm -f *.o *.a cgictest.cgi capture
	
	根据Makefile编译可以看出,有两个拷贝的过程:
cp       libcgic.a    /usr/local/lib  
cp       cgic.h        /usr/local/include
		两个命令的学习:
	ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,
	里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。
	原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。 

2.3 注意事项

修改完成Makefile后进行make,生成ARM版本的测试用例;
在这里插入图片描述

在这里插入图片描述
将capture文件拷贝到A9平台的BAO服务器下,放在cgi-bin文件夹下;

三、测试结果

安防监控项目---CGI接口的移植和使用_第1张图片


总结

本期和大家分享的是CGI的移植,其实也是比较简单的,但是真的想要编写CGI程序,大家还是需要花费一定的心思的。虽然目前移植CGI的工作已经完成了,但是还是需要后期花费一定的精力去学习这部分的知识,因为CGI是运行在BOA服务器之上的真正的沟通html和A9主进线程通信的一个桥梁;如果大家的项目小组里有这样的人才,那么大家可以先致力于别的重点模块的理解和开发,最后再来了解这一部分,先用起来,慢慢学习理解!!!
最后,各位小伙伴们如果有收获,可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

你可能感兴趣的:(安防监控项目,单片机,嵌入式硬件,arm开发,linux,安防监控)