Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

嵌入式 Linux 視訊監控系統中 thttpd 網頁伺服器移植與功能擴充實戰

編輯:Linux 教學

專案背景

隨著嵌入式微處理器與網路技術進步,基於 Web 的網路數位視訊監控系統廣受關注。將影像擷取、視訊壓縮與 Web 服務整合於單一嵌入式裝置,支援 PPPoE 動態撥號與靜態 IP 兩種接入方式,透過 HTTP/TCP/IP 處理控制指令與資料庫讀寫,透過 RTP/UDP/IP 傳輸即時影像,實現即插即用、組網彈性高的監控方案。

Web 伺服器選型:為何選 thttpd?

系統核心需求:安全性、流量控制、即時回應、高效能、序列埠指令支援、資料庫離線儲存。uCLinux 下主流三選一:

  • Httpd:最簡單,無認證、無 CGI。
  • BOA:開源、穩定,但為單任務架構。
  • thttpd:簡單、小巧、易移植、快速、安全。預設以一般使用者權限執行,有效阻擋未授權資源存取;完整支援 HTTP Basic Auth (RFC2617);採多工複用(Multiplex)非 fork 機制處理並發,效能極佳;內建基於 URL 的頻寬限制,視訊流控極便利(Apache 需額外模組且效率較低)。

綜上,thttpd 最符合系統需求。

thttpd 基本功能移植步驟

  1. 核心配置:make menuconfig 勾選 BusyBox 中的 thttpd。
  2. 修改 config.h 關鍵巨集:
    #define DEFAULT_PORT     80
    #define DEFAULT_DIR      "/home/httpd"
    #define INDEX_NAME       "index.html"
    #define AUTH_FILE        "passwd"
    #define CGI_PATTERN      "/cgi-bin/*.cgi"
    #define CGI_PATH         "/home/httpd/cgi-bin"
    
  3. 建立唯讀根檔案系統目錄結構(ROMFS):修改 vendor/Samsung/4510B/makefile 的 ROMFS_DIRS 加入 home/httpd、home/httpd/cgi-bin。
  4. 放置網頁與 CGI 程式:置於 vendor/Generic/httpd、vendor/Generic/httpd/cgi-bin,編譯自動打包進映像檔。
  5. 開機自動啟動:在 vendor/Samsung/4510B/rc 加入 thttpd 啟動指令。

HTTP Basic Auth (RFC2617) 實作

  1. 編譯 user/htpasswd.c 產生加密帳號檔:
    ./htpasswd -c passwd root
    Adding password for root.
    New password: ********
    Re-type new password: ********
    
  2. 將 passwd 複製至 vendor/Generic/httpd,確認 config.h AUTH_FILE 同名。

視訊調度與傳輸實作

主迴圈啟動前依序呼叫 get_device、driver_init、device_init、alloc_resource、interrupt_enable、device_start 啟動 MPEG4 編碼。新增定時器回呼 tmr_create(..., transfer_bitstream, mpeg4_fd, ...) 定期推送位元流。在 handle_read/handle_send 加入連線有效性判斷,完成多用戶視訊調度。

序列埠雲台控制指令支援

  1. thttpd.c main() 開啟 /dev/ttyS1,設定 9600 8N1:tcgetattr、cfmakeraw、cfsetispeed/ospeed、tcsetattr。
  2. libhttpd.c httpd_parse_request 將 Web 參數轉為雲台指令陣列 cmd。
  3. 以 write(com1fd, cmd, YT_CMD_NUM) 發送指令(uCLinux 一切皆檔案)。

配置資訊持久化:MTD 驅動實作

uCLinux 採 ROMFS(唯讀)+ RAM Disk(掉電遺失)。長期保存配置採「劃分固定 Flash 扇區」法(適合低頻寫入),而非 JFFS2(高頻寫入、資源消耗大)。

Flash 分區規劃(2MB)

分區名稱大小偏移屬性
bootloader128KB (0x20000)0x0MTD_WRITEABLE(唯讀)
kernel & rootfs1856KB (0x1D0000)0x20000-
system config64KB (0x10000)0x1F0000可讀寫,存配置

驅動整合步驟

  1. 將分區表放入 drivers/mtd/map,修改對應 Makefile。
  2. 啟用 MTD_CHAR(原始字元存取)與 MTD_BLOCK(區塊裝置可建檔案系統)。
  3. 在 vendor/Samsung/4510B/makefile DEVICES 加入 mtd0~2 (char) 與 mtdblock0~2 (block)。
  4. make menuconfig 勾選 MTD 相關選項編入核心。
  5. 應用層透過 open("/dev/mtd2", O_RDWR) 操作配置分區,寫入前暫存於記憶體陣列,批次寫入減少 Flash 操作。

配置管理與啟動流程

  • 首次啟動檢查 system config 分區是否未初始化(全 0xFF 或 0x00),載入預設配置。
  • 將 mtd-utils.c 複製至 user/thttpd 直接呼叫 read/write。

結語

嵌入式 Web Server 結合 CGI 使系統管理更直觀。本文從架構選型、移植、認證、視訊傳輸、序列埠控制、MTD 持久化完整實作,為所有基於嵌入式 Web 技術的監控系統設計提供實戰參考。

Copyright © Windows教程網 All Rights Reserved