隨著嵌入式微處理器與網路技術進步,基於 Web 的網路數位視訊監控系統廣受關注。將影像擷取、視訊壓縮與 Web 服務整合於單一嵌入式裝置,支援 PPPoE 動態撥號與靜態 IP 兩種接入方式,透過 HTTP/TCP/IP 處理控制指令與資料庫讀寫,透過 RTP/UDP/IP 傳輸即時影像,實現即插即用、組網彈性高的監控方案。
系統核心需求:安全性、流量控制、即時回應、高效能、序列埠指令支援、資料庫離線儲存。uCLinux 下主流三選一:
綜上,thttpd 最符合系統需求。
make menuconfig 勾選 BusyBox 中的 thttpd。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"
vendor/Samsung/4510B/makefile 的 ROMFS_DIRS 加入 home/httpd、home/httpd/cgi-bin。vendor/Generic/httpd、vendor/Generic/httpd/cgi-bin,編譯自動打包進映像檔。vendor/Samsung/4510B/rc 加入 thttpd 啟動指令。user/htpasswd.c 產生加密帳號檔:
./htpasswd -c passwd root
Adding password for root.
New password: ********
Re-type new password: ********
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 加入連線有效性判斷,完成多用戶視訊調度。
thttpd.c main() 開啟 /dev/ttyS1,設定 9600 8N1:tcgetattr、cfmakeraw、cfsetispeed/ospeed、tcsetattr。libhttpd.c httpd_parse_request 將 Web 參數轉為雲台指令陣列 cmd。write(com1fd, cmd, YT_CMD_NUM) 發送指令(uCLinux 一切皆檔案)。uCLinux 採 ROMFS(唯讀)+ RAM Disk(掉電遺失)。長期保存配置採「劃分固定 Flash 扇區」法(適合低頻寫入),而非 JFFS2(高頻寫入、資源消耗大)。
| 分區名稱 | 大小 | 偏移 | 屬性 |
|---|---|---|---|
| bootloader | 128KB (0x20000) | 0x0 | MTD_WRITEABLE(唯讀) |
| kernel & rootfs | 1856KB (0x1D0000) | 0x20000 | - |
| system config | 64KB (0x10000) | 0x1F0000 | 可讀寫,存配置 |
drivers/mtd/map,修改對應 Makefile。MTD_CHAR(原始字元存取)與 MTD_BLOCK(區塊裝置可建檔案系統)。vendor/Samsung/4510B/makefile DEVICES 加入 mtd0~2 (char) 與 mtdblock0~2 (block)。make menuconfig 勾選 MTD 相關選項編入核心。open("/dev/mtd2", O_RDWR) 操作配置分區,寫入前暫存於記憶體陣列,批次寫入減少 Flash 操作。system config 分區是否未初始化(全 0xFF 或 0x00),載入預設配置。mtd-utils.c 複製至 user/thttpd 直接呼叫 read/write。嵌入式 Web Server 結合 CGI 使系統管理更直觀。本文從架構選型、移植、認證、視訊傳輸、序列埠控制、MTD 持久化完整實作,為所有基於嵌入式 Web 技術的監控系統設計提供實戰參考。