一、实验目的

搭建基于arm开发板的web服务端程序,通过网页控制开发板LED状态

二、boa简介

Boa服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。

三、源码下载

下载链接直达:http://www.boa.org/news.html

四、源码编译

# 解压
tar- xvf boa-0.94.14rc21.tar.gz
cd boa-0.94.14rc21
# 配置生成makefile
./configure
# 修改makefile编译工具:这里选择自己的交叉编译器
vim ./src/MakefileCC = arm-linux-gcc
CPP = arm-linux-gcc -E# 编译
make


为了保险期间我们使用file指令查看一下生成的文件是否为arm版本

然后我们开始准备开发板上需要的文件配置

mkdir nuc977
cp src/boa
cp src/boa ./nuc977/
cp examples/boa.conf ./nuc977/
cp /etc/mime.types ./nuc977/
touch ./nuc977/group
mkdir ./nuc977/www
mkdir ./nuc977/www/cgi-bin
touch ./nuc977/index.html
cd nuc977/

// 如果这里没有example文件夹可以使用“find ./ -name boa.conf”这个命令查找一下源码下conf文件的位置一定有的

然后将这些文件传输到nfs文件夹中

五、开发板配置

mkdir /etc/boa
cp /mnt/nuc977/www / -rf
cp /mnt/nuc977/boa /etc/boa
cp /mnt/nuc977/boa.conf /etc/boa
cp /mnt/nuc977/mime.types /etc
cp /mnt/nuc977/group /etc
cp /mnt/nuc977/index.html /www

然后需要修改我们的etc/boa/box.conf文件内容

Group nogroup 改为Group 0 // 修改nogroup为0
ErrorLog /etc/boa/error_log  // 更改路径
AccessLog /etc/boa/access_log // 更改路径
ServerName www.your.org.here // 取消注释
DocumentRoot /www  // 修改路径
ScriptAlias /cgi-bin/ /www/cgi-bin/  // 修改路径

修改index.html界面,内容如下:

 <!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>LED控制页面</title></head><body> <input type="button" value="开"/><input type="button" value="关"/></body>
</html>
cd /etc/boa ./boa

然后我们ifconfig查看开发板ip,然后在我们pc端浏览器输入该ip地址查看效果

六、控制led灯实验

方案1

boaapp.c文件

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>void led_on()
{char ubuf[2] = {1, 0};    int fd; fd = open("/dev/led",O_RDWR);if(fd < 0){printf("open runled device error\r\n");return;}   write(fd, ubuf, 1); close(fd);
}void led_off()
{char ubuf[2] = {0, 0};    int fd; fd = open("/dev/led",O_RDWR);if(fd < 0){   printf("open runled device error\r\n");return;}   write(fd, ubuf, 1); close(fd);
}int main(void)
{char *data;printf("Content-Type:text/html;charset=gb2312\n\n");//它是一个MIME头信息,它告诉Web服务器随后的输出是以html的形式printf("<html>\n");printf("<body>\n");printf("<title>this is title</title> ");printf("<h3>this is h3</h3> ");data = getenv("QUERY_STRING");//得到客户端发送过来的数据printf("<p>接受到的数据为:%d</p>",data);if(strcmp(data,"on")){led_on();}else if(strcmp(data,"off")){led_off();}printf("</body>\n");printf("</html>\n");// free(data);return 0;
}

编译

arm-linux-gcc boaapp.c -o boaapp.cgi -static

然后我们将编译出来的文件拷贝到开发板的www/cgi-bin文件夹中,然后我们进入浏览器进行访问,然后一直出现错误,经过实验可以得知问题出在函数getenv上(http://192.168.1.3/cgi-bin/boaapp.cgi)


只要把这里注释掉就正常访问了

方案2

下载https://github.com/boutell/cgic
修改cgictest.c

#include"cgic.h"
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>void led_on()
{char ubuf[2] = {1, 0};     int fd;fd = open("/dev/led",O_RDWR);if(fd < 0){printf("<p align=\"center\">open onled device error<\p>>");return;}write(fd, ubuf, 1);close(fd);
}void led_off()
{char ubuf[2] = {0, 0};     int fd;fd = open("/dev/led",O_RDWR);if(fd < 0){printf("<p align=\"center\">open offled device error<\p>>");return;}write(fd, ubuf, 1);close(fd);
}
int cgiMain()
{ char state[10]; // cgiFormString("led_num", led_num, 10); // 从表单中的led_num字段获取值存入到led_num cgiFormString("state", state, 10);// 从表单中的led_state字段获取值存入到led_state cgiHeaderContentType("text/html"); // 设定输出的内容格式 这里我们要输出HTMLfprintf(cgiOut,"<title>LED Test</title>"); fprintf(cgiOut,"<p align=\"center\">recv from arm:</p>");fprintf(cgiOut,"<form action=\"cgictest.cgi\" align=\"center\">LED_STATE<br><input type=\"text\" name=\"state\" \value=\"on\"><br><input type=\"submit\" value=\"push\"></form>");// fprintf(cgiOut,"led_num: %s", led_num);fprintf(cgiOut,"<br> <p align=\"center\">state: %s</p>", state);if(!strcmp(state,"on")){led_on();system("echo 1>/dev/led");}else if(!strcmp(state,"off")){led_off();system("echo 0>/dev/led");}return 0;
}

修改makefile:参考

CFLAGS=-g -Wall
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
LIBS=-L./ -lcgicall: libcgic.a cgictest.cgiinstall: libcgic.acp libcgic.a /usr/local/libcp 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.hrm -f libcgic.a$(AR) rc libcgic.a cgic.o$(RANLIB) libcgic.a#mingw32 and cygwin users: replace .cgi with .execgictest.cgi: cgictest.o libcgic.a$(CC) cgictest.o -o cgictest.cgi ${LIBS}clean:rm -f *.o *.a cgictest.cgi capture cgicunittesttest:$(CC) -D UNIT_TEST=1 cgic.c -o cgicunittest./cgicunittest

最后目录组成

执行make然后将生成的.cgi文件拷贝到板子的www/cgi-bin目录下然后打开浏览器
最终效果(目前)

【ARM】在NUC977上搭建基于boa的嵌入式web服务器相关推荐

  1. 基于BOA的嵌入式Web项目【机房温度监控】

    文章目录 一.需求分析 二.项目结构 三.效果图 四.数据传输 4.1 采集端数据传输到CGI进程 4.2 CGI进程数据传输到Web服务器 4.3 Web服务器传输给浏览器 五. 采集端 5.1 思 ...

  2. 轻松搭建基于 SpringBoot Vue 的 Web 商城应用

    背景介绍 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数 ...

  3. Serverless 实战 —— 轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

    Serverless 实战 -- 轻松搭建基于 SpringBoot + Vue 的 Web 商城应用 背景介绍 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute ...

  4. boa服务器如何运行cgi,嵌入式WEB服务器BOA+CGI.ppt

    嵌入式WEB服务器BOACGI 嵌入式WEB服务器:BOA+CGI 报 告 人: 李 实 * ASIPP 随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流 ...

  5. arm嵌入式web服务器 性能,arm嵌入式web服务器

    arm嵌入式web服务器 内容精选 换一换 在待分析的服务器上安装节点.Web服务器(即安装鲲鹏性能分析工具的服务器)默认安装了节点,如果待分析的服务器与安装工具的服务器是同一个,请跳过该章节.已成功 ...

  6. lamp php5.5,CentOS 5.5快速搭建Apache+PHP5+MySQL完美Web服务器(LAMP)

    CentOS 5.5快速搭建Apache+PHP5+MySQL完美Web服务器(LAMP) By sole | Friday, May 13, 2011 在网上看了很多,修改多次,也试验多次,均没有问 ...

  7. 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记

    一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码     下载地址: http://www.boa.org/     目前最新发行版本: 0.94.13  ...

  8. 基于Go语言的Web服务器开发

    基于Go语言的Web服务器开发 本文将介绍使用Go语言来开发一个简单的Web服务器,其中将包括文件上传和下载功能. 必备条件 Go语言环境 一个文本编辑器 网络服务器 步骤一:编写server.go文 ...

  9. 搭建Python自带静态Web服务器

    学习目标 能够知道搭建Python自带Web服务器 1. 静态Web服务器是什么? 可以为发出请求的浏览器提供静态文档的程序. 平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个 ...

最新文章

  1. 中国游戏中心让计算机死机,win10玩游戏不定时死机
  2. java 获取mp4 缩略图_java获取视频缩略图
  3. file_operations结构体
  4. c语言statistics函数,Logistic回归中C-Statistics计算方法
  5. 【Android】activity-alias的使用
  6. reinterpret_cast、dynamic_cast、static_cast的使用及注意事项
  7. Java中使用poi导入、导出Excel
  8. C语言 · 阶乘计算 · 基础练习
  9. 单项选择题标准化考试系统设计
  10. linux配置超时_自动退出登录TMOUT
  11. 80C51单片机:2.初学点亮发光二极管,流水灯案例
  12. PythonOpenCV基础篇2线段
  13. OSDI2020:Delos中的虚拟共识
  14. 数据价值深度挖掘,分析服务上线“探索”能力
  15. Python3.6安装PyQt5的方法
  16. 双因子与多因子身份验证有什么区别?
  17. 小区文化建设成居民困扰,捷径智慧物业系统提出解题方案
  18. python接口测试+ununittest之verbosity
  19. 明星“真空”出镜上直播,这戏该如何继续演?
  20. XYT-OTN2800-X

热门文章

  1. 我的流水账---城市浅薄记忆(三)
  2. 基于vue-cli快速构建
  3. 我的不过范德萨就好过放电
  4. html 图片自动滚动播放,javascript+html5实现仿flash滚动播放图片的方法
  5. 随手记——(细节)1
  6. 怎样找对还有一半---第四章认识彼此 完全接纳
  7. 下列适合作为服务器操作系统的是,江苏专转本计算机真题 含答案
  8. android 百度鹰眼集成,ios 百度鹰眼集成
  9. JAVA环境配置与连接数据库
  10. 一文解锁BILIBILI、ACFUN等弹幕网站是如何审核视频