文章目录
🧠 一、Lighttpd 与开发板的交互原理
1. 什么是 Lighttpd?
Lighttpd 是一个轻量级 Web 服务器,适合资源受限的嵌入式开发板运行。它支持:
- 静态网页服务(HTML、图片等)
- 动态网页处理(如 CGI 脚本)
- 支持 FastCGI、SCGI、URL 重写等
2. 与开发板交互的方式?
Lighttpd 自身不直接控制硬件(比如点灯),而是通过调用 CGI 程序(通常是用 C 语言或 shell 写的),这些程序再调用开发板底层的接口,比如:
- 操作 GPIO 口实现“点灯”
- 读取传感器数据返回网页
- 执行控制指令等
总结:网页点击按钮 → 请求 CGI 脚本 → 脚本操作硬件并返回结果 → 网页展示结果
🧾 二、lighttpd.conf 配置文件讲解
一个典型的配置如下:
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
"mod_cgi"
)
server.document-root = "/etc/lighttpd/www" # 网站根目录
server.port = 8080 # 启动监听端口
server.errorlog = "/etc/lighttpd/error.log" # 错误日志
dir-listing.activate = "enable" # 浏览目录功能
index-file.names = ( "index.html" ) # 默认主页文件名
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png",
"" => "application/octet-stream"
)
# 配置 CGI 路由规则
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( ".cgi" => "" )
}
⚠️ 注意事项:
accesslog.filename
和server.modules-dir
是无效选项,可以删除;cgi.assign
中的"cgi"
要确保对应文件有执行权限;mod_cgi
必须包含在server.modules
中。
📁 三、目录结构说明
比如 /etc/lighttpd/
目录结构如下:
/etc/lighttpd/
├── www/ # 网站根目录
│ ├── index.html # 默认主页
│ └── cgi-bin/ # CGI 程序存放目录
│ └── led.cgi # 用 C 写的 CGI 程序
├── lighttpd.conf # 配置文件
├── error.log # 错误日志
└── access.log # 访问日志(可选)
💡 四、使用 C 编写 CGI 脚本(实现点灯)
1. 示例:C语言 CGI 脚本(控制 GPIO)
代码:led.cgi
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("Content-type: text/html\n\n");
printf("<html><body>");
// 简单模拟点灯,真实环境用 /sys/class/gpio/ 或驱动接口
system("echo 1 > /sys/class/leds/led0/brightness");
printf("<h1>LED 已开启!</h1>");
printf("</body></html>");
return 0;
}
2. 编译并设置权限
# 交叉编译
aarch64-linux-gcc -o led.cgi led.c
# 放入 CGI 目录
cp led.cgi /etc/lighttpd/www/cgi-bin/
chmod +x /etc/lighttpd/www/cgi-bin/led.cgi
🌐 五、网页中调用 CGI(按钮触发)
index.html 示例:
<!DOCTYPE html>
<html>
<head><title>LED 控制</title></head>
<body>
<h1>控制面板</h1>
<form action="/cgi-bin/led.cgi" method="GET">
<button type="submit">点亮LED</button>
</form>
</body>
</html>
访问开发板网页:http://开发板IP:8080
点击按钮,即会请求 /cgi-bin/led.cgi
,从而点亮灯。
🛠️ 六、调试建议
404 错误排查:
- 确认 URL 是
/cgi-bin/*.cgi
- CGI 文件可执行 (
chmod +x
) - 文件路径正确,配置中的路径匹配上
- 确认 URL 是
权限问题:
- CGI 操作硬件需 root 权限运行
- 确保 CGI 能访问
/sys/class/gpio
或相关硬件路径
日志查看:
cat /etc/lighttpd/error.log
✅ 总结
项目 | 内容 |
---|---|
Web 服务 | Lighttpd 监听 8080 端口,提供页面 |
动态响应 | 使用 C 编写的 CGI 程序,响应用户点击 |
硬件控制 | CGI 调用系统命令或控制设备驱动实现 |
网页交互 | 表单或 JS 请求触发 CGI 执行 |
关键配置 | mod_cgi 、cgi-bin 、执行权限 |
效果实现:
点击后可以跳转到另外一个界面: