文章目錄
- 🧠 一、Lighttpd 與開發板的交互原理
- 1. 什么是 Lighttpd?
- 2. 與開發板交互的方式?
- 🧾 二、lighttpd.conf 配置文件講解
- ?? 注意事項:
- 📁 三、目錄結構說明
- 💡 四、使用 C 編寫 CGI 腳本(實現點燈)
- 1. 示例:C語言 CGI 腳本(控制 GPIO)
- 2. 編譯并設置權限
- 🌐 五、網頁中調用 CGI(按鈕觸發)
- 🛠? 六、調試建議
- ? 總結
🧠 一、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 、執行權限 |
效果實現:
點擊后可以跳轉到另外一個界面: