从源码编译 Openwrt x86_64_kvm 以及 wsl2 带来的坑.
资料来源:
https://openwrt.org/docs/guide-developer/build-system/install-buildsystem
http://everun.top/helpcenter/others/pve-ow-2.html
https://exlolicon.blogspot.com/2018/09/centosopenwrt.html更新
1
20.08.19 初始化
导语
最近学理论学的疲了,来点一直在清单上积灰的计划,大概要更新路由器了,干脆重新编译 Openwrt x86_64.
下面是在 Win10 wsl2 下编译 Openwrt x86_64_kvm 的坑,特别是 wsl2 带来的新坑.
因为官方的 x86_64 下没有 kvm 的完整支持,这里需要动一点文件.
准备
环境
- wsl2-ubuntu ,之前在虚拟机上 debin/centos 始终都有失败的时候.
- 10~20G 空间,编译不同版本需要空间有不同.
- cpu 此处是 AMD 3600 6C12T.(所以下面都是 12 线程)
- 网络条件,不再提了.
系统
1 | sudo apt-get update |
源码
拉取源码
1 | git clone https://github.com/openwrt/openwrt.git |
更新&&安装 feed
1 | ./scripts/feeds update -a |
配置
为 x86_64 添加完整 kvm 支持
这一节来自 在Proxmox VE上运行OpenWrt/LEDE虚拟机——2.PVE下运行的OW/LEDE固件编译要点
官方的 x86_64 对应配置在 openwrt\target\linux\x86\64
下,可惜没有完整支持 kvm,但是官方的 x86_generic 却完整支持了 kvm.可能是一点疏忽吧.
添加 kvm 完整支持可以新添加一个 subtarget 或者在 x86_64 上修改,这里直接在 x86_64 上修改了.
最新版本对应的内核是 5.4,所以我们要修改的文件就是 openwrt\target\linux\x86\64\config-5.4
.下面是修改后的新增项,这些都可以在 x86_generic 上找到.
1 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
内核配置
首次编译前要先 make menuconfig
指定 Linux 内核分支.这里是 x86_64.
1 | make menuconfig |
随后 save
到配置文件,再 exit
.
make kernel_menuconfig
这一步会下载内核源码,还会编译一些内容,开个多线程节省点时间.V=s
会输出编译 log,防止无聊.
1 | make kernel_menuconfig -j12 V=s |
这一步时间可能稍长,需要耐心等待.
固件配置
一些定制化都在这里了,后面有两篇会涉及到固件配置,一篇是 qca9880,还有一篇是专门的定制化.这里仅仅提到一点.
1 | make menuconfig |
最后 save
&& exit
编译
绝对不能使用 root 用户编译 !!
编译过程依旧会下载一些内容,需要保持网络通畅.
官方不推荐多线程编译,但是先试试总归比单线程快的多.
1 | make -j12 V=s |
12 线程编译大概只有不到 20 分钟.
编译完成后,固件在 openwrt\bin\targets
对应的架构文件夹内.
坑
不能使用 root
用户编译,这是官方就提到了很多次的.
make[2]: *** [package/Makefile:71: package/install] Error 1
- 首先排除网络问题.
- 其次是对应的 package 错误,
make menuconfig
检查一下对应的设置. - 如果还有错误,
make clean
清理编译文件,换成-j1
单线程编译,可以解决一部分问题.
wsl2 独有的..(坑的莫名其妙)
错误提示
1 | find /home/tmp/openwrt/build_dir/target-x86_64_musl/root-x86/ -mindepth 1 -execdir touch -hcd "@1596662855" "{}" + |
字面上意思是系统的 PATH
包含了 Files/NVIDIA
导致的,就去找对应的 package 了,还真有一个 kmod-forcedeth
但是没起作用.
一直翻资料,知道突然意识到是不是 wsl2 的 PATH
问题..wsl2 会导入宿主机 win10 的 PATH
,而我恰好安装了 cuda.破案..这莫名其妙..
1 | source /etc/environment |
结束
wsl2 是个好东西,但是有点无福消受..
计划重新升级一遍个人的工作环境,硬件到位了,该软件了.