使用lighttpd和开发板进行交互

文章目录

    • [🧠 一、Lighttpd 与开发板的交互原理](#🧠 一、Lighttpd 与开发板的交互原理)
      • [1. 什么是 Lighttpd?](#1. 什么是 Lighttpd?)
      • [2. 与开发板交互的方式?](#2. 与开发板交互的方式?)
    • [🧾 二、lighttpd.conf 配置文件讲解](#🧾 二、lighttpd.conf 配置文件讲解)
      • [⚠️ 注意事项:](#⚠️ 注意事项:)
    • [📁 三、目录结构说明](#📁 三、目录结构说明)
    • [💡 四、使用 C 编写 CGI 脚本(实现点灯)](#💡 四、使用 C 编写 CGI 脚本(实现点灯))
      • [1. 示例:C语言 CGI 脚本(控制 GPIO)](#1. 示例:C语言 CGI 脚本(控制 GPIO))
      • [2. 编译并设置权限](#2. 编译并设置权限)
    • [🌐 五、网页中调用 CGI(按钮触发)](#🌐 五、网页中调用 CGI(按钮触发))
    • [🛠️ 六、调试建议](#🛠️ 六、调试建议)
    • [✅ 总结](#✅ 总结)

🧠 一、Lighttpd 与开发板的交互原理

1. 什么是 Lighttpd?

Lighttpd 是一个轻量级 Web 服务器,适合资源受限的嵌入式开发板运行。它支持:

  • 静态网页服务(HTML、图片等)
  • 动态网页处理(如 CGI 脚本)
  • 支持 FastCGI、SCGI、URL 重写等

2. 与开发板交互的方式?

Lighttpd 自身不直接控制硬件(比如点灯),而是通过调用 CGI 程序(通常是用 C 语言或 shell 写的),这些程序再调用开发板底层的接口,比如:

  • 操作 GPIO 口实现"点灯"
  • 读取传感器数据返回网页
  • 执行控制指令等

总结:网页点击按钮 → 请求 CGI 脚本 → 脚本操作硬件并返回结果 → 网页展示结果


🧾 二、lighttpd.conf 配置文件讲解

一个典型的配置如下:

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.filenameserver.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

c 复制代码
#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. 编译并设置权限

sh 复制代码
# 交叉编译
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 示例:

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)
    • 文件路径正确,配置中的路径匹配上
  • 权限问题

    • CGI 操作硬件需 root 权限运行
    • 确保 CGI 能访问 /sys/class/gpio 或相关硬件路径
  • 日志查看

    sh 复制代码
    cat /etc/lighttpd/error.log

✅ 总结

项目 内容
Web 服务 Lighttpd 监听 8080 端口,提供页面
动态响应 使用 C 编写的 CGI 程序,响应用户点击
硬件控制 CGI 调用系统命令或控制设备驱动实现
网页交互 表单或 JS 请求触发 CGI 执行
关键配置 mod_cgicgi-bin、执行权限

效果实现:

点击后可以跳转到另外一个界面:

相关推荐
木下~learning1 天前
初学Linux之设备树的使用| RK3399上实操
linux·设备树·rk3568·rk3399·平台总线和外设总线
REDcker1 天前
C++ new、堆分配与 brk / mmap
linux·c++·操作系统·c·内存
qq_283720053 天前
C++ 基础:STL 原理介绍 + 实用技巧
c++·stl·c·模板库
Industio_触觉智能6 天前
【转载】2026数字中国信创赛道【开放原子电鸿专项赛】开启报名,触觉智能电鸿硬件
信创·openharmony·rk3568·国产化·开源鸿蒙·电鸿·电力鸿蒙
4ever.ov06 天前
定时器/时间轮
开发语言·c++·c·muduo·llinux
REDcker9 天前
libevent、libev 与 libuv:对比、演进与实现原理
linux·c++·后端·编程·c·高并发·服务端
liulilittle11 天前
范围随机算法实现
开发语言·c++·算法·lua·c·js
逆小舟12 天前
【SWM320】FreeRTOS搭建工程——1、框架学习
嵌入式·c·rtos
阿拉斯攀登12 天前
【RK3576 安卓 JNI/NDK 系列 04】JNI 核心语法(下):字符串、数组与对象操作
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·jni字符串操作
阿拉斯攀登13 天前
【RK3576 安卓 JNI/NDK 系列 05】NDK 构建系统:CMakeLists.txt 从入门到精通
cmake·rk3568·瑞芯微·rk安卓驱动·安卓jni·ndk构建系统