记录一下我第一次学会自编译固件(N1),过程出现了很多个报错,但也通过搜索引擎解决了, 分享一下我的经验。
准备条件:
ubuntu或debian虚拟机一台
科学上网环境
制作材料:
Flippy预编译好的 Arm64 内核 (在 https://t.me/openwrt_flippy 及 https://pan.baidu.com/s/1tY_-l-Se2qGJ0eKl7FZBuQ 提取码:846l)
自己编译的 openwrt rootfs tar.gz 包: openwrt-armvirt-64-default-rootfs.tar.gz , openwrt的源码仓库首选 (https://github.com/coolsnowwolf/lede)
1.创建一个新用户,非root
安装编译依赖
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
ps:我在debian10上安装依赖出现mkisofs找不到软件包,折中方法是安装genisoimage并建立软链接
sudo apt-get install -y genisoimage
sudo ln -s /usr/bin/genisoimage /usr/bin/mkisofs
3.下载源代码,更新 feeds 并选择配置
git clone https://git.wej.cc/github.com/coolsnowwolf/lede
cd lede
#feeds里添加PASSWALL:
vim /lede/feeds.conf.default
#添加
src-git kenzok https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
#下载 feeds 源中的软件包源码
./scripts/feeds update -a
#安装 feeds 中的软件包
./scripts/feeds install -a
#设置OpenWrt 系统组件
make menuconfig
当你输入make menuconfig回车之后,会进入可视化选择界面,这里建议用PC打开,手机屏幕过小可能会导致排版出错。
OpenWrt 编译 LuCI -> Applications 添加插件应用说明-L大
openwrt rootfs 编译注意事项:
Target System -> QEMU ARM Virtual Machine
Subtarget -> QEMU ARMv8 Virtual Machine (cortex-a53)
Target Profile -> Default
Target Images -> tar.gz
*** 必选软件包(基础依赖包,仅保证打出的包可以写入EMMC,可以在EMMC上在线升级,不包含具体的应用):
Languages -> Perl
-> perl-http-date
-> 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
* (可选)Wifi基础包:
* 打出的包可支持博通SDIO无线模块,Firmware不用选,
* 因为打包源码中已经包含了来自Armbian的firmware,
* 会自动覆盖openwrt rootfs中已有的firmware
Kernel modules -> Wireless Drivers -> kmod-brcmfmac(SDIO)
-> kmod-brcmutil
-> kmod-cfg80211
-> kmod-mac80211
Network -> WirelessAPD -> hostapd-common
-> wpa-cli
-> wpad-basic
-> iw
1、Extra packages ---> ipv6helper (选定这个后下面几项自动选择了)
Network ---> odhcp6c
Network ---> odhcpd-ipv6only
LuCI ---> Protocols ---> luci-proto-ipv6
LuCI ---> Protocols ---> luci-proto-ppp
4.下载 dl 库,编译固件 (-j 后面是线程数,第一次编译推荐用单线程)
#注意使用科学
make download -j8
make V=s -j1
我服务器是4核,设置的5线程,j5。
编译中使用科学,但还是遇到golang编译网络出错,
添加环境变量goproxy解决
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
编译时间取决服务器性能,我大概用了一个多小时编译完成,
这里就得到了一个openwrt rootfs tar.gz
路径在lede/bin/targets
打包固件
下载flippy提供的n1内核
boot dtb-amlogic modules 开头的三个压缩包
切换到root用户
1.上传内核 /opt/kernel目录(目录需要自己创建)
2.拉取打包脚本
cd /opt
git clone https://github.com/unifreq/openwrt_packit
3.把编译好的 openwrt-armvirt-64-default-rootfs.tar.gz 上传至 /opt/openwrt_packit目录中
cd /opt/openwrt_packit
#修改配置
#KERNEL_VERSION=内容改成自己导入的内核名称
vi make.env
#保存,开始打包
./mk_s905d_n1.sh
#s905d表示生成 Phicomm N1所用的固件
生成好的固件是 .img 格式, 存放在 /opt/openwrt_packit/output 目录中,下载刷机即可
默认登陆IP 192.168.1.1 密码 password
刷入u盘,下载balenaEtcher
https://www.balena.io
Select image #选择固件包
Select drive #选择U盘
Flash #开始刷入U盘
插上N1,刷入emmc
链接n1的wifi,"Phicomm N1"
ssh访问IP 192.168.1.1 端口22 密码:password (默认)
cd /root
./install-to-emmc.sh
ps:刷入过程有两次选择,第一次是选择N1相关型号Phicomm N1
第二次是磁盘格式,我选的是btrfs
完成之后断开电源,拔出u盘。重新连接电源即可。
[art]84[/art]