OpenWrt SDK 编译软件包(基础篇)

OpenWrt 是个非常好用且强大的 Linux 发行版,常用于路由器等嵌入式设备。之前我也写了不少关于 OpenWrt 的教程。

OpenWrt 和其他 Linux 发行版一样,都可以通过软件包源码编译适合自己设备运行的软件包,不过由于 OpenWrt 大部分运行于路由器,存储空间不充裕,并没有像其他 Linux 发行版那样附带 GCC 可以及时编译,不过 OpenWrt 提供了 SDK,可以使用其他 Linux 发行版来为 OpenWrt 编译软件包。

这篇教程就教大家如何使用 OpenWrt SDK 来为自己路由器的 OpenWrt 编译软件包,这样大家就可以自己编译一些开源项目或者是《OpenWrt 安装及配置 Aria2 教程》里面提到的完整版 Aria2 这种的。当然,同样适用于 LEDE 和 PandoraBox。

OpenWrt SDK 编译软件包

准备工作

首先需要一个 Linux 系统,不要使用 Windows10 的 Linux 子系统,要使用完整的 Linux 系统。

推荐使用 Deepin (深度 Linux),由国人团队开发,附带安装器,只需轻点几下鼠标,就可以完成双系统的安装。系统附带了 Chrome、QQ、网易云音乐等常用软件,不用担心不会使用 Linux 的尴尬。

系统安装后,打开终端 Ctrl + Alt + T ,依次输入:sudo apt-get update # 更新软件源sudo apt-get upgrade -y # 更新软件包sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db libncurses5-dev gawk gettext unzip file libssl-dev wget -y # 安装所需软件包,然后重启系统。

如果你使用 PandoraBox SDK 进行编译,推荐使用 Ubuntu 14.04 系统,或者使用我写的脚本来安装所需依赖库。

wget https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-sdk-package-foundation/PandoraBoxSDK_lib.tar.gz && tar zxf PandoraBoxSDK_lib.tar.gz && cd PandoraBoxSDK_lib && sudo ./install.sh

然后下载适合你路由器的 OpenWrt SDK,根据 CPU 架构和系统版本,比如 K3,CPU 架构是 bcm53xx,系统是 LEDE Snapshots,下载 bcm53xx 的 LEDE Snapshots SDK。

下载 SDK

将下载好的 SDK 解压,就可以开始编译软件包了。

编译软件包

打开 SDK 文件夹 → 右键空白处 → [在终端打开] → 依次输入 ./scripts/feeds update -a # 更新软件列表./scripts/feeds install -a # 安装软件列表make defconfig # 生成配置文件

PandoraBox SDK 默认没有软件列表配置文件,下载 https://cdn.mivm.cn/www.mivm.cn/archives/openwrt-sdk-package-foundation/feeds.conf.default 复制至 PandoraBox SDK 目录,执行更新和安装命令和 ./scripts/feeds uninstall base-files busybox freeswitch # 卸载不兼容的软件包

输入 make menuconfig 进入配置界面

界面操作

↑ ↓:目录选择

← →:功能选择

回车键:执行功能

Y: 选中

N:取消选中

Esc:返回

斜杠键:搜索

功能选项

Select (选择):这个选项下按回车才可以进入目录。

Exit (退出):和 ESC 键作用相同,返回上一级或退出。

Help (帮助):显示帮助信息。

Save (保存):保存当前配置信息变更,每次退出前记得保存一下。

Load (加载):加载其他配置文件,一般用不到。

目录后面有箭头都可以进入,前面有方括号的都可以选中。

接下来编译个自带软件列表的软件包,以完整版 Aria2 为例。

打开配置界面

依次进入 [Network] → [File Transfer]

Y 选中 Aira2

进入 [Aria2 Configuration]

有几个没有被启用的选项(功能),依次按 Y 选中启用

保存 → 退出

Aria2 配置

输入 make package/aria2/compile V=s 开始编译,耐心等待编译完成。如需编译其他软件包,把 aria2 改为对应的软件包名即可,前提是软件列表有对应软件包。

注:V=s的作用是输出详细信息

推荐使用代理加速软件包源码下载

如果你的 CPU 有多个线程,可以加上 -j线程数 来使用多线程编译,例如:make package/aria2/compile V=s -j4 # 启用4个线程

编译好的 ipk 文件可以在 bin/packages/arm_cortex-a9/packages 找到。当然,不同的软件包和 CPU 架构路径不一样,不过都在 bin/packages

有时候我们需要编译第三方软件包怎么办?接下来以 vlmcsd (KMS服务器) 为例,教大家编译第三方软件包。

输入 cd package # 进入 package 目录

git clone https://github.com/openwrt-develop/openwrt-vlmcsd.git # 获取 vlmcsd 源码git clone https://github.com/openwrt-develop/luci-app-vlmcsd.git # 获取 vlmcsd Luci 界面源码

cd .. # 返回上级(SDK)目录

make menuconfig

不知道软件包在那个分类怎么办?可以使用搜索功能,按斜杠键后输入关键字,然后找到我们需要的软件包,Location 就是软件包所在位置。

vlmcsd 在 Network → 找到软件包并选中

保存 → 退出

搜索软件包所在位置

输入 make package/openwrt-vlmcsd/compile V=s # 编译 vlmcsdmake package/luci-app-vlmcsd/compile V=s # 编译 Luci 界面。有小伙伴可能要问了,软件包名不是 vlmcsd 吗,为什么命令是 openwrt-vlmcsd ?

那个是源码文件夹名称,源码文件夹名称是 openwrt-vlmcsd,也可以把文件夹名称改下。

第三方软件包编译的 ipk 一般是在 bin/packages/arm_cortex-a9/base

适用于 OpenWrt SDK 编译第三方软件包可以在 GitHub 找到,你可以在搜索软件名称后面加上 openwrt,比如:”vlmcsd openwrt”。

常见问题

问:为什么我make menuconfig之后没有软件包?

答:需要更新 feed 列表源,./scripts/feeds update -a # 更新软件源./scripts/feeds install -a # 安装软件源

问:为什么我编译会报错?

答:详细查看输出信息,找出错误信息部分,并尝试解决,你也可以将错误信息截图至QQ群并@小山。

问:软件源没我需要的软件包怎么办?

答:可以参考上面编译 KMS 服务器的方法,去 GitHub 寻找对应的软件包,也可以点击网站底部的 GitHub 图标到小山的仓库里寻找。注意!我重点说一下,并不是随便一个程序的源码复制/克隆到 SDK 目录就可以进行编译的。首先,确保你准备编译的源码支持configuremake,然后,这份源码不是直接放在 SDK 目录的,而是要再写一个 Makefile 用于 SDK,告诉 SDK,你这个源码的下载地址、软件包名称、版本号、依赖项等等,然后软件包才可以显示在软件包列表里,才可以用上面的方法编译。关于怎么写这个 Makefile,可以参考http://wiki.openwrt.org/doc/devel/packages,相信稍微有点编程基础的人都看得懂。当然,也有不用写 Makefile 的方法,直接用工具链编译,不过这个也有点麻烦,暂且不讨论。

问:PandoraBox SDK 编译某些软件包报错怎么办?

答:PandoraBox SDK 编译某些软件包确实会报错,至于报错的原因,我还没搞懂,有搞懂的小伙伴欢迎留言给我。

如果你还有什么不懂的地方,欢迎在下方留言。


OK,以上就是使用 OpenWrt SDK 编译软件包教程基础篇,如果有哪里不懂或者哪里不对,可以留言给我或者加QQ群。

我会在进阶篇教大家如何编译其他的 Linux 开源软件,比如一些 Linux 软件虽然开源,不过并没有适用于 OpenWrt 编译的 Makefile,进阶篇会教大家制作 Makefile。写的时候发现涉及的难点太多,如果你想了解的话,可以去 QQ 群里找我。

微信公众号二维码

微信扫描二维码关注我们

点赞
  1. janusdai说道:

    请问 OpenWrt SDK在哪个链接下载的到,我在openwrt官网上没有找到 :redface:

    Google Chrome 64.0.3282.140 Google Chrome 64.0.3282.140 Windows 10 x64 Edition Windows 10 x64 Edition
    1. 小山说道:

      https://downloads.openwrt.org/releases/<version>/targets/<arch>/<model>/

      version:版本号
      arch:CPU架构
      model:CPU型号或者是 generic

      然后最下面就可以看到SDK

      Google Chrome 66.0.3359.181 Google Chrome 66.0.3359.181 Windows 10 x64 Edition Windows 10 x64 Edition
  2. 123说道:

    楼主能编译一个mtk版k2p 潘多拉固件的完整版aria2吗

    Google Chrome 60.0.3112.78 Google Chrome 60.0.3112.78 GNU/Linux x64 GNU/Linux x64
    1. 小山说道:

      如何编译文章里已经说的很清楚了

      Google Chrome 62.0.3202.94 Google Chrome 62.0.3202.94 Windows 10 x64 Edition Windows 10 x64 Edition
      1. 123说道:

        编译不过去,老是有错误 :cry:

        UC Browser 10.9.2.712 UC Browser 10.9.2.712 LG LG
        1. 小山说道:

          加QQ群,把错误信息截图。

          Google Chrome 62.0.3202.94 Google Chrome 62.0.3202.94 Windows 10 x64 Edition Windows 10 x64 Edition
      2. 123说道:

        截图已发qq群

        UC Browser 10.9.2.712 UC Browser 10.9.2.712 LG LG
  3. 月下飞虹说道:

    make menuconfig 里面只有Global building settings 和image configuration

    UC Browser 6.1.3228.203 UC Browser 6.1.3228.203 Windows 7 x64 Edition Windows 7 x64 Edition
    1. 小山说道:

      输入 ./scripts/feeds update -a # 更新软件源./scripts/feeds install -a # 安装软件源

      Google Chrome 60.0.3112.113 Google Chrome 60.0.3112.113 Windows 10 x64 Edition Windows 10 x64 Edition
      1. 月下飞虹说道:

        我是按照教程做的,用的ubuntu 17.04会有这个问题,换成deepin就可以了,不知道咋回事

        WebView 4.0 WebView 4.0 Android 7.0 Android 7.0
        1. 小山说道:

          Ubuntu 应该没什么问题的,我就在上面编译固件的

          Google Chrome 60.0.3112.113 Google Chrome 60.0.3112.113 Windows 10 x64 Edition Windows 10 x64 Edition
  4. 逸0oo说道:

    楼主斐讯K3,CPU 架构是 BCM4709C啊

    Google Chrome 60.0.3112.90 Google Chrome 60.0.3112.90 Windows 10 x64 Edition Windows 10 x64 Edition
    1. 小山说道:

      这个是型号,不是架构,完全两个不同的东西。

      Google Chrome 60.0.3112.90 Google Chrome 60.0.3112.90 Windows 10 x64 Edition Windows 10 x64 Edition

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.