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


推荐阅读
  • OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文详细记录了在Ubuntu 9.10操作系统上从零开始搭建LAMP(Linux, Apache, MySQL, PHP)环境的过程,包括遇到的问题及解决方案。旨在为初次尝试搭建LAMP环境的开发者提供参考。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 本文介绍了在Makefile及Android.mk文件中添加打印输出信息的方法,并详细解析了Android编译过程中的关键步骤,包括环境变量的设置与编译脚本的执行。 ... [详细]
  • QEMU环境下加载首个Linux驱动模块
    本文介绍了如何在Ubuntu 20.04系统上使用QEMU虚拟机加载一个简单的Linux驱动模块。此过程涉及Linux内核4.0版本的配置与编译。 ... [详细]
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社区 版权所有