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
k2topenwrt固件。基于learn大的开源代码编译。 Welcome to Lean's git source of OpenWrt and packages 中文:如何编译自己需要的 OpenWrt 固件 注意: 1. 不要用 root 用户 git 和编译!!! 2. 国内用户编译前最好准备好梯子 3. 默认登陆IP 192.168.1.1, 密码 password 编译命令如下: 1. 首先装好 Ubuntu 64bit,推荐 Ubuntu 14 LTS x64 2. 命令行输入 sudo apt-get update ,然后输入 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint 3. git clone https://github.com/coolsnowwolf/lede 命令下载好源代码,然后 cd lede 进入目录 4. ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 5. 最后选好你要的路由,输入 make -j1 V=s (-j1 后面是线程数。第一次编译推荐用单线程,国内请尽量全局科学上网)即可开始编译你要的固件了。 本套代码保证肯定可以编译成功。里面包括了 R9 所有源代码,包括 IPK 的。 你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作! 特别提示: 1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件,SSL 安全是互联网最后的壁垒。安全干净才是固件应该做到的。 2.如果你自认为 Koolshare 论坛或者其固件的脑残粉,本人不欢迎你使用本源代码。所以如果你是,那么使用过程中遇到任何问题本人概不回应。 3.如有问题需要讨论,欢迎加入 QQ 讨论群:Gargoyle OpenWrt 编译大群 ,号码 718010658 ,加群链接 点击链接加入群聊【Op共享技术交流群】:https://jq.qq.com/?_wv=1027&k=5PUGjOG Please use "make menuconfig" to choose your preferred configuration for the toolchain and firmware. You need to have installed gcc, binutils, bzip2, flex, python, perl, make, find, grep, diff, unzip, gawk, getopt, subversion, libz-dev and libc headers. Run "./scripts/feeds update -a" to get all the latest package definitions defined in feeds.conf / feeds.conf.default respectively and "./scripts/feeds install -a" to install symlinks of all of them into package/feeds/. Use "make menuconfig" to configure your image. Simply running "make" will build your firmware. It will download all sources, build the cross-compile toolchain, the kernel and all choosen applications. To build your own firmware you need to have access to a Linux, BSD or MacOSX system (case-sensitive filesystem requ
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值