ImmortalWrt软件包开发入门:从零开始创建你的第一个包

ImmortalWrt软件包开发入门:从零开始创建你的第一个包

【免费下载链接】immortalwrt An opensource OpenWrt variant for mainland China users. 【免费下载链接】immortalwrt 项目地址: https://gitcode.com/GitHub_Trending/im/immortalwrt

你还在为找不到适合自己路由器的软件包而烦恼吗?想为ImmortalWrt贡献自己的力量却不知从何下手?本文将带你从零开始,一步步完成你的第一个ImmortalWrt软件包开发,无需复杂的编程背景,只需跟随指引操作即可。读完本文,你将掌握软件包的基本结构、Makefile编写、编译测试等核心技能,轻松将自己的应用程序打包成ImmortalWrt可用的ipk文件。

准备工作

在开始创建软件包之前,需要确保你的开发环境已经搭建完成。ImmortalWrt的构建系统需要在Linux环境下运行,推荐使用Debian或Ubuntu系统。

安装依赖

首先安装必要的依赖包,你可以通过以下命令快速安装:

sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
  bzip2 ccache clang cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext gcc-multilib \
  g++-multilib git gnutls-dev gperf haveged help2man intltool lib32gcc-s1 libc6-dev-i386 libelf-dev \
  libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses-dev libpython3-dev \
  libreadline-dev libssl-dev libtool libyaml-dev libz-dev lld llvm lrzsz mkisofs msmtp nano \
  ninja-build p7zip p7zip-full patch pkgconf python3 python3-pip python3-ply python3-docutils \
  python3-pyelftools qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo uglifyjs \
  upx-ucl unzip vim wget xmlto xxd zlib1g-dev zstd

或者使用官方提供的一键安装脚本:

sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)'

获取源码

克隆ImmortalWrt的源码仓库:

git clone -b master --single-branch --filter=blob:none https://gitcode.com/GitHub_Trending/im/immortalwrt
cd immortalwrt

更新并安装 feeds:

./scripts/feeds update -a
./scripts/feeds install -a

软件包基本结构

ImmortalWrt的软件包通常遵循一定的目录结构,一个典型的软件包目录如下:

package/
└── utils/
    └── hello-world/
        ├── Makefile
        ├── files/
        │   └── hello-world.init
        └── patches/
            └── 0001-fix-some-bug.patch
  • Makefile:软件包的核心文件,定义了包的元信息、编译规则等。
  • files/:存放配置文件、初始化脚本等。
  • patches/:存放需要应用到源代码的补丁文件。

创建你的第一个软件包

接下来,我们将创建一个简单的"hello-world"软件包,该包将安装一个简单的脚本,执行后输出"Hello, ImmortalWrt!"。

创建目录结构

首先在package/utils/目录下创建hello-world目录及其子目录:

mkdir -p package/utils/hello-world/files

编写Makefile

package/utils/hello-world/目录下创建Makefile文件,内容如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=hello-world
PKG_VERSION:=1.0
PKG_RELEASE:=1

PKG_MAINTAINER:=Your Name <your.email@example.com>
PKG_LICENSE:=GPL-2.0

include $(INCLUDE_DIR)/package.mk

define Package/hello-world
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=Hello World
  DESCRIPTION:=A simple hello world program for ImmortalWrt
endef

define Package/hello-world/description
  This is a simple hello world program for ImmortalWrt.
  It just prints "Hello, ImmortalWrt!".
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
endef

define Build/Compile
	# Nothing to compile, just a script
endef

define Package/hello-world/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) ./files/hello-world $(1)/usr/bin/
endef

$(eval $(call BuildPackage,hello-world))

让我们逐步解释这个Makefile的各个部分:

  • PKG_NAME:软件包名称,必须唯一。
  • PKG_VERSION:软件包版本号。
  • PKG_RELEASE:发布次数,每次修改包时递增。
  • SECTION:软件包类别,如utils、net等。
  • CATEGORY:更具体的分类,如Utilities、Network等。
  • TITLE:软件包简短标题。
  • DESCRIPTION:软件包详细描述。
  • Package/hello-world/install:定义安装规则,将文件复制到目标位置。

创建脚本文件

package/utils/hello-world/files/目录下创建hello-world脚本文件:

#!/bin/sh
echo "Hello, ImmortalWrt!"

给脚本添加可执行权限:

chmod +x package/utils/hello-world/files/hello-world

编译软件包

配置编译选项

运行make menuconfig命令进入配置界面,找到你创建的软件包并选中:

Utilities  --->
    <*> hello-world...................... A simple hello world program for ImmortalWrt

保存配置并退出。

编译软件包

使用以下命令单独编译hello-world软件包:

make package/utils/hello-world/compile V=s

V=s选项用于显示详细的编译输出,方便调试。

编译成功后,生成的ipk文件将位于bin/packages/<architecture>/base/目录下,例如:bin/packages/x86_64/base/hello-world_1.0-1_x86_64.ipk

测试软件包

安装软件包

将生成的ipk文件传输到你的ImmortalWrt设备上,使用opkg命令安装:

opkg install hello-world_1.0-1_x86_64.ipk

运行测试

安装完成后,在设备上执行hello-world命令:

hello-world

如果一切正常,将输出"Hello, ImmortalWrt!"。

软件包进阶

添加初始化脚本

如果你的软件包需要在系统启动时自动运行,可以添加初始化脚本。在files/目录下创建hello-world.init文件:

#!/bin/sh /etc/rc.common

START=99
STOP=10

start() {
    echo "Starting hello-world service"
    # Add your start commands here
}

stop() {
    echo "Stopping hello-world service"
    # Add your stop commands here
}

然后在Makefile的Package/hello-world/install部分添加:

define Package/hello-world/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) ./files/hello-world $(1)/usr/bin/
    $(INSTALL_DIR) $(1)/etc/init.d
    $(INSTALL_BIN) ./files/hello-world.init $(1)/etc/init.d/hello-world
endef

添加配置文件

如果需要配置文件,可以将其放在files/目录下,并在Makefile中安装到/etc/config/目录:

define Package/hello-world/install
    # ... 其他安装命令
    $(INSTALL_DIR) $(1)/etc/config
    $(INSTALL_CONF) ./files/hello-world.config $(1)/etc/config/hello-world
endef

文档与资源

通过本文的介绍,你已经掌握了ImmortalWrt软件包开发的基本流程。现在,你可以尝试将自己的应用程序打包成ImmortalWrt软件包,或者改进现有的软件包。祝你在ImmortalWrt的开发之路上一切顺利!如果你有任何问题,欢迎加入社区讨论。

点赞、收藏、关注三连,获取更多ImmortalWrt开发技巧!下期我们将介绍如何为软件包添加LuCI界面,敬请期待。

【免费下载链接】immortalwrt An opensource OpenWrt variant for mainland China users. 【免费下载链接】immortalwrt 项目地址: https://gitcode.com/GitHub_Trending/im/immortalwrt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值