OpenWRT从下载到编译 -- 斐讯K2路由器

1. OpenWRT简介

下面来看一下百度百科对OpenWRT的解释:

OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有
dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。
对于开发人员,OpenWrt
是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。------
OpenWrt百度百科

2. 编译环境搭建

wiki上官方步骤:点击进入
本文用的编译环境是Ubuntu18.04 LTS版的(注意:2020年以后,现在较新的openwrt版本需要Ubuntu 18.04以上的版本才可以编译成功,但是搭建流程是一样的)。
下面是为大家整理的编译依赖环境的安装命令:

# Ubuntu18.04LTS 2023/06/25
sudo apt install build-essential ccache ecj fastjar file g++ gawk gettext git git-core 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 gcc-multilib gcc-8 g++-8 python3.7 flex quilt libxml-parser-perl mercurial bzr ecj cvs

用上面的命令即可完成编译环境的搭建,注意:从GitHub上下载的最新版本代码可能无法从Ubuntu18.04或者WSL Ubuntu18.04上面编译通过,请参照 9.注意事项篇

3. 源码下载

我们这里的源码一律采用主干最新代码,下载地址:
大家可以去GitHub上下载源码:点击下载
GitHub下载速度慢可以去Gitee上下载,这个速度比较快:Gitee
也可以通过git将源码下载到本地(在这儿推荐这种方法),这样的话方便更新。

# 新建一个文件夹
$ mkdir openwrt
# 进入这个文件夹
$ cd openwrt
# 下载主干源码
$ git clone git://github.com/openwrt/openwrt.git
# 若GitHub下载慢,可以用Gitee的资源
# git clone https://codechina.csdn.net/mirrors/openwrt/openwrt.git
# 等待一段时间 最新源码下载完成
# 进入到源码下载目录
$ cd openwrt

这时候,源码下载完毕。

4. 编译之前的准备
  1. 更新资源

    ./scripts/feeds update -a
    ./scripts/feeds install -a
    

    若更新资源失败,则进入第2步:替换修改,若更新成功则跳过第2步,直接进入第3步:执行make menuconfig

  2. 替换修改
    熟悉编译流程的同学们知道,下载完成源码后,就应该更执行和更新和安装命令。但是这个时候往往更新会失败,为什么呢?— 原因就是一些更新源已经更换为git地址了,但是feeds.conf.default文件采用的还是https/http的地址。我们将这个文件里面的地址修改一下即可。
    注意:feeds.conf.default文件就在下载的源码目录下,可以尝试先更新和安装,如果失败则执行这一步修改。

    # 修改feeds.conf.default文件 
    $ vi feeds.conf.default
    # 通过命令将https更换为git
    :%s/https/git/g
    # 保存文件
    :wq!
    

    下图为修改完成后的效果:
    修改feeds.conf.default文件后效果图
    注意:如上图所示,有些git地址被注释掉了,我们一般情况下不用去修改。
    修改完后则执行:

    ./scripts/feeds update -a
    ./scripts/feeds install -a
    
  3. 执行make menuconfig
    终端下执行 make menuconfig

5. make menuconfig配置

执行make menuconfig后,弹出如下界面:
这里写图片描述

通过文本对话框进行选项配置,最主要的配置项有:

Target system   (目标系统类型,即路由器CPU架构)

Subtarget       (子目标,即路由器芯片型号)

Target Profile  (目标文件, 即路由器型号)

LuCI            (LuCI界面设置)

基本配置:
我采用的是斐讯K2路由器,网上百度CPU型号为MT7620,芯片架构为MIPS,路由器型号为PSG1208,那么我的基本配置就为:

Target system -> MediaTek Ralink MIPS

Subtarget -> MT7620 based boards

Target Profile -> Phicomm PSG1208

LuCI配置:
LuCI是一个界面,即刷完路由器后,我们需要登陆“192.168.1.1”来设置路由器参数的界面。

LuCI->
	1. Collections->
		<*> luci-ssl-openssl
	2. Modules->
		Translations->
			<*>English (en)
			<*>Chinese (zh-cn)

配置完以上信息后,OpenWrt最基本的一些配置已经完成。

6. 开始编译

执行make V=s进行编译。
或者执行 make -j2 V=s进行编译。(-j2为两个线程,-j4为四个线程,具体看自己的电脑是几线程的,当然线程越多,编译越快。)
注意:第一次编译过程中会下载工具包,所下载的包在dl文件夹下,因此比较慢,耐心等待即可。

7. 编译完成

所生成的文件在openwrt/bin/targets/ramips/mt7620目录下,其中openwrt-ramips-mt7620-psg1208-squashfs-sysupgrade.bin为编译出来的固件。通过breed刷入K2路由器即可。

8. 其它

假如编译成功,我们可以尝试通过修改make menuconfig将其它软件包编译到固件中。

9.注意事项

GitHub上下载的最新版本代码可能无法从Ubuntu18.04或者WSL Ubuntu18.04上面编译通过,以下为编译过程中的记录:

1. 编译时报错:

patchelf.cc:2102:37: error: use of 'auto span<T>::size() const [with T = long unsigned int]' before deduction of 'auto'
         size_t idx = (h / ElfClass) % ght.m_bloomFilters.size();    

OpenWrt 编译所需的 GCC 最低版本要求是 7.x,建议升级 GCC 到 7.x 或以上版本。可以使用以下命令进行升级:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-8 g++-8

安装完成后,将 GCC 和 G++ 更改为新版本:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50

或者将将报错文件patchelf.cc对应的Makefile文件里面的CC/CXX变量修改为gcc-8/g++-8版本:

# vim build_dir/host/patchelf-0.18.0/src/Makefile (不同版本路径不同,请根据实际情况变通)
# 将 CC = gcc  /  CXX = g++ -std=c++17 改为:
CC = /usr/bin/gcc-8
CXX = /usr/bin/g++-8 -std=c++17

2. 编译时报错:

find: The relative path 'Files' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find.  Please remove that entry from $PATH
      package/Makefile:66: recipe for target 'package/install' failed

这个错误的意思是因为你在系统环境变量 PATH 中包括了一个相对路径 Files,在使用 find 命令时可能会被误用。如果你想要使用 find 命令进行递归查找并执行某些操作,应该使用 -exec,而不是 -execdir。
为了解决这个问题,你可以重构你的环境变量 PATH,并使用绝对路径。在你的 shell 配置文件(例如 .bashrc or .zshrc)中,将 PATH 更改为绝对路径,例如:

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/path/to/Files

3. Python版本需要升级到3.7以上

sudo apt-get install python3.7
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值