准备容器
注意:这一步并非必要的,比如我就是整个系统都是识别大小写的,所以新建一个文件夹即可
更好的实现是,我在自己的服务器(PVE)创建了一个专门进行编译的ubuntu,这样编译不占用本地性能
1 2 3 4
| # 创建一个识别大小写的盘 hdiutil create -size 20g -type SPARSE -fs "Case-sensitive HFS+" -volname OpenWRT OpenWRT.sparseimage #挂载镜像 hdiutil attach OpenWRT.sparseimage
|
GUI * 未验证是否能够成功1
| 磁盘工具 添加卷宗 选择大小20GB 保留20GB 选择 APFS(区分大小写)
|
使用Brew安装需要的包
1
| brew install coreutils findutils gawk grep gnu-getopt gnu-tar wget diffutils git-extras quilt make ncurses pkg-config --verbose
|
配置环境变量
For x86_64 Apple hardware:
1 2 3 4 5 6 7 8 9 10
| PATH="/usr/local/opt/gnu-getopt/bin:$PATH" PATH="/usr/local/opt/make/libexec/gnubin:$PATH" PATH="/usr/local/opt/gettext/bin:$PATH" PATH="/usr/local/opt/coreutils/bin:$PATH" PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH" export PATH # 注释掉的变量反正我是没用到过 # PATH="/usr/local/opt/grep/libexec/gnubin:$PATH" # PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" # PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
|
For arm64 (Apple Silicon(M1)) Apple hardware:
1 2 3 4 5 6
| PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH" PATH="/opt/homebrew/opt/gnu-getopt/bin:$PATH" PATH="/opt/homebrew/opt/gettext/bin:$PATH" PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH" PATH="/opt/homebrew/opt/findutils/libexec/gnubin:$PATH" export PATH
|
1 2
| # Build前使用 source /Volumes/OpenWRT/env.sh
|
或者运行一下命令行
1 2 3
| #/bin/bash -c "$(curl -fsSL https://blog.songkunda.cn/files/路由器/doENV.sh)" /bin/bash -c "$(curl -fsSL https://blog.songkunda.cn/files/%E8%B7%AF%E7%94%B1%E5%99%A8/doENV.sh)"
|
准备物料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| cd /Volumes/OpenWRT git clone https://github.com/openwrt/openwrt.git cd openwrt git pull
# 更新 所有feeds到最新
./scripts/feeds update -a
# 下载所有menuconfig 需要的feeds ./scripts/feeds install <package_name> ./scripts/feeds install -a
# 如需其他版本 #git branch -a #git tag
|
编译
1 2 3 4 5 6 7 8 9 10 11 12 13
| ## 检查环境 make defconfig download clean world
# 配置软件镜像及内核 make menuconfig make kernel_menuconfig # 制作自己的配置文件(diffconfig) ./scripts/diffconfig.sh > K3.config
# 编译软件镜像 # make -j $(nproc) V=99 # verbose 在后面添加" V=99 " make -j $(nproc)
|
注意事项
make 报错
/Volumes/OpenWrt/openwrt/include/toplevel.mk:29: *** Please use a newer version of GNU make. The version shipped by Apple is not supported. Stop.
1 2 3
| sh /Volumes/OpenWRT/doENV.sh # 如果你已经运行过上面命令 只需要再source就行了 source /Volumes/OpenWrt/env.sh
|
make: *** No rule to make target ‘menuconfig’. Stop.
1 2 3 4 5
| # 你可能没有在源码目录上 cd /Volumes/OpenWRT/openwrt make menuconfig
|
Failed to install stub
1 2 3 4 5 6 7
| Checking 'ldconfig-stub'... failed.
Build dependency: Failed to install stub
Prerequisite check failed. Use FORCE=1 to override. gmake: *** [/Volumes/OpenWrt/openwrt/include/toplevel.mk:180: staging_dir/host/.prereq-build] Error 1
|
1 2 3 4
| rm -rf ./feeds rm -rf ./staging_dir rm -rf ./tmp ./scripts/feeds clean -f
|
luci fatal: 过早的文件结束符(EOF)
1 2 3 4 5 6 7 8 9 10 11
| Updating feed 'luci' from 'https://git.openwrt.org/project/luci.git;openwrt-21.02' ... 正克隆到 './feeds/luci'... remote: Enumerating objects: 8917, done. remote: Counting objects: 100% (8917/8917), done. remote: Compressing objects: 100% (4380/4380), done. error: RPC 失败。curl 18 transfer closed with outstanding read data remaining fetch-pack: unexpected disconnect while reading sideband packet fatal: 过早的文件结束符(EOF) fatal: fetch-pack:无效的 index-pack 输出 failed.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| cd ./feeds git clone git://git.openwrt.org/project/luci.git -j 4 -b openwrt-21.02 -v --depth 1 #正克隆到 'luci'... #查找 git.openwrt.org ...完成。 #连接到 git.openwrt.org(端口 9418)... 46.101.214.210 完成。 #remote: Enumerating objects: 8917, done. #remote: Counting objects: 100% (8917/8917), done. #remote: Compressing objects: 100% (4380/4380), done. #remote: Total 8917 (delta 2897), reused 6031 (delta 712), pack-reused 0 #接收对象中: 100% (8917/8917), 7.50 MiB | 18.00 KiB/s, 完成. #处理 delta 中: 100% (2897/2897), 完成. #正在更新文件: 100% (4474/4474), 完成.
# 完成后 运行命令让他重建luci.index package info 和 target info #Updating feed 'luci' from 'https://git.openwrt.org/project/luci.git;openwrt-21.02' ... #已经是最新的。 #Create index file './feeds/luci.index' #Collecting package info: done #Collecting target info: done ./scripts/feeds update luci -a
## 注意 以下安装命令要运行2次 第一次 会有部分依赖luci的缺失 第二次正常安装 ./scripts/feeds install -a
|
编译后固件位置
1 2
| bin/bcm53xx/xxx-squashfs-sysupgrade.bin bin/bcm53xx/xxx-squashfs-sysupgrade.bin
|