今天开始,抽时间回归一下本行,嵌入式的开发,之前的工作很多时候都用到了这个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包开发相关推荐

  1. openwrt的luci应用ipk包开发(一)

    一.LUCI界面 OpenWrt 的界面其实就是网页界面,默认是由 uhttpd 服务器承载,之所以叫做 LUCI ,因为这是使用 Lua 脚本编写的控制界面,全称 Lua Unified Confi ...

  2. openwrt的luci应用ipk包开发(二)

    界面脚本与配置文件是对应关系,将关联的配置文件 /etc/config/samba4 内容贴出来,两相对照才能更准确的理解各个参数的意义. config sambaoption name 'OpenW ...

  3. openwrt的luci应用ipk包开发(三)

    luci配置页面修改配置文件 先看看network的配置文件: config interface 'loopback' option ifname 'lo'option proto 'static' ...

  4. 定制化开发小程序与模板开发小程序的区别?

    随着小程序关注度的持续走高,越来越多的企业商家开始涌入这片流量红海抢占商机,都想用微信小程序给自己带来红利,但在小程序开发之前,很多人会纠结,深圳小程序模板开发和深圳小程序定制开发,该怎么选? 今天, ...

  5. python开发安卓程序-用python开发android应用(1)

    Python是动态语言,比较简洁.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid提供了在android平台上对python语言的支持:CL ...

  6. java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级

    大学的时候对web开发很感兴趣,对网页中的动画,对用户注册,对网页中表格填写等等都倍感兴趣.加之又有专业课程编程语言java,因此,对java web产生了浓厚的兴趣,再加之有北京圣思园 风中叶 大师 ...

  7. 小游戏开发 小程序app游戏开发 H5小游戏开发

    目前有很多人对小游戏的理解都不同,有的人认为小游戏是H5嵌入形式的,也有的人认为小游戏是就几兆的程序 其实大家认为的都是正确的,没有任何问题.那么今天给大家讲下小游戏之间的区别 1.H5小游戏嵌入:这 ...

  8. java开发什么程序_java可以开发哪些软件

    原标题:java可以开发哪些软件 郑州达内培训:学完java是能干什么,java能干什么 Java 能做的事情很多,涉及到编程领域的各个方面. ➢桌面级应用:尤其是需要跨平台的桌面级应用程序. 桌面级 ...

  9. 3000门徒内部训练绝密视频(泄密版)第8课:彻底实战详解使用IDE开发Spark程序

    彻底实战详解使用IDE开发Spark程序 使用IDE开发Spark分析 使用IDE开发Spark实战 使用IDE开发Spark的Local和Cluster 开发两种选择:IDEA.Eclipse 下载 ...

  10. 上架google play 游戏aab包开发到上线

    前言 各位同学大家好,有几天没给各位更新文章了,具体多久我也不记得哈,最近因为最近个人状态也不怎么好 不过现在调整好了,各位网友不用担心哈.今天就给各位分享一些上架google 商店的aab开发到上线 ...

最新文章

  1. Javascript变量的注意要点
  2. Redis Scan命令
  3. 聊聊 MySql 索引那些事儿
  4. mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示
  5. xcode 可以打开xmind_原来xmind还有一款如此漂亮的思维导图工具
  6. Python语法中的模糊语义,你知道吗?
  7. Activiti源码 之工厂模式
  8. C#比较运算符及解析
  9. H.264码率控制机制
  10. 为什么薄膜干涉的厚度要很小_薄膜干涉的膜为什么不能太厚?
  11. git clone server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile
  12. 概率论与数理统计在计算机知识的应用,概率论与数理统计在生活中的应用 (5)...
  13. HTML5+CSS:03优惠券
  14. LS-DYNA系列_Mie-Gruneisen状态方程
  15. 邮箱被国际反垃圾邮件组织拉黑的解决方法
  16. 【读书笔记】巴比伦富翁的理财课
  17. Go语言自学系列 | golang包管理工具go module
  18. 相对路径遍历Relative Path Traversal
  19. linux下添加用户并开通samba访问
  20. 未明学院学员报告:“民以食为天”?看了这份天猫超市数据分析报告你就知道了!

热门文章

  1. Spring Initializr文档翻译及源码解读
  2. MTK平台sip信令的查看和volte的故障
  3. 怎么把ide改成ahci_阳光明媚-将IDE模式更改为AHCI模式的方法(不用重装系统)
  4. 中国生产力促进中心”十四五”规划与发展规模分析报告2022~2028年
  5. Unity 角度与旋转(四元数与欧拉角)
  6. 电厂计算机监控系统的结构及功能,水电厂计算机监控系统
  7. 内网端口映射工具之80端口映射和全端口映射及辅助发布网站应用
  8. 什么是分贝?如何计算声音分贝?一文解析Audition计算方法
  9. Photoshop cc2019 破解教程
  10. Xvid 进行视频编码