openwrt开发--应用程序IPK包开发
今天开始,抽时间回归一下本行,嵌入式的开发,之前的工作很多时候都用到了这个OpenWRT系统。
OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。 同时,它还提供了100多个已编译好的软件,而且数量还在不断增加,而OpenWrt SDK 更简化了开发软件的工序。
说的直白一点,还不是因为免费好用。
其他的不说,OpenWRT有一个非常有特点的东西,叫做IPK软件包,就像我们windows的安装软件一样,开发出来之后,可以直接安装到目标机器当中,非常的yin性。当然也会受到架构影响,跨了平台可能需要重新编译
今天就示范一下如何开发一款这样的IPK软件。
环境准备
首先需要一套完整OpenWRT的开发环境,包括编译主机,整套的OpenWRT源码,以及针对自己的开发板,配置好对应的配置文件,一句话,就是拥有一个能够编译出你自己开发板镜像的编译环境。
这个一般提供给你开发板的说明中,都会包含如何搭建这个开发环境,这里就不做介绍了。
模块功能
今天我这里要开发的是款能够帮助我们远程控制OpenWRT系统的软件,我们的监控PC(windows系统)能够在不远程登录目标开发板的情况下,控制目标开发板。原理很简单,就是目标开发板主动发起连接到监控PC,能够远程执行监控PC下发的命令,并且能够将结果传输回来。这样就不再需要目标开发板开放防火墙端口了,这在某种情况下还是比较有使用价值的。
代码结构
整体代码放置在一个目录当中,需要上传至编译路径根目录下的package/utils路径下,
我们将模块命令为jwdlh
那么整个代码结构如下
lede_AR9331_zhuotk_source_32bit$ tree package/utils/jwdlh/
package/utils/jwdlh/
├── Makefile 编译IPK的Makefile
└── src├── cbi│ └── jwdlh.lua 这个是配置页面├── config│ └── jwdlh 这个是配置文件,用来保存参数使用├── controller│ └── jwdlh.lua 这个是页面菜单配置├── init.d│ └── jwdlh_service 这个是启动脚本原型├── jwdlh.c 源代码├── Makefile 编译源码Makefile└── rc.d└── S80jwdlh_service -> ../init.d/jwdlh_service 这个是启动脚本
详细来说一下各部分的代码
1.外部的Makefile
include $(TOPDIR)/rules.mk这里定义了安装包的名字,版本,编译路径
PKG_NAME:=jwdlh
PKG_VERSION:=1.0
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)include $(INCLUDE_DIR)/package.mk
定义了在menuconfig的时候,出现在的位置,以及标题
define Package/jwdlh
SECTION:=base
CATEGORY:=Utilities
TITLE:=beat tiger tonight
endef定义了简介内容
define Package/jwdlh/description
this is a description
endef这里是编译准备阶段的操作
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef这里是安装阶段的操作,包括各种拷贝文件
define Package/jwdlh/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/jwdlh $(1)/bin/$(INSTALL_DIR) $(1)/etc/config
$(CP) $(PKG_BUILD_DIR)/config/* $(1)/etc/config
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi
$(CP) $(PKG_BUILD_DIR)/cbi/* $(1)/usr/lib/lua/luci/model/cbi
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
$(CP) $(PKG_BUILD_DIR)/controller/* $(1)/usr/lib/lua/luci/controller
$(INSTALL_DIR) $(1)/etc/init.d
$(CP) $(PKG_BUILD_DIR)/init.d/* $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/rc.d
$(CP) $(PKG_BUILD_DIR)/rc.d/* $(1)/etc/rc.d
endef这里是执行编译
$(eval $(call BuildPackage,jwdlh))
2.内部的Makefile
all: jwdlh
jwdlh: jwdlh.o$(CC) $(LDFLAGS) jwdlh.o -o jwdlh
helloworld.o: jwdlh.c$(CC) $(CFLAGS) -c jwdlh.c
clean:
rm *.o jwdlh
就是一个非常典型的Makefile过程。
3.cbi下的lua
local m, s, o1, o2, t配置文件选择jwdlh
m = Map("jwdlh", "远程监控配置", "本配置页面用于配置远程监控")
s = m:section(TypedSection, "jwdlh")
s.anonymous = true
s.addremove = false标签页
s:tab("general", translate("General Settings")) 两个参数,分别是rip和rport
s:taboption("general", Value, "rip", "远程主机地址:", "远程主机ip地址")
s:taboption("general", Value, "rport", "端口:", "远程主机监听端口")
return m
4.controller下的lua
module("luci.controller.jwdlh", package.seeall)
function index()配置路径在根目录,服务下面entry({"admin", "services", "jwdlh"}, cbi("jwdlh"), _("远程监控"), 100)
end
5.配置文件jwdlh
config jwdlh 'jwdlh'option rip '192.168.101.68'option rport '8866'
6.启动脚本原型
#!/bin/sh /etc/rc.commonSTART=90
STOP=10
USE_PROCD=1
PROG=/bin/jwdlh校验参数的函数
validate_jwdlh_section() {uci_validate_section jwdlh jwdlh "${1}" \'rip:string' \'rport:string'
}
启动函数
start_service() {local rip rport读取两个参数到 rip和rport中validate_jwdlh_section jwdlh || {echo "validation failed"return 1}启动可执行服务程序procd_open_instanceprocd_set_param command $PROG "$rip" "$rport"procd_set_param respawnprocd_close_instance
}
停止函数
stop_service()
{service_stop ${PROG}
}服务触发函数
service_triggers()
{procd_add_reload_trigger "jwdlh"procd_add_validation validate_jwdlh_section
}
7.启动脚本
就是启动脚本原型的链接文件。
8.源代码jwdlh.c
原理就是不断去连接一个远程服务器,然后接收消息,再将其执行结果返回回去。代码就不贴了,后续提供下载。
编译及安装
在根目录执行
make menuconfig
进入
选择我们的模块
,这里也就知道了为啥模块叫jwdlh
然后,保存配置,退出menuconfig,执行
make V=s
最后在下面会生成我们的ipk文件
./bin/packages/mips_24kc/base/jwdlh_1.0_mips_24kc.ipk
然后我们将文件拷贝到开发板
执行安装命令
opkg install 文件名称
修改重编译及再安装
需要删除之前的历史文件
rm -rf build_dir/target-mips_24kc_musl/jwdlh/
再执行
make V=s
然后卸载旧文件
opkg remove jwdlh
再次重新安装即可更新
整体效果
页面效果
进程
windows上位机
真对这个功能,可以开发一个上位机软件,以图形化界面,方面用户操作
当有用户上线时,会弹出提示,然后输入命令,可以得到返回结果
这个部分需要另写一篇文章来介绍windows系统下MFC类型上位机软件开发。
结尾
内部有一些文件,例如lua的页面,这个需要多做修改,才能大概理解每个语句的意思。
IPK全部代码下载链接
IPK源码压缩包
上位机软件代码下载链接
上位机源码压缩包
今天看到申请北京的工作居住证的条件和时间,也是越来越严格,时间也越来越长了。外地人在北京的生存,很大一部分会随着孩子的出生,长大,开始发生位置的转变,有的夫妻分离,有的举家回乡,也有的开始长距离通勤。
看到一条新闻,是关于银行招聘的,一个人去面试,发现去的全是985,211的本科和研究生,就像之前那些去烟草公司的一样,有人说未来30年,银行都会是一个利好的行业。可是华夏奋起的年代,靠的都是贷款吗?
算了,他们内卷就内卷去吧,反正我还是学习和读书。因为
读书能破万卷!!
openwrt开发--应用程序IPK包开发相关推荐
- openwrt的luci应用ipk包开发(一)
一.LUCI界面 OpenWrt 的界面其实就是网页界面,默认是由 uhttpd 服务器承载,之所以叫做 LUCI ,因为这是使用 Lua 脚本编写的控制界面,全称 Lua Unified Confi ...
- openwrt的luci应用ipk包开发(二)
界面脚本与配置文件是对应关系,将关联的配置文件 /etc/config/samba4 内容贴出来,两相对照才能更准确的理解各个参数的意义. config sambaoption name 'OpenW ...
- openwrt的luci应用ipk包开发(三)
luci配置页面修改配置文件 先看看network的配置文件: config interface 'loopback' option ifname 'lo'option proto 'static' ...
- 定制化开发小程序与模板开发小程序的区别?
随着小程序关注度的持续走高,越来越多的企业商家开始涌入这片流量红海抢占商机,都想用微信小程序给自己带来红利,但在小程序开发之前,很多人会纠结,深圳小程序模板开发和深圳小程序定制开发,该怎么选? 今天, ...
- python开发安卓程序-用python开发android应用(1)
Python是动态语言,比较简洁.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid提供了在android平台上对python语言的支持:CL ...
- java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级
大学的时候对web开发很感兴趣,对网页中的动画,对用户注册,对网页中表格填写等等都倍感兴趣.加之又有专业课程编程语言java,因此,对java web产生了浓厚的兴趣,再加之有北京圣思园 风中叶 大师 ...
- 小游戏开发 小程序app游戏开发 H5小游戏开发
目前有很多人对小游戏的理解都不同,有的人认为小游戏是H5嵌入形式的,也有的人认为小游戏是就几兆的程序 其实大家认为的都是正确的,没有任何问题.那么今天给大家讲下小游戏之间的区别 1.H5小游戏嵌入:这 ...
- java开发什么程序_java可以开发哪些软件
原标题:java可以开发哪些软件 郑州达内培训:学完java是能干什么,java能干什么 Java 能做的事情很多,涉及到编程领域的各个方面. ➢桌面级应用:尤其是需要跨平台的桌面级应用程序. 桌面级 ...
- 3000门徒内部训练绝密视频(泄密版)第8课:彻底实战详解使用IDE开发Spark程序
彻底实战详解使用IDE开发Spark程序 使用IDE开发Spark分析 使用IDE开发Spark实战 使用IDE开发Spark的Local和Cluster 开发两种选择:IDEA.Eclipse 下载 ...
- 上架google play 游戏aab包开发到上线
前言 各位同学大家好,有几天没给各位更新文章了,具体多久我也不记得哈,最近因为最近个人状态也不怎么好 不过现在调整好了,各位网友不用担心哈.今天就给各位分享一些上架google 商店的aab开发到上线 ...
最新文章
- Javascript变量的注意要点
- Redis Scan命令
- 聊聊 MySql 索引那些事儿
- mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示
- xcode 可以打开xmind_原来xmind还有一款如此漂亮的思维导图工具
- Python语法中的模糊语义,你知道吗?
- Activiti源码 之工厂模式
- C#比较运算符及解析
- H.264码率控制机制
- 为什么薄膜干涉的厚度要很小_薄膜干涉的膜为什么不能太厚?
- git clone server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile
- 概率论与数理统计在计算机知识的应用,概率论与数理统计在生活中的应用 (5)...
- HTML5+CSS:03优惠券
- LS-DYNA系列_Mie-Gruneisen状态方程
- 邮箱被国际反垃圾邮件组织拉黑的解决方法
- 【读书笔记】巴比伦富翁的理财课
- Go语言自学系列 | golang包管理工具go module
- 相对路径遍历Relative Path Traversal
- linux下添加用户并开通samba访问
- 未明学院学员报告:“民以食为天”?看了这份天猫超市数据分析报告你就知道了!