OpenWRT固件编译

merge.svg.png

概述

L大(Lean)OpenWRT固件编译项目地址:点击访问

openwrt的下载的官网,http://downloads.openwrt.org/

编译环境

Ubuntu18.04 (硬盘40GB或以上)

注意事项

  1. 要用 root 用户 git 和编译!!!
  2. 大陆IP用户编译前最好准备好梯子
  3. 固件的默认登陆IP 192.168.1.1, 密码 password

Ubuntu SSH登录

sed -i 's/^#Port 22/Port 22/' /etc/ssh/sshd_config
sed -i 's/^#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
sed -i 's/^#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
reboot

1. 增加非root用户并设置密码及权限

useradd xxx #为你建立的用户名
passwd xxx #为用户设置密码

对新建立的用户赋予权限

打开

vim /etc/sudoers

找到 root ALL=(ALL:ALL) ALL,并在后面加入一行,写入刚才你建立的用户名

# User privilege specification
root    ALL=(ALL:ALL) ALL
xxx    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

2. 切换到新建的用户

su - xxx

3.升级系统,并安装必要组件

sudo apt-get update
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 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 device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

4.下载编译源代码

git clone https://github.com/coolsnowwolf/lede
cd lede/

5.设定并更新软件包

openwet常用软件包 github项目地址

若你是想在固件里面拥有其他XX上网插件

1. lede/package$下运行 或者openwrt/package$下运行

git clone https://github.com/kenzok8/openwrt-packages.git

2. 或者添加下面代码到 openwrt 或lede源码根目录feeds.conf.default文件

src-git kenzo https://github.com/kenzok8/openwrt-packages

3. passwall依赖

src-git small https://github.com/kenzok8/small

打开feeds.conf.default添加
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

vim feeds.conf.default
src-git packages https://github.com/coolsnowwolf/packages
src-git luci https://github.com/coolsnowwolf/luci
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git freifunk https://github.com/freifunk/openwrt-packages.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git management https://github.com/openwrt-management/packages.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
src-git helloworld https://github.com/fw876/helloworld
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small

6.CPU架构和插件选择

执行命令

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

执行完成出现选项

默认是X86-64

N1固件编译需要选择

选择目标系统-- Target System (QEMU ARM Virtual) --->
选择处理器型号--Subtarget (ARMv8 multiplatform) --->

插件选择

选择Luci回车

选择Applications回车

空格选择自己想要的插件save保存退出
*号才是选择了

7.下载dl库

下载dl库(国内请尽量全局科学上网)

make -j8 download V=s

这一部分关键取决于你的节点或是VPS的速度,请耐心等待。

PS : 这一步下载的东西很多。不确定是否全部下载成功,可重复运行N次代码。直到没有出现下载的状态。

8.编译

避免误操作或一直开着SSH,我们需要转到VNC控制台登录后操作

编译前可自定义默认ip

vim package/base-files/files/bin/config_generate

编译命令

make -j1 V=s

(-j1 后面是线程数。第一次编译推荐用单线程)即可开始编译你要的固件了。

首次编译j后面填1,再编译可填你cpu最大线程

大概几个小时以后(看机器性能)可以在SSH工具如下目录找到编译的固件 /lede/bin/targets

二次编译

因为第一次编译我们下载了很多必要的组件,所以,你若是以后再想编译,就很快了,也简单了

cd lede
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s

如果需要重新配置:

rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s

首次编译j后面填1,再编译可填你cpu最大线程,例如我的是3600+,最大线程是12,那可以输入

make -j12 V=s

ps:如果报错,而实在找不到问题,可尝试输入以下代码

PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')

单独编译插件ipk

1.更新

git pull

2.更新feeds

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

3.进入编译(找到想编译的插件的名字)

make menuconfig

4.开始编译

make package/(插件名)/compile V=99

N1路由器举例:
ssrplus+插件

make package/luci-app-ssr-plus/compile V=99
  1. ssr-plus依赖于luci的一些组件,故先编译luci-base
make package/feeds/luci/luci-base/compile V=s

然后单独编译插件即可,时间很长。

make package/lean/luci-app-ssr-plus/compile -j1 V=s

首次编译请选单线程编译(-j1),因为多线程下若出错不容易debug。

  1. 编译顺利的话,可以在bin/packages/你的路由器架构/base/ 下找到编译完的ipk。

5.写入emmc

openwrt依赖项:(编译openwrt时需要添加的包,配合inst-to-emmc.sh update-to-emmc.sh update-beikeyun-openwrt.sh 等使用,以及cpu温度频率监测时用到)
language里的 perl、perlbase-utf8
util -> disc :  fdisk blkid lsblk
util  -> filesystem: 能选的都选上,编译不过的就不用选
util:  losetup  uuidgen  tar  gawk getopt  bash

a.写入emmc

cd /root
./inst-to-emmc.sh

b.如果出现分区失败而无法写入的,可以先还原bootloader后重启,再次运行inst-to-emmc.sh
还原bootloader的方法:

dd if=/root/u-boot-2015-phicomm-n1.bin  of=/dev/mmcblk1
reboot

c.升级新版本到emmc(不丢配置,必须是f老大系列的固件)

cd /root
./update-to-emmc.sh

编译完成后输出路径:/lede/bin/targets

Github Ac­tions 云编译

p3terx 大神云编译项目地址P3TERX/Actions-OpenWrt: Build OpenWrt using GitHub Actions | 使用 GitHub Actions 云编译 OpenWrt
p3terx的教程使用 GitHub Actions 云编译 OpenWrt - P3TERX ZONE

esri大神云编译脚本esirplayground/AutoBuild-OpenWrt: Build OpenWrt using GitHub Actions | 使用 GitHub Actions 编译 OpenWrt | 感谢P3TERX的项目源码|感谢KFERMercer的项目源码

./scripts/diffconfig.sh > diffconfig
# OpenWRT 

本文由:星际难民
实践,测试,整理发布.如需转载请注明地址 本文标题:OpenWRT固件编译
地址:https://530503.xyz/articles/2021/01/06/1609918725292.html

评论

取消