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

news2025/1/13 13:18:41

文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue使用百度富文本

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下,方便到时候打包进去,以免…

骨传导耳机怎么佩戴,骨传导蓝牙耳机什么牌子好用

市面上的传统耳机一直以来都存在一些问题,比如长时间佩戴会导致耳朵不适,或者声音过大可能会伤害到耳膜。但是,现在有一种独特的耳机正在迅速走红,它被称为骨传导耳机,而骨传导耳机是怎么佩戴的呢,它在佩戴…

Ionic 7 版本发布 - 免费开源、超受欢迎的移动应用开发 UI 工具包,主题优雅且完美支持 Vue.js

Ionic 是一款优秀的移动 UI 框架,迭代也很快,现在也支持了 Vue,是时候向大家推荐用来开发 APP 了。 Ionic 全称是 Ionic Framework,是一个功能强大的开源 UI 工具库,用来帮助前端开发者构建跨平台的移动应用。 Ionic …

干洗店小程序上门洗鞋店管理软件功能介绍;

干洗店小程序上门洗鞋店管理软件功能介绍; 营销工具-洗鞋店管理软件多渠道玩法,拓客留客 支付-会员管理系统多种支付方式,灵活经营 ​ ​提供洗鞋店管理软件服务,实现会员精细化运营 会员档案-洗鞋店管理软件记录会员的全方位信…

Pytorch 猫狗识别案例

猫狗识别数据集https://download.csdn.net/download/Victor_Li_/88483483?spm=1001.2014.3001.5501 训练集图片路径 测试集图片路径 训练代码如下 import torch import torchvision import matplotlib.pyplot as plt import torchvision.models as models import torch.nn a…

IntelliJ IDEA 安装mybaits当前运行sql日志插件在线与离线安装方法

先安装好idear 去网上找找这个安装包下载下来,注意版本要完全一致! 比如: https://www.onlinedown.net/soft/1233409.htm手动安装离线插件方法举例 提前下载好插件的安装包 可以去网上下载这个安装包 搜索离线安装包的资源,包…

【文末送书】AI时代数据的重要性

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

亚马逊美国加拿大电动移动设备合规标准是什么?如何办理?

亚马逊美国站电动移动设备合规标准是什么? 加拿大站电动移动设备合规标准 办理流程: 1.填写申请表 2.提供产品的资料(说明书,电路原理图,如是多个型号的,提供型号差异列表) 3.寄样 4.测试 …

电商生态圈:跨境电商的商业合作新模式

随着数字化浪潮的不断崛起,电子商务行业正经历着前所未有的革命性变革。在这个变革的过程中,跨境电商已经成为全球贸易的推动力量。然而,跨境电商并非孤立存在,而是在日益扩大的电商生态圈内蓬勃发展。本文将探讨跨境电商的商业合…

AT8548 双通道有刷直流电机驱动芯片的作用

AT8548为玩具、打印机和其它机电应用提供一种双通道电机驱动方案。亿胜盈科AT8548内置两路H桥驱动,可以驱动两个直流有刷电机,或者通过输出并接驱动一个直流有刷电机,或者一个双J步进电机,或者螺线管及其它感性负载。 亿胜盈科AT8…

计算机考研 | 2011年 | 计算机组成原理真题

文章目录 【计算机组成原理2011年真题43题-11分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2011年真题44题-12分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2011年真题43题-11分】 (1…

【23真题】大神凭这套拿452分!看看你能拿多少?

今天分享的是23年福州大学866的信号与系统试题及解析。23年福州大学新一代电子信息的最高分是452分!但是我看不到单科分数。按照75,75,150,150。也就是只有450,说明这个同学,专业课和数学几乎拿满&#xff…

【设计模式】第17节:行为型模式之“解释器模式”

一、简介 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 二、适用场景 领域特定语言复杂输入解释可扩展的语言结构 三、UML类图 四、案例 对输入的特定格式的打印语句进行解析并执行。 packag…

3D模型格式转换工具HOOPS Exchange:更快、更准确的CAD数据转换工具

HOOPS Exchange是一个开发平台,可以帮助快速开发高性能,跨平台的工程应用程序,是一款更快、更准确的CAD数据转换工具包,是3D数据格式转换首选解决方案。 ▷ 工业级3D数据格式转换 通过单个界面即可读取和写入30多种CAD文件格式&…

虚拟人裸眼3D动画宣传片:品牌营销的流量密码

在数字化转型的大背景下,行业竞争越来越激烈,品牌迫切需要一种新颖的、差异化的宣传片方式提升流量。而依靠户外大屏播放的虚拟人裸眼3D动画宣传片,具有强地标性和网红属性,成为推动文旅、城市营销、品牌营销的重要渠道。 虚拟人裸…

PWA 是属于谷歌的“小程序”!有哪些核心技术

在国内由于小程序的风生水起,PWA 应用在国内的状况一直都不是很好,PWA 和小程序有很多的相似性,但是 PWA 是由谷歌发起的技术,小程序是微信发起的技术,所以小程序在国内得到了大力的扶持,很快就在国内技术界…

Day 3 登录页以及路由 (一)

登录页以及路由 需求 作为一个后台管理系统,登录页是必不可少的。登录页的需求也很简单,输入账号密码,有登录、重置按钮即可。主要界面类似这种: 登录提交到后台,校验成功后,跳转到系统主页。 另外一个需…

Spring MVC的常用注解(接收请求数据篇)

目录 RequestMapping 例子: RequestMapping 支持什么类型的请求 使 RequestMapping 只支持特定的类型 RestController 通过 HTTP 请求传递参数给后端 1.传递单个参数 注意使⽤基本类型来接收参数的情况 2.传递多个参数 3.传递对象 4.RequestParam 后端参数…

分布式:一文吃透分布式锁,Redis/Zookeeper/MySQL实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

Threejs 三维开发系列之Threejs基础概念

Threejs简介(是什么)Threejs是一个web端的3D图形引擎,能利用js创建和控制各种三维模型和场景(能用来做什么)可以用js开发各种复杂的三维场景、空间模型动画展示、各种三维小游戏(比如微信跳一跳就是Threejs开发)。(优势) 传统三维开发一般是c openGl,开发…