.ipk 文件

.ipk 文件是可以通过 OpenWrt 的包管理软件 opkg 直接安装,好比 .deb 文件与 apt 的关系。虽然官方的软件仓库已经很丰富了,但是有时仍然需要从源码编译一些第三方的软件使用,例如锐捷认证等

但是由于路由器平台通常与常用的服务器或者个人 PC 的处理器架构不同,并且路由器的处理器本身性能较弱,几乎不可能直接在路由器上进行编译生成 .ipk 文件,因此需要交叉编译来实现

而官方的 OpenWrt 仓库就提供了一个方便使用的交叉编译环境

编译准备

以 Debian / Ubuntu 为例,参考官网给出的要求,可以通过下面命令来进行安装依赖包

sudo apt update
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev

安装/更新好这些依赖之后,就可以通过 git 拉取 OpenWrt 仓库了

git clone https://git.openwrt.org/openwrt/openwrt.git

通常由于仓库较大以及网速问题,可能会需要很久,其实可以通过 --depth 来限制拉取的仓库深度,或者通过镜像站来加速拉取,当然也可以两者同时采用

git clone https://git.openwrt.org/openwrt/openwrt.git --depth=1
# cnpmjs.org 已经不能使用,请自行寻找其他镜像站
# git clone https://git.openwrt.org.cnpmjs.org/openwrt/openwrt.git
# git clone https://git.openwrt.org.cnpmjs.org/openwrt/openwrt.git --depth=1

编译 .ipk 文件

更新 feeds

进入 openwrt 仓库后,首先需要更新软件包列表 feeds,它是在 OpenWrt 中共用位置的包的集合。运行以下命令即可更新内置软件包列表并链接到编译工具中:

cd openwrt/
./scripts/feeds update
./scripts/feeds install

配置平台

make menuconfig

通常使用图形化菜单界面来进行配置编译选项,依次配置处理器架构、具体的处理器型号以及设备

以小米 mini 路由器为例,应该将他们配置成如下图所示

获取交叉编译链

这一步就是获取对应设备交叉编译所需的编译链

make tools/install V=s -j$(grep processor /proc/cpuinfo | wc -l)
make toolchain/install V=s -j$(grep processor /proc/cpuinfo | wc -l)
  • V=s 可以显示 make 过程中的所有输出,方便定位当前是否卡在了某一步骤上
  • -j$(grep processor /proc/cpuinfo | wc -l) 则是根据机器的 CPU 数量来进行多线程编译

添加需要编译的第三方软件包

可以先搜索有没有已经配置好的含有 Makefile 的仓库,有了适配过的 Makefile 文件就可以很方便的来编译源码生成 .ipk 文件了

以 minieap 为例,github 上有已经完成的仓库,依次可以直接拉取来编译

git clone https://github.com/BoringCat/minieap-openwrt.git package/minieap

在拉取完成仓库后,就可以再次配置编译选项,将需要编译成 .ipk 的功能配置成模块编译,也就是标记成 M

make menuconfig

对于 minieap 来说,在 Network 找到对应选项并配置成 M 即可,如下图

配置完成后就可以进行编译了,编译命令也很简单,以 minieap 为例如下所示

make package/minieap/compile V=s -j$(grep processor /proc/cpuinfo | wc -l)

编译完成后,.ipk 文件会生成在 ./bin/packages/<YourArchitecture>/base 目录下,将其拷贝到路由器上就可以通过 opkg 进行安装使用了

参考资料

本文作者: ywang_wnlo

本文链接: https://ywang-wnlo.github.io/posts/96a1807.html

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

【路由器】OpenWrt 手动编译 ipk的更多相关文章

  1. OpenWrt镜像编译和ipv6支持

    离成功实现路由器刷OpenWrt.接入校园网差不多一年了.路由工作比较稳定,还是很满意的. 这次回来有个新发现:学校有原生ipv6支持,在win7和ubuntu下什么都不用设置,自动获取global ...

  2. openwrt(二) 配置openwrt及编译

    导航 1. 配置openwrt 2. 编译openwrt 3. 错误记录 1. 配置openwrt 在openwrt的根目录下,执行make menuconfig. 这个界面我也只是了解了这两个选项而 ...

  3. 路由器OpenWrt如何脱机(离线)下载BT文件

    路由器OpenWrt如何脱机(离线)下载BT文件 1.首先到如下网址下载OpenWrt固件(确保为路由器正确型号). http://downloads.openwrt.org/snapshots/tr ...

  4. ffmpeg为视频添加时间戳 - 手动编译ffmpeg

    FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...

  5. Lua手动编译姿势

    LUA-5.3.3.tar.gz Lua源码+链接2016年5月30日更新 手动编译姿势: 已经装有VS2010 使用VS自带的 cl.exe以及 VS命令簿 打开文件地址 运行自己的bat文件 my ...

  6. Sass中文乱码问题(手动编译和watch编译)

    一.sass手动编译出错 .scss文件中含有中文的时候编译报错(比如注释,比如字体栈),比如: foo.scss: 编译: 解决办法: 找到类似这个的路径的文件(仅供参考,不同环境可能不同): C: ...

  7. CentOS手动编译安装gcc

    最近尝试了fedora.ubuntu.mint.debian.opensuse等多种linux发行版,与CentOS比较之后还是感觉之前用的CentOS比较熟悉,比较习惯.现在CentOS的最新版本为 ...

  8. LNAMP服务器环境搭建(手动编译安装)

    LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...

  9. Javac 手动编译时,出现乱码或编码格式问题

    使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...

  10. linux 内核手动编译

    手动编译内核 编译时后应安装的支持yum install perlyum install bcyum insatll gcc-c++ .uname -r 先查看内核版本 .yum groupinsta ...

随机推荐

  1. 2021-11-27:给定一个数组arr,长度为N,做出一个结构,可以高效的做如下的查询: 1) int querySum(L,R) : 查询arr[L...R]上的累加和; 2) int query

    2021-11-27:给定一个数组arr,长度为N,做出一个结构,可以高效的做如下的查询: int querySum(L,R) : 查询arr[L-R]上的累加和; int queryAim(L,R) ...

  2. Python潮流周刊#1:如何系统地自学Python?

    这里记录每周值得分享的 Python 及通用技术内容,部分内容为英文,已在小标题注明.(本期标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.编程语言的错误处理模式 ...

  3. Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队

    1 引言 大家好,接着上次和大家一起学习了<MySQL DDL执行方式-Online DDL介绍>,那么今天接着和大家一起学习另一种MySQL DDL执行方式之pt-soc. 在MySQL ...

  4. C++温故补缺(二十一):杂项补充2

    杂记2 explicit 在 C++ 中,explicit 是一个关键字,用于修饰类的构造函数,其作用是禁止编译器将一个参数构造函数用于隐式类型转换.具体来说,当一个构造函数被 explicit 修饰 ...

  5. ImageMagick 图像处理学习笔记

    Use ImageMagick to create, edit, compose, or convert bitmap images. It can read and write images in ...

  6. vue 自己实现一套 keepalive 方案

    vue自定义keepalive组件 前一阵来了一个新的需求,要在vue项目中实现一个多开tab页面的功能,本来心想,这不简单嘛就是一个增加按钮重定向吗?(当然如果这么简单我就不写这个文章了).很快写完 ...

  7. 翻车了,被读者找出 BUG

    大家好呀,我是小楼. 本文是上篇文章<使用增强版 singleflight 合并事件推送,效果炸裂!>的续集,没看过前文必须要先看完才能看本文,实在不想看,拉到文章末尾,给我点个赞再退出吧 ...

  8. 看懂java序列化,这篇就够了

    前言 相信大家日常开发中,经常看到 Java 对象 "implements Serializable".那么,它到底有什么用呢?本文带你全方位的解读序列化与反序列化这一块知识点. ...

  9. 「学习笔记」CDQ分治

    CDQ 分治的思想最早由 IOI2008 金牌得主陈丹琦在高中时整理并总结,目前这个思想的拓展十分广泛. 优点:可以将数据结构或者 DP 优化掉一维 缺点:这是离线算法. 引入 让我们来看一个问题 有 ...

  10. 采集douban

    # -*- coding: utf-8 -*-"""Created on Thu Oct 31 16:14:02 2019 @author: DELL"&quo ...