Openwrt 构建Hello ipk

我们在实际工作中,会开发自己的功能模块

对于 Openwrt来讲其方便就是可以像 ko 档一样随时进行安装与卸载

那么对于Openwrt来讲,也有一套”标准“的新增步骤:

1. 在 package 目录下新增模块目录: hello

2. 添加对应的文件,像这样

files:存放配置文件以及启动脚本

        配置文件:定义的内容就是 uci 格式

config globals 'globe'
	option agent 'openwrt'
	option url 'http://192.168.100.115:8080'
	option delay '10'

        源码通过调用自定义API

 将配置存放到 

int read_conf( struct Hello *hello)
{
    struct uci_context *ctx = uci_alloc_context(); 
    if (!ctx)
    {
        fprintf(stderr, "No memory\n");
        return 1;
    }

    getValue(ctx, "agent", hello->agent, sizeof(hello->agent)); 
    getValue(ctx, "url", hello->url, sizeof(hello->url)); 
    char delay[20];
    getValue(ctx, "delay", delay, sizeof(delay)); 
    hello->delay = atoi(delay); 

    uci_free_context(ctx); 
    return 0;
}
 

        后续就可以通过结构体来操作

        启动脚本:

#!/bin/sh /etc/rc.common
 
USE_PROCD=1
START=15
STOP=85
PROG=/bin/hello
 
validate_hello_section()
{
	uci_validate_section hello globals globe \
	'delay:range(1,200)' 
}
 
start_service() {
	echo "start HelloRoute!"
	validate_hello_section || {
	echo "hello validattion failed!"
	return 1
	}
 
	procd_open_instance
	procd_set_param command "$PROG" –f -w bjbook.net
	procd_set_param respawn
	procd_close_instance
}
 
service_triggers()
{
	procd_add_reload_trigger "hello"
}
 
reload_service()
{
	stop
	start
}

         START, STOP变量:决定了脚本执行的顺序

        start(),stop():决定如何启动和停止服务。我们在这里直接调用了 hello 模块,所以开机就会启用 hello

        custom():扩展命令使用,这里暂时不用

src:存放源码,以及对应 Makefile(仅用于编译源码)

all:
	$(CC) $(CFLAGS) -luci hello.c -o hello

clean:
	rm *.o hello

顶层 Makefile:包含编译及安装指令,控制代码在 openwrt 环境下的编译及生成安装包

        1. mk 文件引入,定义软件包 名字,版本

include $(TOPDIR)/rules.mk 
 
PKG_NAME:=hello
PKG_RELEASE:=1.0

        2. 设置软件包分类,这样 make menuconfig 时我们可以在对应类别里找到

            设置依赖变量 libuci,这样源码可以调用 UCI 接口

                语法使用:+库名,表示如果选择软件包时,该库会被自动选择

define Package/$(PKG_NAME)
	SECTION:=net
	CATEGORY:=Network
	TITLE:=Hello utility
	DEPENDS:=+libuci
	URL:=https://blog.csdn.net/mrbone9?spm=1008.2028.3001.5343
	MAINTAINER:=31642407@qq.com
endef

        3. 编译部分:创建编译目录,拷贝代码到该目录 

                build_dir/target-i386_pentium4_musl/hello

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

        5. 安装部分:$(1) 表示传入的第一个参数

define Package/$(PKG_NAME)/install
	$(INSTALL_DIR) $(1)/etc/config
	$(INSTALL_CONF) ./files/hello.conf $(1)/etc/config/hello
	
	$(INSTALL_DIR) $(1)/etc/init.d
	$(INSTALL_BIN) ./files/hello.init $(1)/etc/init.d/hello
	
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/sbin/hello
endef

         6. 打包

$(eval $(call BuildPackage,$(PKG_NAME)))

编译:

各文件准备好了就可以开始编译了,记得我们设定了类别,那么通过菜单就可以选定该模块

$ make menuconfig

     

$ make package/hello/compile V=s

 完成后可以看见生成的软件包

安装:

拷贝 ipk 到 Openwrt 运行的 OS

 卸载:

安装的 ipk 可以通过下面命令查看实际名称

调用 opkg 来进行卸载

 opkg 就是一个软件包管理工具,可以回车查看具体命令

通过上述步骤我们就构建出自己的软件包,操作部分简单到此

后续章节会来研究代码框架,UCI,ubus,procd等待内容 

查看更多Openwrt笔记

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
离线安装OpenWRTIPKOpenWrt Package Kit)包通常是在没有网络连接的情况下更新或添加软件包的步骤,因为IPK文件包含了预编译的软件包。下面是基本的离线安装过程: 1. **下载所需IPK文件**: - 首先,你需要知道你要安装的具体IPK包的名字以及其版本。访问OpenWRT的软件仓库(如https://downloads.openwrt.org/固件/packages/)找到对应包的URL和版本。 - 下载到你的本地存储设备,比如电脑或者USB驱动器。 2. **将IPK文件复制到OpenWRT设备**: - 如果你的OpenWRT设备可以通过USB或SD卡接入电脑,直接将IPK文件复制到相应位置。 - 或者,如果设备支持TFTP传输,你可以设置TFTP服务器并将IPK文件放在服务器上,然后设备通过TFTP行下载。 3. **配置OpenWRT**: - 登录到OpenWRT的终端或Web界面,入`opkg`命令行工具。 - 使用`opkg update`(注意这一步通常需要网络,但如果之前已经下载了索引文件,则可以忽略)确保系统知道在哪里查找软件包。 - 如果`opkg update`提示没有可用的索引,使用`opkg setsrc`指定你的本地目录作为新的源,例如`opkg setsrc local /path/to/downloaded/ipk/`。 4. **安装IPK包**: - 使用`opkg install [package-name]`命令安装你的IPK文件。记得替换`[package-name]`为你要安装的具体包名。 5. **确认安装**: - 安装完成后,检查是否成功通过`opkg list-installed`命令查看新安装的包是否在列表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值