国内服务器编译openwrt

玩机技巧
2098 0

记录一下我第一次学会自编译固件(N1),过程出现了很多个报错,但也通过搜索引擎解决了, 分享一下我的经验。

准备条件:

ubuntu或debian虚拟机一台
科学上网环境

制作材料:

Flippy预编译好的 Arm64 内核 (在 https://t.me/openwrt_flippyhttps://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

#设置Open­Wrt 系统组件
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


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]

最后更新 2022-12-04
评论 ( 0 )
OωO
隐私评论