如何在OpenWrt上开发

如何在OpenWrt上开发

本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:如何在OpenWrt上开发

最近,因为一些原因,我需要把自己之前开发的程序移植到OpenWrt上面。要做到这件事,至少需要一台装有OpenWrt的设备(可以用虚拟机)、一台Linux设备用于编译(WSL我猜或许也可以)、Linux编程的知识、GNU编译工具的用法、和一定的英语水平(看文档或者查错之类的)。

下载开发工具

从官方文档里能找到下载开发工具的部分:https://openwrt.org/docs/guide-developer/using_the_sdk#downloads

我使用了最新快照对应的工具,平台是ramips/mt7621,所以对应的下载位置在 https://downloads.openwrt.org/snapshots/targets/ramips/mt7621/。找到名为openwrt-sdk-ramips-mt7621_gcc-8.4.0_musl.Linux-x86_64.tar.xz的文件,下载之。

在Linux下解压,我用了Ubuntu 20.04,其他的系统应该也可以:

这样,开发工具就在openwrt目录下准备好了,下面提到的openwrt目录都是指这个目录。

创建本地Feed

OpenWrt提供了包管理工具opkg,其开发工具编译生成的最小单元也是包,而不是单个的可执行文件,虽然也可以把生成的可执行文件解出来放到OpenWrt上运行。包中除了可执行文件外还定义了安装方式,在使用时就可以一键安装和更新。

虽然可以直接在openwrt/package目录下面直接建包,但更推荐的方式是创建Feed来存放包,你可以把Feed整个放到代码版本库比如Git上面,当OpenWrt开发工具更新时,不需要把自己的包的代码移来移去。

Feed其实就是一个目录,里面包含了包的定义。我在openwrt目录外的地方建了个目录来作为Feed,然后将它配置到OpenWrt中。

feeds.conf里加入以下内容:

这样OpenWrt就知道多了一个名叫myfeed的Feed,对应的路径是/path/to/myfeed

创建包

myfeed目录中创建目录:

OpenWrt开发工具在找包的时候会遍历目录,所以把包放在Feed更深处也是可以的:

mypackage中创建名为Makefile的文件,写入:

虽然包里什么都没有,但是它已经是个合法的包了。

从Feed中导入包

回到openwrt目录,用以下命令导入包:

这时,运行以下命令就应该能在Utilities分类下看到mypackage这个包了。

还可以试着去编译它,虽然不会有输出,因为它是空的。

加入可执行程序

mypackage目录下创建目录src,用来放源代码。在src下创建main.cMakefile文件,分别写入:

然后修改mypackage目录中的Makefile,在call BuildPackage这一行前面加入以下内容:

然后回到openwrt目录下运行:

如果没出错,就能在openwrt/bin/packages/<平台>/myfeed/目录下找到.ipk后缀的文件,可以在OpenWrt界面上上传安装或者用opkg命令安装这个包。安装后在/usr/bin目录下能找到mypackage文件,执行它会出现:

总结

用以上的方法可以将自己的代码编译到目标平台,并且打成包,方便OpenWrt管理。但实际上我们需要的功能可能不止于此,还需要有配置文件、开机自启动、管理界面等待。限于篇幅,我会在后文中介绍。

参考资料
  1. https://openwrt.org/docs/guide-developer/using_the_sdk
  2. https://openwrt.org/docs/guide-developer/helloworld/start
  3. https://github.com/mwarning/openwrt-examples

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据