uhttpd移植----在树莓派上移植openwrt中的默认web服务

在树莓派上移植openwrt中的web服务

openwrt 中默认使用的web服务器是uhttpd,uhttp是一款功能全面又小巧的web服务器,非常适合学习web服务编程使用,此外,在嵌入式设备中使用该web服务器,也是一个不错的选择。
这里就介绍一下关于 uhttpd 移植相关的内容,以树莓派上的debian 系统为例,一步一步的将uhttpd移植过去。

uhttp相关依赖

  • json-c
  • ubox
  • ubus
  • lua

ubus 简介

ubus 是 openwrt 中实现进程间通信的一套通用框架,通过 ubus ,可以使得进程间的通信变得非常简单,这套进程间通信机制也可以非常方便的移植到其他的linux系统中,在移植 uhttpd 的同时,也将ubus 移植到了树莓派中,后续会另起一篇文章介绍一下 ubus 的使用。

移植步骤

uhttpd 是使用 cmake 进行编译的,因此在编译之前需要安装一下 cmake,这个就不介绍了。

移植 json-c

$ git clone https://github.com/json-c/json-c.git
$ cd json-c
$ ./autogen.sh --configure
$ make
$ make install
注意事项

在进行 autogen.sh 时 如果提示 autoreconf 不存在,则需要安装 autoreconf。

$ sudo apt-get install dh-autoreconf

移植 ubox

$ git clone git://git.openwrt.org/project/libubox.git
$ cd libubox
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_LUA=off
$ make
$ make install

移植 ubus

$ git clone git://git.openwrt.org/project/ubus.git
$ cd ubus
$ cmake -DBUILD_LUA=off
$ make
$ make install

编译完成后,会生成以下文件。

-rwxr-xr-x 1 root root 233K Sep 26 10:28 libubus.so
drwxr-xr-x 3 root root 4.0K Sep 26 10:27 lua
-rwxr-xr-x 1 root root 124K Sep 26 10:28 ubus
-rwxr-xr-x 1 root root 273K Sep 26 10:28 ubusd
注意事项

因为在 make install 的时候,默认没有将 libubus.so 安装到系统的库路径下,如果要使用 ubus 的话,还需要将 libusus.so 拷贝到系统库下面。

$ cp libubus.so /usr/local/lib/

移植 lua

$ git clone https://github.com/lua/lua.git
$ cd lua 
$ make linux
$ make install
注意事项

编译过程中如果提示 缺少 readline.h 则需要安装 libreadline-dev

$ sudo apt-get install libreadline-dev

移植 uhttpd

$ cd uhttpd/build
$ cmake ..
$ make
$ make install
注意事项

如果不需要 uhttpd 支持 TLS 则需要在 CMakeList.txt 文件中将 TLS_SUPPORT 选项设置为 OFF。

# CMakeList.txt

OPTION(TLS_SUPPORT "TLS support" OFF)

测试

所有软件移植完成后,uhttpd就可以正常运行了。

root@raspberrypi:/home/qiao/http/uhttpd/ubus/build# ubus
Usage: ubus [<options>] <command> [arguments...]
Options:
 -s <socket>:           Set the unix domain socket to connect to
 -t <timeout>:          Set the timeout (in seconds) for a command to complete
 -S:                    Use simplified output (for scripts)
 -v:                    More verbose output
 -m <type>:             (for monitor): include a specific message type
                        (can be used more than once)
 -M <r|t>               (for monitor): only capture received or transmitted traffic

Commands:
 - list [<path>]                        List objects
 - call <path> <method> [<message>]     Call an object method
 - listen [<path>...]                   Listen for events
 - send <type> [<message>]              Send an event
 - wait_for <object> [<object>...]      Wait for multiple objects to appear on ubus
 - monitor                              Monitor ubus traffic

root@raspberrypi:/home/qiao/http/uhttpd/ubus/build# uhttpd --help
uhttpd: invalid option -- '-'
Usage: uhttpd -p [addr:]port -h docroot
        -f              Do not fork to background
        -c file         Configuration file, default is '/etc/httpd.conf'
        -p [addr:]port  Bind to specified address and port, multiple allowed
        -h directory    Specify the document root, default is '.'
        -E string       Use given virtual URL as 404 error handler
        -I string       Use given filename as index for directories, multiple allowed
        -S              Do not follow symbolic links outside of the docroot
        -D              Do not allow directory listings, send 403 instead
        -R              Enable RFC1918 filter
        -n count        Maximum allowed number of concurrent script requests
        -N count        Maximum allowed number of concurrent connections
        -l string       URL prefix for Lua handler, default is '/lua'
        -L file         Lua handler script, omit to disable Lua
        -u string       URL prefix for UBUS via JSON-RPC handler
        -U file         Override ubus socket path
        -a              Do not authenticate JSON-RPC requests against UBUS session api
        -X              Enable CORS HTTP headers on JSON-RPC api
        -x string       URL prefix for CGI handler, default is '/cgi-bin'
        -y alias[=path] URL alias handle
        -i .ext=path    Use interpreter at path for files with the given extension
        -t seconds      CGI, Lua and UBUS script timeout in seconds, default is 60
        -T seconds      Network timeout in seconds, default is 30
        -k seconds      HTTP keepalive timeout
        -A seconds      TCP keepalive timeout, default is unset
        -d string       URL decode given string
        -r string       Specify basic auth realm
        -m string       MD5 crypt given string



root@raspberrypi:/home/qiao/http/uhttpd/ubus/build#uhttpd -f -h /www  -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80

结尾

以上就是整个移植过程,移植完成之后,下一步就开始在树莓派上使用 uhttpd 了,此外,还能够使用 ubus 框架在 树莓派上实现进程间通信,请等待后续更新…

参考链接

uhttpd github地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘雪冰峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值