openWrt编译package

本文介绍了一个名为cJSON_main的软件包构建过程,包括其目录结构、Makefile配置及编译步骤。该包用于打印特定消息,并展示了从源代码到可执行文件的整个构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • package目录里文件的放置结构,以cJSON_main为准
package/
├── cJSON_main
│   ├── Makefile
│   └── src
│       ├── bin
│       ├── cJSON_main
│       ├── include
│       │   └── cJSON.h
│       ├── Makefile
│       ├── obj
│       └── src
│           ├── cJSON.c
│           └── cJSON_main.c
├── helloworld
│   ├── Makefile
│   └── src
│       ├── helloworld.c
│       └── Makefile
├── Makefile
└── zigbeeservice
    ├── file
    │   ├── cloud
    │   ├── config_status
    │   ├── iot.crt
    │   ├── restar_service
    │   ├── set_ap
    │   ├── set_sta
    │   ├── zha_config
    │   ├── zha_start
    │   ├── zigbeeserviceStart.sh
    │   └── zigbeeserviceStop.sh
    ├── Makefile
    ├── si
    │   ├── sdk--demo.IAB
    │   ├── sdk--demo.IAD
    │   ├── sdk--demo.IMB
    │   ├── sdk--demo.IMD
    │   ├── sdk--demo.PFI
    │   ├── sdk--demo.PO
    │   ├── sdk--demo.PR
    │   ├── sdk--demo.PRI
    │   ├── sdk--demo.PS
    │   ├── sdk--demo.SearchResults
    │   └── sdk--demo.WK3
    └── src
        ├── aes.c
        ├── aes.h
        ├── cJSON.c
        ├── cJSON.h
        ├── defines.h
        ├── include
        │   ├── alink_export_zigbee.h
        │   ├── cJSON.h
        │   ├── hal_types.h
        │   ├── platform.h
        │   ├── types.h
        │   ├── uart.h
        │   ├── user_api.h
        │   ├── user_cb.h
        │   ├── user_types.h
        │   └── zigbeezap.h
        ├── libshuncomzigbee.so
        ├── Makefile
        ├── mqtt.c
        ├── mqtt.h
        ├── ubus.c
        ├── ubus.h
        ├── zha_strategy.c
        ├── zha_strategy.h
        └── zigbeeservice.c

  • 外层Makefile

include $(TOPDIR)/rules.mk

PKG_NAME:=cJSON_main
PKG_RELEASE:=1


PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)


include $(INCLUDE_DIR)/package.mk

define Package/cJSON_main
        SECTION:=utils
        CATEGORY:=Utilities
        TITLE:=cJSON_main -- prints a snarky message
endef


define Package/cJSON_main/description
        >>>>>>>>>It is walter`s cJSON_main package demo.<<<<<<<<<
endef

define Build/Prepare
    echo "Here is Package/Prepare"
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

#define Build/Compile
#   $(MAKE) -C $(PKG_BUILD_DIR) \
#       $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include"
#endef

define Package/cJSON_main/install
    echo "Here is Package/install"
    $(INSTALL_DIR) $(1)/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/cJSON_main $(1)/bin/
endef


$(eval $(call BuildPackage,cJSON_main))
  • 内层Makefile
CC:=gcc
CFLAGS:=-Iinclude 
CFLAGS+=-c
TARGET:=./cJSON_main
DEPEND:=obj/cJSON_main.o
DEPEND+=obj/cJSON.o


$(TARGET):$(DEPEND)
    $(CC) -o $@ $^ -lm

obj/%.o:src/%.c
    $(CC) -o $@ $(CFLAGS) $^ -Wall


clean:
    rm -fr $(DEPEND)
### 如何在OpenWRT中添加新的软件包 #### 准备工作 为了向 OpenWrt 添加新软件包,开发者通常会创建一个新的目录来容纳该软件包的相关文件。对于名为 `helloworld` 的简单示例外,结构如下所示[^3]: ``` helloworld/ ├── Makefile └── src ├── helloworld.c └── Makefile ``` 其中根目录下的 `Makefile` 是用于定义编译规则的关键配置文件。 #### 创建Makefile 编写适用于目标程序的顶层 `Makefile` 文件非常重要。此文件应遵循特定语法并包含必要的元数据以及构建指令。下面是一个简化版的例子,展示了如何设置这个重要的文件[^1]: ```makefile include $(TOPDIR)/rules.mk PKG_NAME:=helloworld PKG_VERSION:=1.0 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=Hello world example program endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) endef $(eval $(call BuildPackage,helloworld)) ``` 这段脚本指定了关于待打包的应用的一些基本信息,并且设定了编译过程中的具体操作。 #### 配置环境变量与工具链 确保已经安装好适合于所选架构的交叉编译器和其他依赖项。这一步骤可能涉及到下载预建好的 SDK 或者手动配置整个开发环境。 #### 执行编译命令 当一切准备就绪后,在源码树顶部执行相应的 make 命令即可触发仅对该单个软件包的构建流程。例如,如果想要单独构建 CUPS 软件包,则可以这样做: ```bash make package/cups/{clean,compile} V=s ``` 这里使用了大写的 `V=s` 参数让输出更加详尽以便调试之用;而花括号内的两个动作分别代表清理旧版本和实际编译最新代码。 #### 更新系统配置 一旦成功制作好了自定义固件映像或是独立 deb 包形式的新组件,就可以通过上传至路由器内部存储空间再利用 opkg 工具来进行在线安装。另外一种情况是在设备上直接修改 UCI 设置以反映新增服务的存在,比如更改 LAN 接口 IP 地址就需要这么做[^2]: ```bash uci set network.lan.ipaddr="192.168.2.1" uci commit ``` 上述命令序列完成了对指定网络接口地址属性值更新的动作,并保存变更到持久化数据库里去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值