创建自己的包
开发的第一步来自于模仿,我们模仿openwrt内部的软件包来创建自己的软件包helloword。
这里为了更好的展示,我们使用uhttpd(openwrt默认的web服务器)来运行helloword。这里就需要将helloword安装成uhttpd的CGI程序,供网页调用。话不多说,步骤如下。
创建包文件夹
在package/network/services下新建文件夹helloword
里面包含src文件夹,src中建立2个文件,一个是hello.c的源文件,一个是对应的makefile
如下是文件内容
简单讲一下怎么输出:
这个编译完我们是可以直接运行的,不过直接make的话需要将$(GCC)先改成gcc,运行一下试试看
CGI程序是靠标准输出输出传递数据的,即web服务器通过stdin将数据传输给CGI程序,CGI程序通过STDout将数据返回给服务器,所以这里直接printf即可,就可以将数据打印到标准输出上由服务器接收。
在src文件夹外再建立一个makefile,用于openwrt的模块编译
文件内容如下:
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/package.mk
PKG_NAME:=helloword
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
define Package/helloword
SECTION:=net
CATEGORY:=Network
DEPENDS:=uhttpd +libuci
TITLE:=Build for helloword
endef
define Package/helloword/description
this is package for sdk
endef
define Package/helloword/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/helloword/compile
endef
define Package/helloword/install
$(INSTALL_DIR) $(1)/www/cgi-bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloword $(1)/www/cgi-bin/helloword
endef
$(eval $(call BuildPackage,helloword))
CATEGORY 是表示此模块是在那个子模块下,这里后面make配置的时候会用到
PKG_RELEASE 是包版本,用于包升级
DEPENDS 是依赖,本程序后面要作为CGI程序使用,所以要依赖uhttpd
define Package/helloword/install下面的内容为什么选择www/cgi-bin,是因为uhttpd默认的CGI文件夹位于此,所以要安装在这里。
剩下的都是仿照其他模块写的,copy即可
后面是模块编译验证
./scripts/feeds update -a
更新一下包管理,这样可以将自己新增的模块更新到config列表中
make menuconfig
选择network中的helloword
这里有点小差别,点击Y的时候是编译到固件包中去,点击M的时候是编译成模块,差异暂时未知,这里选择Y
因为要用到uhttpd,这里将uhttpd也选择了
这里深化记忆mk对于配置菜单的作用
network下的webservers
好了,选择完之后我们保存退出,测试一下模块编译
make package/network/services/helloword/compile
编译没有报错,我们可以去编译文件夹下找到编译出来的ipk文件。
这里我们先暂不考虑IPK文件怎么安装到路由器中,模块其实已经添加好了,按照全部编译完成后刷到路由器中去。
输出
升级完成之后在浏览器输入
http://192.168.1.1/cgi-bin/helloword 即可看到网页出现
更多问题尽情讨论