热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于OpenWrt构建首个'HelloWorld'IPK应用

本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'HelloWorld'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。

搭建OpenWrt开发环境

为了能够在OpenWrt系统上部署自定义的应用程序,首先需要在Ubuntu操作系统上建立相应的开发环境。这里假设您已经完成了OpenWrt源码的下载,并正确设置了编译工具链。

创建'Hello World'程序

利用Notepad++或任何文本编辑器,创建一个简单的C语言程序,命名为hello_world.c。该程序将在OpenWrt设备上循环输出'Hello world!!!'及其计数,直到达到10次后重置计数器。将此文件放置于项目的src子目录下。

#include
#include
int main(int argc, char *argv[]) {
int i = 0;
while (1) {
printf("Hello world!!! %d\n", i);
i++;
if (i > 10) i = 0;
sleep(1);
}
return 0;
}

接下来,需要编写两个Makefile文件来指导编译过程。第一个Makefile位于src目录下,用于编译C源文件:

CC=gcc
CFLAGS=-Wall -O2
LDFLAGS=
all: hello_world
hello_world: hello_world.o
$(CC) $(LDFLAGS) hello_world.o -o hello_world
hello_world.o: hello_world.c
$(CC) $(CFLAGS) -c hello_world.c
clean:
rm -f *.o hello_world

第二个Makefile位于项目根目录,负责定义包的元数据和构建逻辑:

include $(TOPDIR)/rules.mk
PKG_NAME:=hello_world
PKG_VERSION:=1.0
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
define Package/hello_world
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Prints a 'Hello World' message
DEPENDS:=+libgcc
endef
define Package/hello_world/description
A simple 'Hello World' application for OpenWrt.
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/hello_world/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello_world $(1)/usr/bin/
endef
$(eval $(call BuildPackage,hello_world))

完成上述步骤后,将整个项目文件夹复制到OpenWrt源码树的packages目录下。接着,在OpenWrt源码根目录执行以下命令开始配置和编译过程:

make menuconfig

在弹出的菜单中选择'Utilities' -> 'M'标记'hello_world'。保存配置并退出。最后,通过执行:

make V=s

开始编译。编译成功后,您可以在指定的输出目录找到生成的IPK文件。

安装与测试

将生成的IPK文件通过SCP或其他方式传输至目标OpenWrt设备的临时目录(如/tmp)。在设备上执行以下命令进行安装:

opkg install /tmp/hello_world_1.0-1_mipsel_24kc.ipk

安装完成后,只需在命令行输入'hello_world'即可启动程序。您应能看到预期的输出信息。若需停止程序,可使用Ctrl+C。

结论

通过在Ubuntu主机上设置交叉编译环境,可以有效提高开发效率,避免在资源受限的目标设备上直接编译可能遇到的问题。此外,这种方式还有助于快速迭代开发流程,便于测试和调试不同版本的应用程序。


推荐阅读
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • Vue 项目构建与部署指南
    本文将指导您完成Vue项目的构建和部署过程,包括环境搭建、项目初始化及配置、以及最终的部署步骤。 ... [详细]
  • 本文探讨了前端包管理器的核心功能,包括注册机制、文件存储、上传下载、以及依赖分析等关键特性,并介绍了几种流行的前端包管理工具。 ... [详细]
  • 使用 Angular CLI 快速构建 Web 前端项目
    本文详细介绍如何利用 Angular CLI 的常用命令来搭建和管理 Angular 项目,包括项目创建、依赖管理、组件生成等核心操作。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 本文探讨了Java编程中MVC模式的优势与局限,以及如何利用Java开发一款基于鸟瞰视角的赛车游戏。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • 本文记录了Android学习的初期阶段,包括Android的基本架构、Dalvik虚拟机与JVM的区别、ADB工具的使用以及应用程序的打包安装流程。 ... [详细]
  • 本文详细介绍如何在Windows系统下使用VMware Workstation搭建虚拟环境,并在此环境中安装Linux操作系统,包括必要的准备步骤、虚拟机的安装及配置、Linux系统的安装等关键步骤。 ... [详细]
  • 随着毕业设计的结束,我终于有时间更新我的博客了。这次,我将分享如何在自己的服务器上搭建 Bitwarden,一个广受好评的开源密码管理工具。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统上快速安装和配置Bitnami版本的GitLab,包括下载安装文件、执行安装过程以及设置邮件服务等步骤。 ... [详细]
  • GNU GRUB(简称GRUB)是一个来自GNU项目的支持多启动的引导加载程序。它允许用户在同一台计算机上安装多个操作系统,并在启动时选择希望启动的系统。 ... [详细]
  • 本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ... [详细]
  • 探索Ubuntu One:Canonical推出的高效云服务
    Ubuntu One是由Ubuntu的操作系统提供商Canonical推出的一款综合性网络服务,旨在帮助用户存储、同步及分享文件。该服务不仅支持多种操作系统,还提供了丰富的功能以满足不同用户的需求。 ... [详细]
author-avatar
wsl伊人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有