当前位置: 首页 > news >正文

嵌入式Web服务器lighttpd交叉编译详解

目录

1. 引言

2. 准备工作

2.1 环境要求

2.2 依赖库下载

3. 交叉编译步骤

3.1 交叉编译依赖库(以PCRE为例)

3.2 交叉编译lighttpd

4. 部署到目标设备

4.1 复制文件到嵌入式设备

4.2 修改配置文件(lighttpd.conf)

6. 总结


1. 引言

lighttpd 是一个轻量级、高性能的Web服务器,专为嵌入式环境和资源受限场景设计。其低内存占用和高并发处理能力使其成为物联网设备、路由器等嵌入式系统的理想选择。若您的项目需要 低资源消耗、快速部署、高并发静态服务,lighttpd是嵌入式领域更优的选择。

Web服务器软件对比

特性lighttpdNginxApache
内存占用3-5MB10-20MB50-100MB
并发模型单线程事件驱动多进程事件驱动多线程/多进程
配置复杂度简单中等复杂
嵌入式适用性★★★★★★★★☆☆★☆☆☆☆
动态内容支持有限(需FastCGI)强大(Lua/JIT)强大(mod_php)

本文详细介绍如何通过交叉编译,将lighttpd移植到ARM/Linux嵌入式平台。 

2. 准备工作

2.1 环境要求

  • 开发机:WSL2/Ubuntu 20.04

  • 目标平台:ARM架构嵌入式设备x210

  • 交叉编译工具链:arm-none-linux-gnueabi-gcc 2014.05

  • lighttpd版本:1.4.39

2.2 依赖库下载

lighttpd需要一些依赖以下库,需提前交叉编译:

  • PCRE(正则表达式支持)

 PCRE 全称:Perl Compatible Regular Expressions,提供与Perl语言语法高度兼容的正则表达式库,用于字符串匹配、替换、提取等操作。它是轻量级、高性能的正则表达式解析引擎,广泛应用于开源软件(如Nginx、Apache、lighttpd)中实现路由、重写规则等功能。

如果编译时不带PCRE,启动时程序可能报这样的错误:

can't handle '$HTTP[url] =~ ...' as you compiled without pcre support.
(perhaps just a missing pcre-devel package ?)

这是因为默认的配置文件中使用了很多这样的语法,为了方便使用,还是编译PCRE为好。 PCRE有两个版本,PCRE 8.X和PCRE2 10.X,不同的lighttpd用的版本可能不一样。本文使用的lighttpd是1.4.39,使用的PCRE是8.45。

  • Zlib、bzip2等(压缩功能)

本次编译忽略这些库,暂时用不到相关功能。

  • OpenSSL(HTTPS功能)

由于我们主要是在局域网内部测试,对安全性要求不高,本次编译忽略SSL功能,所以不编译这个库。

3. 交叉编译步骤

3.1 交叉编译依赖库(以PCRE为例)

编译命令如下:

tar -xzf pcre-8.45.tar.gz
cd pcre-8.45./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-linux target=arm-linux --prefix=/mnt/d/lighttpd/pcre-8.45/install --enable-unicode-properties --enable-utf8 
make && make install

3.2 交叉编译lighttpd

编译命令如下:

tar -xzf lighttpd-1.4.69.tar.gz
cd lighttpd-1.4.69# 设置交叉编译工具前缀
CROSS_COMPILE=arm-none-linux-gnueabi-# 设置工具链路径
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
export PATH=$PATH:/mnt/d/lighttpd/pcre-8.45/install/bin
export CPPFLAGS="-I/mnt/d/lighttpd/pcre-8.45/install/include"
export LDFLAGS="-L/mnt/d/lighttpd/pcre-8.45/install/lib"# 配置编译选项
./configure \--host=arm-linux \--prefix=/var/lighttpd/ \--with-openssl \--without-zlib \--without-bzip2 \--with-pcremake -j16
sudo make install

 这里做点解释:

  1. 之所以把pcre编译后的bin目录加入PATH是为了让lighttpd交叉编译时能够找到pcre-config脚本。
  2. 这里的prefix不能随便设置,因为lighttpd会把这个路径以硬编码的形式写到程序中,所以这个路径必须和开发板上实际部署的路径一致,否则在开发板上加载插件时会报告错误。

4. 部署到目标设备

4.1 复制文件到嵌入式设备

首先需要把pcre的运行库拷贝到开发板的/usr/lib下。

然后把主机/var/lighttpd目录下的所有文件拷贝到开发板的/var/lighttpd目录下。然后在/var/lighttpd目录下建立几个文件夹:cache、cgi-bin、config、log、sockets、upload、vhosts、htdocs,并将并将源码包中doc/config目录下的conf.d目录、lighttpd.conf和modules.conf复制到/var/lighttpd/config中。

4.2 修改配置文件(lighttpd.conf)

下面以文件比较的方式列出我对配置文件的修改:

这些修改都是最脚本的。

5. 验证与测试

  • 检查进程ps | grep lighttpd

  • 日志查看tail -f /var/log/lighttpd/error.log

  • 访问测试用浏览器访问http://目标设备IP 

在htdocs目录下建立一个index.html文件,输入以下内容:

<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>欢迎使用 Lighttpd</title><style>body {margin: 0;padding: 0;/* 背景颜色渐变动画 */animation: bgGradient 10s linear infinite;}@keyframes bgGradient {0% {background-color: #007bff;}50% {background-color: #00c6ff;}100% {background-color: #007bff;}}.welcome {text-align: center;margin-top: 100px;font-size: 48px;color: white;/* 文字旋转动画 */animation: rotateText 5s linear infinite;}@keyframes rotateText {from {transform: rotate(0deg);}to {transform: rotate(360deg);}}</style>
</head><body><div class="welcome">欢迎使用 Lighttpd!</div>
</body></html>

然后用浏览器访问设备的IP地址就可以看到一个旋转动画的界面。 

6. 总结

通过交叉编译,我们成功在ARM设备上部署了高性能的lighttpd服务器。此方法同样适用于其他嵌入式架构(如MIPS、RISC-V)。欢迎在评论区交流问题!希望这篇指南能帮助您顺利完成lighttpd的移植!

相关文章:

  • 8.2.CICD自动化
  • 青藏高原七大河流源区径流深、蒸散发数据集(TPRED)
  • 远程调试---在电脑上devtools调试运行在手机上的应用
  • 在 Excel 中有效筛选重复元素
  • 365打卡第R8周: RNN实现阿尔茨海默病诊断
  • Jmeter中的Json提取器如何使用?
  • CH579 CH573 CH582 CH592 蓝牙主机(Central)实例应用讲解
  • 生产级AI/ML特征存储平台:Feast全面使用指南 — Use Cases Third party integrations FAQ
  • TransmittableThreadLocal:穿透线程边界的上下文传递艺术
  • PostgreSQL 的 pg_advisory_lock_shared 函数
  • 机器学习 day01
  • 【金仓数据库征文】金融行业中的国产化数据库替代应用实践
  • 抖音视频上传功能测试全维度拆解——从基础功能到隐藏缺陷的深度挖掘
  • 【25软考网工】第六章(2)信息加密技术
  • 机器视觉光源的特点及选择应用
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新用户信息
  • [亲测搭建可用]LoliMeow主题二次元风博客WordPress主题模板
  • 基于GF域的多进制QC-LDPC误码率matlab仿真,译码采用EMS算法
  • Go语言超时控制方案全解析:基于goroutine的优雅实现
  • [面试]SoC验证工程师面试常见问题(七)低速接口篇
  • 哈尔滨工业大学原副校长王魁业逝世,享年92岁
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 巴基斯坦称对印度发起军事行动
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 47本笔记、2341场讲座,一位普通上海老人的阅读史
  • 2025柯桥时尚周启幕:国际纺都越来越时尚