文章目录

  • `.ipk` 文件
  • 编译准备
  • 编译 `.ipk` 文件
    • 更新 feeds
    • 配置平台
    • 获取交叉编译链
    • 添加需要编译的第三方软件包
  • 参考资料

.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 进行安装使用了

参考资料

  • 【OpenWrt】编译系统准备
  • 【Gitbook】建立编译环境
  • 【Github】OpenWrt
  • 【Github】MentoHUST-OpenWrt-ipk
  • 【Github】minieap-openwrt

本文作者: ywang_wnlo
本文链接: https://ywang-wnlo.github.io/posts/96a1807.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

【路由器】OpenWrt 手动编译 ipk相关推荐

  1. openwrt 下编译ipk

    openwrt插件都是以.ipk方式发布的,ipk可以直接通过opkg安装到系统.上文我们编译了简单的hello,本文探究hello.ipk的编译过程. 一. 环境准备 cd ~/openwrt/bi ...

  2. openwrt 遍译php_【教程笔记】用OpenWRT单独编译ipk插件

    hahaya说道: 你好 看了你的视频 请教下单独编译rosy遇到的问题 整体编译可以 单独编译包如下错误 求指导 make package/luci-theme-rosy/compile V=99 ...

  3. OpenWrt下载编译

    不想啰嗦直接肝,依次执行: git clone git://github.com/openwrt/openwrt.git cd openwrt ./scripts/feeds update -a ./ ...

  4. 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)

    NAS是我觉得家里必不可少的一台设备,NAS 全称 Network Attached Storage,即网络附加存储服务器,它通过自身的操作系统和 SMB/NFS/CIFS/FTP 等多种通信协议来给 ...

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

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

  6. linux下下载openwrt源码,OpenWrt下载编译

    不想啰嗦直接肝,依次执行: git clone git://github.com/openwrt/openwrt.git cd openwrt ./scripts/feeds update -a ./ ...

  7. Openwrt系统编译

    前言提示 事先了解openwrt系统,不单单要了解是mtk7620的芯片,更要了解路由器型号(HC5661) 推荐阅读: openwrt官网: https://openwrt.org/start?id ...

  8. linux内核centos6.9,CentOS6.9手动编译并更新Kernel内核版本

    Kernel是Linux操作系统的核心部分.它由操作系统中用于管理存储器.文件.外设和系统资源的那些部分组成.Kernel是操作系统的核心,掌控着所有硬件设备的控制权. 内核就是系统上面的一个文件,这 ...

  9. CentOS6.9下手动编译并安装Python3.7.0

    CentOS6.9默认安装的python版本为2.6.6,若想安装python3以上版本,只能手工编译安装 下面介绍Python-3.7.0版本的手动编译并安装的步骤 1.下载Python-3.7.0 ...

  10. 图解命令行手动编译构建一个win32汇编程序

    首先安装masm32 V11.0:安装完后出现下列对话框: 图没截好:下面图的 k. 是 link. :ktopPath是DesktopPath: 此段代码的含义是用WScript创建了一个快捷方式, ...

最新文章

  1. 省市县级联查询无刷新(转)
  2. 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组...
  3. MFC 不存在从 CString 到 char * 的适当转换函数
  4. poj 2415(BFS)
  5. Qt Remote Object(QtRO)给指定的客户端发送消息
  6. Pandas高级教程之:plot画图详解
  7. 数据特征分析-正太分布
  8. 课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现
  9. TypeScript 枚举(Enum)
  10. oracle中包含用什么函数,oracle中包含用什么函数 oracle数据包含有什么函数?
  11. IDEA插件系列(45):UUID Generator插件——UUID生成器
  12. 合唱队形(DP算法入门)
  13. 图像压缩算法python_Python基于opencv的图像压缩算法实例分析
  14. u邮件收件服务器密码是什么,U-Mail邮件服务器加密技术给邮件上安全锁
  15. 【C语言程序设计】基本算术运算
  16. ▷Scratch资讯丨华为达芬奇计划
  17. 微信好友列表服务器,微信小游戏如何实现邀请好友列表
  18. VAIO系统自带的娱乐媒体应用软件
  19. css阴影实现3D氛围重叠来回闪动文字
  20. Oracle定时job 规定时间调用存储过程 每天凌晨执行

热门文章

  1. gb28181简单实现sip信令服务器(java版基于springboot):二、sip摄像头注册(信令解读)
  2. 微机中锁存器和缓冲器的区别
  3. android关联发送程序,Android Handler机制之Message的发送与取出
  4. FCM算法理论及其Python实现
  5. 计算机硬件清理步骤,联想笔记本电脑清理灰尘详细步骤
  6. matlab锁相放大器,锁相放大器原理和模块实现与仿真.DOC
  7. 通信算法之三十:Turbo仿真链路开发基于《低压电力线宽带载波通信互联互通技术规范第4—1部分物理层通信协议》
  8. 用c语言编写一个汇编编译器,【提问】最早的汇编语言编译器如何诞生?
  9. mysql查询每个月入职人数_按年份统计入职人数sql语句
  10. 《好战略,坏战略》 摘记