WSL2 Microsoft Linux内核自动编译

大类
Env
技术标签
云服务-CI
云服务-白嫖
开发-Linux小工具
优先级
Medium
开始日期
Apr 29, 2022
状态
Maintaining
Public
Public
最后更新
Aug 8, 2022

为什么要自己编译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看齐
    • 写一个支持层级的配置筛选器,就完事了

成果

自动检查Microsoft Repo的更新情况,并编译