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
文档与资源
- 官方文档:README.md
- 软件包开发指南:include/package.mk
- 现有软件包示例:package/utils/
通过本文的介绍,你已经掌握了ImmortalWrt软件包开发的基本流程。现在,你可以尝试将自己的应用程序打包成ImmortalWrt软件包,或者改进现有的软件包。祝你在ImmortalWrt的开发之路上一切顺利!如果你有任何问题,欢迎加入社区讨论。
点赞、收藏、关注三连,获取更多ImmortalWrt开发技巧!下期我们将介绍如何为软件包添加LuCI界面,敬请期待。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



