为什么要自己编译WSL2内核
- WSL2自带的内核缺少下列组件
- nftables系列组件:会导致你无法使用新版iptables命令
- lxc等安全相关功能
- 各种文件系统(squashfs等)
编译的问题
内核的选项配置是个学问
- 不能把所有选项都开启(废话)
- 也不能直接全抄ubuntu的config
- 似乎会少一点组件导致启动不了,WSL报错启动超时
- 也不能说就直接开开某些选项(太多了)
缝合:把Ubuntu的config Merge到Microsoft上面
- 思路:目标是让config尽可能像Ubuntu
- Ubuntu的config中带着很多module,而打包module非常麻烦
- 所以我们直接不打包module了,统统y进去, 哈哈哈
- 把Ubuntu config中的一部分WSL绝对用不到的配置项去掉,剩下的全照抄就可以了
- 针对于WSL的特殊配置,每次编译通过二分法确认是哪部分重要,将关键配置项保留下来
- 历程
- 解析Kconfig:使用Kconfiglib
- 确定要排除Ubuntu的配置:
- ACPI、Power、PCI、Firmware相关的东西, WSL用不到
- 影响编译出内核的核心能否正常使用的关键是这些东西
[VSOCKETS] [VIRTIO_VSOCKETS_COMMON HYPERV_VSOCKETS]
成果
自动检查Microsoft Repo的更新情况,并编译