OpenWRT 添加第三方库

本文介绍如何在OpenWRT系统中手动添加开源库libcryptopp,包括创建目录、编写Makefile以及配置软件包的过程。通过具体步骤,读者可以了解在OpenWRT中集成第三方库的方法。

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

简介

在OpenWRT 中,它已经包含许多开源库,在make menuconfig -> Libraries 中可以看到,有很多库都已经添加了。
当要用的库在OpenWRT里找不到时,就需要自己添加了。这里总结一下我添加开源库的过程,以libcryptopp 为例。
在这里插入图片描述

添加开源库 licryptopp

  1. 在package/libs 目录下新建 licryptopp 目录
  2. package/libs/ licryptopp 新建 Makefile 内容如下:
include $(TOPDIR)/rules.mk

PKG_NAME:=libcryptopp
PKG_VERSION:=6.0.0
PKG_RELEASE:=1

PKG_SOURCE:=CRYPTOPP_6_0_0.tar.gz
PKG_SOURCE_URL:=https://github.com/weidai11/cryptopp/archive/
PKG_MD5SUM:=6e47719b4e7b0104a6c2313bc86ef548

PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_LICENSE:=LGPL-2.1

include $(INCLUDE_DIR)/package.mk

define Package/libcryptopp
  SECTION:=libs
  CATEGORY:=Libraries
  TITLE:=libcryptopp
  DEPENDS:=+libpthread 
endef

define Package/libcryptopp/description
  libcryptopp is added by me
endef

TARGET_CFLAGS += $(FPIC)

define Build/Prepare
	$(call Build/Prepare/Default)
	$(CP) $(PKG_BUILD_DIR)/../cryptopp-CRYPTOPP_6_0_0/* $(PKG_BUILD_DIR)
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr
	$(CP) $(PKG_INSTALL_DIR)/usr/local/* $(1)/usr/
endef

define Package/libcryptopp/install
	$(INSTALL_DIR) $(1)/usr/lib
	$(CP) $(PKG_INSTALL_DIR)/usr/local/lib/*.a $(1)/usr/lib/
endef

$(eval $(call BuildPackage,libcryptopp))

Makefile 说明

建立一个软件包不需要太多工作;大部分工作都隐藏在其它的 makefiles 中,编写工作被抽象成对几个变量的赋值。

PKG_NAME -软件包的名字, 在 menuconfig 和 ipkg 显示
PKG_VERSION -软件包的版本,主干分支的版本正是我们要下载的
PKG_RELEASE -这个 makefile 的版本
PKG_BUILD_DIR -编译软件包的目录
PKG_SOURCE -要下载的软件包的名字,一般是由 PKG_NAME 和 PKG_VERSION 组成
PKG_SOURCE_URL -下载这个软件包的链接
PKG_MD5SUM -软件包的 MD5 值
PKG_CAT -解压软件包的方法 (zcat, bzcat, unzip)
PKG_BUILD_DEPENDS -需要预先构建的软件包,但只是在构建本软件包时,而不是运行的时候。它的语法和下面的DEPENDS一样。

BuildPackage相关的宏

  • Package/
    描述软件包在menuconfig和ipkg中的信息,可以定义如下变量:

    • SECTION - 软件包类型 (尚未使用)
    • CATEGORY - menuconfig中软件包所属的一级目录,如Network
    • SUBMENU - menuconfig中软件包所属的二级目录,如dial-in/up
    • TITLE - 软件包标题
    • DESCRIPTION - 软件包的详细说明
    • URL - 软件的原始位置,一般是软件作者的主页
    • MAINTAINER - (optional) 软件包维护人员
    • DEPENDS - (optional) 依赖项,运行本软件依赖的其他包
  • Package/conffiles (可选)
    软件包需要复制的配置文件列表,一个文件占一行

  • Build/Prepare (可选)
    一组解包源代码和打补丁的命令,一般不需要。

  • Build/Configure (可选)
    如果源代码编译前需要configure且指定一些参数,就把这些参数放在这儿。否则可以不定义。

  • Build/Compile (可选)
    编译源代码命令。

  • Package/install
    软件安装命令,主要是把相关文件拷贝到指定目录,如配置文件。

  • Package/preinst
    软件安装之前被执行的脚本,别忘了在第一句加上#!/bin/sh。如果脚本执行完毕要取消安装过程,直接让它返回false即可。

  • Package/postinst
    软件安装之后被执行的脚本,别忘了在第一句加上#!/bin/sh。

  • Package/prerm
    软件删除之前被执行的脚本,别忘了在第一句加上#!/bin/sh。如果脚本执行完毕要取消删除过程,直接让它返回false即可。

  • Package/postrm
    软件删除之后被执行的脚本,别忘了在第一句加上#!/bin/sh。

为什么一些定义是“Package/“前缀,另一些定义却是”Build”前缀?这是因为我们支持一个特性:从单个源代码构建多个软件包。OpenWrt工作在一个Makefile对应一个源代码的假设之上,但是你可以把编译生成的程序分割成任意多个软件包。因为编译只要一次,所以使用全局的“Build”定义是最合适的。然后你可以增加很多“Package/“定义,为各软件包分别指定安装方法。建议你去看看dropbear包,这是一个很好的示范。

提示:对于所有在pre/post, install/removal脚本中使用的变量,都应该使用”KaTeX parse error: Can't use function '$' in math mode at position 5: “代替”$̲“。这是告诉make暂时不要解…“。 – 更多信息

在编辑好Makefile文件,并放到指定目录后,这个新的软件包将在下次执行make menuconfig时出现,你可以选择这个软件包,保存退出,用make编译。现在就把一个软件成功移植到OpenWrt中了!

参考资料:
OpenWrt Project: 创建软件包
https://openwrt.org/zh-cn/doc/devel/packages?s[]=build&s[]=prepare
OpenWrt Project: Creating packages
https://openwrt.org/docs/guide-developer/packages?s[]=pkg&s[]=fixup

### OpenWrt 添加 Wi-Fi 驱动的方法 对于希望向 OpenWrt添加特定 Wi-Fi 芯片组的支持,通常涉及多个步骤来确保驱动程序能够正常工作并集成到构建环境中。以下是针对不同情况下的处理方式: #### 使用预编译的闭源驱动 当目标设备使用的是联发科(MediaTek)Wi-Fi 芯片时,可以直接利用社区成员提供的闭源驱动包。这些驱动已经被优化用于某些型号如斐讯 K2P 的路由器,并且可以通过简单的命令将其加入到 OpenWrt 构建环境当中[^3]。 ```bash cp mtk_wifi_driver -rf /path/to/openwrt/package/kernel/ ``` 需要注意的是,尽管这种方法简单快捷,但在较新版本的 OpenWrt 上可能会遇到稳定性方面的问题。因此建议密切关注相关论坛上的讨论以及测试报告以获取最新的进展信息。 #### 移植开源或第三方驱动 如果打算支持其他类型的 Wi-Fi 卡,则可能需要从头开始移植相应的 Linux 内核模块至 OpenWrt 平台。特别是那些仅能在旧版内核中工作的驱动,往往还需要借助 `backport` 工具来进行适配操作[^4]。 ```bash git clone https://github.com/backports/backports.git cd backports make defconfig-$(uname -r) make sudo make install ``` 上述过程展示了如何下载、配置并安装适用于当前系统的 `backport` 模块;之后便可以根据实际需求选取合适的上游仓地址拉取所需的 Wi-Fi 驱动源码,并按照官方文档说明完成进一步的修改与调整直至成功编译入固件之中。 #### 自定义镜像制作流程简介 为了简化整个开发周期内的重复劳动量,还可以考虑创建一个自定义化的 OpenWrt 安装映像文件。通过这种方式可以在不影响主线分支的前提下自由增删各类组件和服务功能,从而更好地满足个性化应用场景的要求[^1]。 ```bash ./scripts/feeds update -a make menuconfig make V=s ``` 以上指令序列依次完成了更新软件索引表、选择所需特性开关项以及启动正式打包任务的功能调用动作。其中特别强调了 `-s` 参数的作用在于开启详细的日志记录模式以便于后期排查可能出现的各种异常状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值