ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
择要:在过细先容一种嵌入式Web办事器BOA的实现与配置要领的底子上,以一个Web在线长途监控GPIO(通用输入/输出)的步调为实例,先容嵌入式Linux体系下CPU步调筹划技能。
关键词:嵌入式体系Linux BOA CGI GPIO
1 概述
随着互联网应用的广泛,越来越多的信息化产品须要接入互联网通过Web页面举行长途访问。嵌入式Web体系提供了一种经济、实用的互联网嵌入式接入方案。这里连合一种嵌入式Web Server BOA来先容嵌入式Linux体系下的CGI步调筹划技能。
2 Web Server BOA的实现与配置
2.1 uClinux下,紧张有三个Web Server:HTTPD、THTTPD和BOA。HTTPD是最大抵的一个Web Server,它的结果最弱,不支持认证,不支持CGI。THTTPD和BOA都支持认证、CGI等,结果都比较全。BOA是一个单任务的小型HTTP办事器,源代码开放、性能精良,分外得当应用在嵌入式体系中。如今的uClinux的代码中已经包括BOA的源代码。在uClinux下实现BOA,只须要对BOA做一些配置和修改。以下是配置的进程。
(1)编译BOA到内核
起首,须要把BOA编译到内核,即实行make menuconfig,在应用步调菜单中network application项下面选择boa。该利用须要重新编译内核。
(2)方法配置文件boa.conf
在Linux利用体系下,应用步调的配置都因此配置文件的情势提供的,一样通常都是放在目标板/etc/目次下大概/etc/config目次下。但boa的配置文件boa.cont一样通常都旋转在目标板/home/httpd/目次下。
比喻,一个典范的boa.conf文件格局如下:
ServerName Samsung-ARM
DocumentRoot/home/httpd
ScriptAlias/cgi-bin/home/httpd/cgi-bin/
ScriptAlias/index.html/home/httpd/index.html
它指定了HTML页面必须放到/home/httpd目次下,cgi外部扩展步调必须放到/home/httpd/cgi-bin目次下。
(3)编译烧写内核
重新编译内核后,通过烧写东西烧写内核,就可以在PC上通过IE欣赏器访问开辟板上的Web Server。比喻,输入开辟板的IP地点http://192.168.0.101,即可访问到本身做的网页index.html了。并且,通过编写CGI外部扩展步调,可以实现动态Web技能,下面将过细先容。
2.2 具有MMU平台的Linux下B0A的实现与配置
敷衍有MMU(内存办理单位)的平台,如armlinux和ppclinux,可以到网上下载一个主流版本的boa发行包。由于是运行在目标体系,以是要用交错编译东西编译,即须要修改boa/src/Makefile内里的编译器。比喻:
CC=/LinuxPPC/CDK/bin/powerpc-linux-gcc
CPP=/LinuxPPC/CDK/bin/powerpc-linux-g++
然后直接在boa/src目次下实行make,即可天生BOA可实行文件;将其编译入内核,并烧写到存储配置,就可以实现访问BOA办事器。
3 CGI步调筹划技能
CGI(Common Gateway Interface)是外部应用扩展应用步调与WWW办事器交互的一个标准接口。根据CGI标准编写的外部扩展应用步调可以处理惩罚处罚客户端欣赏器输入的数据,从而完成客户端与办事器的交互利用。而CGI典范就定义了Web办事器怎样向扩展应用步调发送消息,在收到扩展应用步调的信息后又怎样举行处理惩罚处罚等内容。通过CGI可以提供很多静态的HTML网页无法实现的结果,比如搜刮引擎、基于Web的数据库访问等等。
3.1 变乱原理
(1)WWW和CGI的变乱原理
HTTP协议是WWW的底子,它基于客户/办事器模型,一个办事器可以为散布在网络中处的客户提供办事;它是创建在TCP/IP协议之上的“无连接”协议,每次连接只处理惩罚处罚一个恳求。在办事器上,运行产着一个保卫进程对端口举行监听,等待来自客户的恳求。当一个恳求到来时,将创建一个子进程为用户的连接办事。根据恳求的差别,办事器返回HTML文件大概通过CGI调用外部应用步调,返回处理惩罚处罚结果。办事器通过CGI与外部步调和脚本之间举行交互,根据客户端在举行恳求时所采取的要领,办事器会网络客户所提供的信息,并将该部分信息发送给指定的CGI扩展步调。CGI扩展步调举行信息处理惩罚处罚并将结果返回办事器,然后办事器对信息举行阐发,并将结果发送回客户端。
外部CGI步调与WWW办事器举行通讯、转达有关参数和处理惩罚处罚结果是通过环境变量、下令行参数和标准输入来举行的。办事器提供了客户端(欣赏器)与CGI扩展步调之间的信息互换的通道。CGI的标准输入是办事器的标准输出,而CGI的标准输出是办事器的标准输入。客户的恳求通过办事器的标准输出发送给CGI的标准输入,CGI对信息举行处理惩罚处罚后,将结果发送到它的标准输入,然后由办事器将处理惩罚处罚结果发送给客户端。
(2)URL编码
客户端欣赏器向办事器发送数据采取编码的情势举行。该编码便是CRL编码。编码的紧张变乱是表单域的名字和值的转义,细致的做法为:每一对域和值里的空格都市被调换为一个加号(+)字符,不是字母或数字的字符将被调换为它们的十六进制数字情势,格局为%HH。HH是该字符的ASCII十六进制值。<BR>标记将被调换为“%0D%0A”。
信息是按它们在表单里出现的序次分列的。数据域的名字和数据域的值通过等号(=)字符连在一起。各对名/值再通过“&”字符连接在一起。颠末这些编码处理惩罚处罚之后,表单信号就整个成为一个连续的字符流,内里包括着将被送往办事器的全部信息。
由于表单输入信息都是颠末编码后转达给脚本步调的,以是CGI扩展步调在利用这些参数之前必须对它们举行解码。
3.2 CGI外部扩展步调方法
办事器步调可以通过三种途径汲取信息:环境变量、下令行和标准输入。细致利用哪一种要领要由<FORM>标记的METHOD属性来决定。
在“METHOD=GET”时,向CGI步调转达表单编码信息的正常做法是通过下令来举行的。大多数表单编码信息都是通过QUERY_STRING的环境变量来转达的。要是“METHOD=POST”,表单信息将通过标准输入来读取。另有一种倒霉用表单就可以向CGI发送信息的要领,那便是把信息直接追回在URL地点反面,信息和URL之间用问号(?)来退出。
下面连合Web长途监控ARM芯片的GPIO(通用输入/输出)的应用实例过细先容。
(1)GET要领
GET要领是对数据的一个恳求,被用于得到静态文档。当利用GET要领时,CGI步调将会从环境变量QUERY_STRING获取数据。为了处理惩罚处罚客户真个恳求,CGI必须对QUERY_STRING中的字符串举行阐发。当须要从办事器获取数据并且稳固革办事器上的数据时,应该选用GET要领;但是要是恳求中包括的字符串超过跨过了肯定长度,一样通常是1024字节,那么就只能选用POST要领。GET要领通过附加在URL反面的参数发送恳求信息。这些参数将被放在环境变量QUERY_STRING中传给CGI步调。GET要领的表单格局和CGI解码步调可以参考POST要领的实现。
(2)POST要领
当欣赏器将数据从一个填写的表单传给办事器时一样通常采取POST要领,并且在发送的数据超过跨过1024字节时也必须采取POST要领。当利用POST要领时,Web办事器向CGI步调的标准输入STDIN发送数据。发送的数据长度存在环境变量CONTENT_LENGTH中,并且,POST要领的数据格局为:
variable1=value1&variable2=value2&etc
CGI步调必须查抄REQUEST_METHOD环境变量以确定是否采取了POST要领,并决定是否要读取STDIN。POST要领在HTML文档中定义的表单如下:
<FORM METHOD=POST ACTION="/cgi-bin/cgi_gpio.cgi">
<INPUT TYPE="RADIO"NAME=rb VALUE="0">Operate P0<BR>
<INPUT TYPE="RADIO"NAME=rb VALUE="1">Operate P1<BR>
<INPUT TYPE="RADIO"NAME=rb VALUE="2">Operate P2<BR>
<INPUT NAME="ok"TYPE=submit VALUE="OK"><INPUT>
NAME="cancel"TYPE=reset VALUE="RESET"></FORM>
它调用的办事器脚本步调是/cgi/bin/cgi_gpio.cgi。CGI扩展步调中FORM表单的解码可参考如下步调:
/*function getPOSTvars*/
char **getPOSTvars(){
int i;
int content_length;
char **postvars;
char *postinput;
char **pairlist;
int paircount=0;
chr *nvpair;
char *eqpos;
postinput=getenv("CONTENT_LENGTH");//获取发送给步调数据的字节数
if(!postinput)
exit();
if(!content_length=atoi(postinput))) //获取信息长度
exit(1);
if(!(postinput=(char*)malloc(content_length+1)))
exit(1);
if(!fread(postinput,content_length,1,stadin))
exit(1);
postinput[content_length]='0';
for(i=0;postinput[i];i++)
if(postinput[i]=='+')
postinput[i]=''; //对加易举行处理惩罚处罚
pairlist=(char **)malloc(256*sizeof(char **));
paircount=0;
nvpair=strtok(postinput,"&");//从出现“&”字符的位置把信息分段,然后对结果依次处理惩罚处罚
while (nvpair){
pairlist[paircount++]=strdup(nvpair);
if(!(paircount%256))
pairlist=(char**)realloc(pairlist,(paircount+256)*sizeof(char**));
nvpair=strtok(NULL,"&");
}
pairlist[paircount]=0;
postvars=(char**)malloc((paircount*2+1)*sizeof(char **));
for(i=0;i<paircount;i++){
if(eqpos=strchr(pairlist[i],'=')){
*eqpos='0';
unescape_url(postvars[i*2+1]=strdup(eqpos+1));//调用unescape_url函数连续解码
}else{
unescape_url(postvars[i*2+1])=strdup(""));
}
postvars[paircount*2]=0;
for(i=0;pairlist[i];i++)
free(pairlist[i]);
free(pairlist);
free(postinput);
return postvars;
}
此中,unescape_url函数再调用x2c函数,把(不是字节或数字的)分外字符从其%HH表现要领解码为文本字符。
/*unescape_url function*/
static void unescape_url(char *url){
int x,y;
for(x=0,y=0;url[y];++x,++y){
if((url[x]=url[y])=='%'){
url[x]=x2c(&url[y+1]);
y+=2;
}
}
url[x]='0';
}
(3)直接URL加参数转达要领
这是一种倒霉用表单就可以向CGI发送信息的要领。它把信息直接追加在URL地点反面,信息和URL之间用号号(?)来退出。比喻,敷衍一个cgi_gpio.cgi的脚本,可以从如下的链接启动:
<A HREF=/cgi-gpio.cgi!?flag=0 Operate P0</A>
<A HREF>/*cgi-bin/cgi_gpio.cgi?flag=1 Operate P1</A>
<A HREF=/cgi-bin_gpio.cgi?flag=2 Operate P2</A>
.CGI扩展步调中可利用如下代码汲取信息:char *get_input;//用于汲取环境变量
.get_input=getenv(“QUERY_STRING”);
if(get_input){
get_input=strdup(get_input);
printf("QUERY_STRING if %s",get_input);
}
/*刚强flag=x信息*/
if(!strcmp(get_input,"flag=0")
...//Operate p0
else if(!strcmp(get_input,"flag=1")
...//Operate P1
else
...//Operate P2
敷衍上述三种要领,可以根据差别的应用场合和应用恳求举行选取。
结语
嵌入式Web Server体系方案可以广泛应用在很多范畴,如主动化配置的长途监控、嵌入式GSM短消息 平台以及长途家庭医疗等。并且,随着互联网应用范畴的不绝深入,嵌入式Internet技能将得到更为广泛的应用和生长。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号