作业要求
1、移植Webserver(Web服务器)到开发板。源代码可以到相关网站下载。(编写测试程序,例:通过cgi实现远程控制(模拟控制,如控制led1灯)。)
要求:1)测试程序源代码。
2)操作演示。
一、Boa Web服务器移植
参考博客:
1.1解压boa-0.94.13.tar.gz
1.2 进入到boa-0.94.13目录,进入到src目录
设置启动服务器时寻找boa.conf配置文件的路径
修改Makefile
1.3生成Makefile
遇到的问题可参考博客:
1.4执行make -j4生成boa可执行文件
1.5创建BOA服务器目录
1.6将可执行文件boa拷贝到/home/yao/boa/bin目录下
将boa.conf拷贝到~/boa/目录下
1.7修改配置文件boa.conf
$vim boa.conf +48
48 User 0
49 Group 0
修改日志路径
修改DocumentRoot的目录
修改MimeTypes
修改ScriptAlias
1.8拷贝mime文件
创建log文件
1.9启动boa服务器
二、在/home/yao/boa/www/cgi-bin目录下放ctl_led可执行文件
/**Ctl_led.c**/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#define LED_DEVICE "/dev/leds0"
int main() {
// 设置响应头部 双换行代表响应头结束
printf("Content-type:text/html;charset=utf-8\n\n");
// 获取CGI的URL参数
char *query_string = getenv("QUERY_STRING");
// 解析URL参数
int led_no;
int on;
sscanf(query_string, "led_no=%d&on=%d", &led_no, &on);
// 打开LED设备文件
int fd = open(LED_DEVICE, O_RDWR);
if (fd < 0) {
perror("open device leds");
exit(1);
}
// 控制LED的亮灭状态
if (led_no == 1) {
ioctl(fd, on, 1);
}
// 关闭设备句柄
close(fd);
// 输出HTML页面
printf("<html>\n");
printf("<head><title>Control LED</title></head>\n");
printf("<body>\n");
printf("<h1>Control LED</h1>\n");
printf("<p>LED %d is turned %s</p >\n", led_no, on ? "on" : "off");
printf("</body>\n");
printf("</html>\n");
return 0;
}
2.1在网页上输入:<开发板对应ip地址>/cgi-bin/ctl_led?led_no=1&on=0
led_no =1 代表led1
on=0 关灯。on=1 开灯
问号`?`用于分隔URL的路径和查询字符串。