最开始是折腾 x86 OpenWRT 编译,在 vps Debian 11 系统以及使用 Github Actions 均编译成功,目前已在 VMWare 虚拟机中运行作旁路由稳定使用一年多。斐讯 N1 刷 F 大的 openwrt 作旁路由使用也好几年了。
无意中在烧饼博客友情链接中翻到「暮光博客 - 之前固件带后门?于是我自行编译了 N1 OpenWrt 固件」,加上 F 大的固件中 99% 的 App 插件都用不上,只用了「酸酸乳 plus+」,于是开始折腾……
「Github编译、打包OpenWRT斐讯N1固件(可写入eMMC):https://wifimi.net/github-build-and-packed-openwrt-for-phicomm-n1」Github 云编译极简 OpenWRT
还是使用 P3TERX 大神的 Actions-OpenWrt(GitHub Actions)+ Lean's LEDE 进行云编译。
毕竟已经折腾、编译过 n 次了,选好编译硬件信息、订阅 helloworld 插件源、 LuCI 选好酸酸乳、去除不需要的插件,就开始云编译了……
「Github编译、打包OpenWRT斐讯N1固件(可写入eMMC):https://wifimi.net/github-build-and-packed-openwrt-for-phicomm-n1」三个多小时后,编译成功,下载固件文件使用 rufus 写入 U 盘,插上 N1 HDMI 接口旁边的 usb 口,通电……成功启动,登陆进去,很精简,但是载入首页或者刷新页面都很慢,小卡,并且不知道如何写入到 eMMC 中……
Github 云编译 Lean OpenWRT 并使用 F 大脚本打包斐讯 N1 固件(支持 eMMC)
周末前前后后编译了五六次,终于成功编译、成功打包,成功写入到 eMMC 中使用……
1 、参考 https://github.com/unifreq/openwrt_packit 选择必须软件包、依赖:
「Github编译、打包OpenWRT斐讯N1固件(可写入eMMC):https://wifimi.net/github-build-and-packed-openwrt-for-phicomm-n1」Target System -> Amlogic Meson family
Subtarget -> Amlogic S905x boards (64 bit)
Target Profile -> Phicomm N1
Target Images -> tar.gz
*** 必选软件包 (基础依赖包,仅保证打出的包可以写入 EMMC, 可以在 EMMC 上在线升级,不包含具体的应用):
Languages -> Perl
-> perl-http-date
-> perlbase-file
-> perlbase-getopt
-> perlbase-time
-> perlbase-unicode
-> perlbase-utf8
Utilities -> Disc -> blkid 、 fdisk 、 lsblk 、 parted
-> Filesystem -> attr 、 btrfs-progs(Build with zstd support) 、 chattr 、 dosfstools 、
e2fsprogs 、 f2fs-tools 、 f2fsck 、 lsattr 、 mkf2fs 、 xfs-fsck 、 xfs-mkfs
-> Compression -> bsdtar 或 p7zip(非官方源) 、 pigz
-> Shells -> bash
-> gawk 、 getopt 、 losetup 、 tar 、 uuidgen
* 光影猫 (Photonicat) 依赖包:
* (必选, required,如果不选的话开机一分钟内会自动关机,与硬件内置的看门狗有关)
Utilities -> pcat-manager
* DM 路由监视器依赖包: https://hiwbb.com/2021/10/openwrt-netdata-show-temperature/
* (必选, required)
Applications -> luci-app-netdata
2 、按实际需要选择需要编译的插件,比如酸酸乳 Plus 配置(点击查看)等
3 、 Github Action 编译文件参考:
#
# https://github.com/P3TERX/Actions-OpenWrt
#
# File: .github/workflows/openwrt-bulder.yml
# Description: Build OpenWrt using GitHub Actions
#
# Copyright (c) 2019-2024 P3TERX <https://p3terx.com>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
# Amlogic Meson family -- Subtarget Amlogic S905x boards (64 bit) -- Phicomm N1
name: OpenWrt Builder(Amlogic S905x N1)
on:
repository_dispatch:
workflow_dispatch:
env:
REPO_URL: https://github.com/coolsnowwolf/lede
REPO_BRANCH: master
FEEDS_CONF: feeds.conf.default
CONFIG_FILE: n1.config
DIY_P1_SH: diy-part1.sh
DIY_P2_SH: diy-part2.sh
UPLOAD_BIN_DIR: false
UPLOAD_FIRMWARE: true
UPLOAD_RELEASE: true
TZ: Asia/Shanghai
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: "Check Server Performance"
run: |
echo "警告⚠"
echo "分配的服务器性能有限,若选择的插件过多,务必注意 CPU 性能!"
echo -e "已知 CPU 型号(降序):7763,8370C,8272CL,8171M,E5-2673 \n"
echo "--------------------------CPU 信息--------------------------"
echo "CPU 物理数量:$(cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l)"
echo -e "CPU 核心信息:$(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c) \n"
echo "--------------------------内存信息--------------------------"
echo "已安装内存详细信息:"
echo -e "$(sudo lshw -short -C memory | grep GiB) \n"
echo "--------------------------硬盘信息--------------------------"
echo "硬盘数量:$(ls /dev/sd* | grep -v [1-9] | wc -l)" && df -hT
- name: 释放磁盘空间
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Checkout
uses: actions/checkout@main
- name: Initialization environment
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
sudo docker image prune --all --force
sudo -E apt-get -qq update
sudo -E apt-get -qq install ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential bzip2 ccache clang cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib git gperf haveged help2man intltool llvm libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
sudo -E apt-get -qq autoremove --purge
sudo -E apt-get -qq clean
sudo timedatectl set-timezone "$TZ"
sudo mkdir -p /workdir
sudo chown $USER:$GROUPS /workdir
- name: Clone source code
working-directory: /workdir
run: |
df -hT $PWD
git clone $REPO_URL -b $REPO_BRANCH openwrt
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt
- name: Cache
uses: stupidloud/cachewrtbuild@main
with:
ccache: 'true'
prefix: ${{ github.workspace }}/openwrt
- name: Load custom feeds
run: |
[ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default
chmod +x $DIY_P1_SH
cd openwrt
$GITHUB_WORKSPACE/$DIY_P1_SH
- name: Update feeds
run: cd openwrt && ./scripts/feeds update -a
- name: Install feeds
run: cd openwrt && ./scripts/feeds install -a
- name: Load custom configuration
run: |
[ -e files ] && mv files openwrt/files
[ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config
chmod +x $DIY_P2_SH
cd openwrt
$GITHUB_WORKSPACE/$DIY_P2_SH
- name: Download package
id: package
run: |
cd openwrt
make defconfig
make download -j8
find dl -size -1024c -exec ls -l {} \;
find dl -size -1024c -exec rm -f {} \;
- name: Compile the firmware
id: compile
run: |
cd openwrt
echo -e "$(nproc) thread compile"
make -j$(nproc) || make -j1 || make -j1 V=s
echo "status=success" >> $GITHUB_OUTPUT
grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME
[ -s DEVICE_NAME ] && echo "DEVICE_NAME=_$(cat DEVICE_NAME)" >> $GITHUB_ENV
echo "FILE_DATE=_$(date +"%Y%m%d%H%M")" >> $GITHUB_ENV
- name: 释放磁盘空间
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: false
docker-images: true
swap-storage: true
- name: Package OpenWrt Firmware
if: ${{ env.compile_status }} == 'success' && !cancelled()
uses: unifreq/openwrt_packit@master
env:
OPENWRT_ARMVIRT: openwrt/bin/targets/*/*/openwrt-amlogic-mesongx-phicomm_n1-rootfs.tar.gz
KERNEL_VERSION_NAME: 5.15.y_6.6.y
KERNEL_AUTO_LATEST: true
PACKAGE_SOC: s905d
WHOAMI: WIFIMI
SW_FLOWOFFLOAD: 1
SFE_FLOW: 0
- name: Check space usage
if: (!cancelled())
run: df -hT
- name: Organize files
id: organize
if: env.UPLOAD_FIRMWARE == 'true' && !cancelled()
run: |
cd openwrt/bin/targets/*/*
rm -rf packages sha256sums version.buildinfo feeds.buildinfo openwrt-amlogic-mesongx-phicomm_n1.manifest
rm -rf ${{ env.PACKAGED_OUTPUTPATH }}/openwrt-armsr-armv8-generic-rootfs.tar.*
echo "FIRMWARE=$PWD" >> $GITHUB_ENV
echo "status=success" >> $GITHUB_OUTPUT
- name: Upload firmware directory
uses: actions/upload-artifact@main
if: steps.organize.outputs.status == 'success' && !cancelled()
with:
name: OpenWrt_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }}
path: |
${{ env.FIRMWARE }}
${{ env.PACKAGED_OUTPUTPATH }}
- name: Generate release tag
id: tag
if: env.UPLOAD_RELEASE == 'true' && !cancelled()
run: |
echo "release_tag=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_OUTPUT
touch release.txt
[ ${UPLOAD_GOFILE} = true && ${{ steps.gofile.outputs.url }} ] && echo "🔗 [GoFile](${{ steps.gofile.outputs.url }})" >> release.txt
echo "status=success" >> $GITHUB_OUTPUT
- name: Upload firmware to release
uses: softprops/action-gh-release@master
if: steps.tag.outputs.status == 'success' && !cancelled()
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.tag.outputs.release_tag }}
body_path: release.txt
files: |
${{ env.FIRMWARE }}/*
${{ env.PACKAGED_OUTPUTPATH }}/*.*
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@main
with:
retain_days: 0
keep_minimum_runs: 2
- name: Remove old Releases
uses: dev-drprasad/delete-older-releases@master
if: env.UPLOAD_RELEASE == 'true' && !cancelled()
with:
keep_latest: 6
delete_tags: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
配置完成,进入 Github 相应仓库,Actions,Run workflow 开始编译即可……
「Github编译、打包OpenWRT斐讯N1固件(可写入eMMC):https://wifimi.net/github-build-and-packed-openwrt-for-phicomm-n1」OpenWRT 写入 N1 eMMC
一般等上三四个小时,Actions 编译完成,build 前有绿色勾。
在 Github 仓库最新 releases 就能找到类似下面的文件:
openwrt_s905d_n1_R25.06.22_k5.15.189-flippy-93+o.img.gz
openwrt_s905d_n1_R25.06.22_k6.6.101-flippy-93+.img.gz
两个固件,随便选择一个解压,使用 rufus 写入 U 盘,插入 N1 HDMI 接口旁的 usb,插上电源,等上几分钟,N1 启动完成,浏览器打开 192.168.1.1 就能登陆 openwrt 后台(账号 root,密码 password)
服务 -- 终端,登陆成功可以看到类似如下界面:
输入 ./install-to-emmc.sh 按回车开始将 OpenWRT 固件写入 eMMC
Please select s9xxx box model: 选择 # Amlogic GXL Family 下面的 11 Phicomm N1 即可,也就是在 Please choose: 后面输入 11 然后按回车
Please select the type of shared file system 一般选择 ext4 即可:
写入完成,断开 N1 电源,拔掉 U 盘,重新上电,如无意外,稍等片刻,一个极简 OpenWRT 从 N1 的 eMMC 启动完成……
旁路由配置要点参考:
取消桥接:
关闭 DHCP:
如果开启酸酸乳科学上网后国内 App 网络异常,可在「网络-- 防火墙」中加一条自定义规则:
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
参考资料
https://github.com/breakings/OpenWrt
https://github.com/ophub/flippy-openwrt-actions(OpenWrt packaging Actions:Support Amlogic, Rockchip and Allwinner boxes.)
https://github.com/iceyheart/Cudy-TR3000-Openwrt/blob/main/.github/workflows/N1.yml
解压密码 1024
Comments:0