在Proxmox VE上运行OpenWrt/LEDE虚拟机——2.PVE下运行的OW/LEDE固件编译要点

在PVE下运行的OW/LEDE虚拟机的类型为KVM,由于它可以使用VirtIO半虚拟化驱动的方式,能获得与非虚拟化的原生系统差不多的I/O性能,故效率很高。有关KVM更详细的信息可以参考KVM官方网站上的介绍。

编译OW/LEDE固件还算是比较大的工程,且网上有很多相关的资源来介绍,故此处仅说明其中关键之处。

1) 版本选择

鉴于目前的x86系统都支持64位运算,故建议采用64位的OW/LEDE系统,以充分利用硬件资源并获得更佳的性能。

2) 内核参数

目前,OW在master分支下的x86下仅“generic”一个subtarget可以完整支持KVM,但它却是32位的系统。若选择64位的OW/LEDE支持,则需要在原有的subtarget“64中”添加KVM支持,或者单独新建一个64位subtarget(如“kvm64”)。推荐选择后者,这样方便独立维护这个专门的KVM子target。当然选择哪种方式,都需要在内核配置中添加支持KVM的相关选项。

此处以当前的OW的master(内核版本为4.9)分支为例来说明,下面是需要在64位内核配置中添加的选项:

@@ -156,6 +156,13 @@
 CONFIG_HAVE_FENTRY=y
 # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
 CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
+CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
+CONFIG_HAVE_KVM_EVENTFD=y
+CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
+CONFIG_HAVE_KVM_IRQ_BYPASS=y
+CONFIG_HAVE_KVM_IRQ_ROUTING=y
+CONFIG_HAVE_KVM_MSI=y
 CONFIG_HAVE_LIVEPATCH=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 CONFIG_HAVE_STACK_VALIDATION=y
@@ -203,8 +210,15 @@
 # CONFIG_ITCO_VENDOR_SUPPORT is not set
 # CONFIG_ITCO_WDT is not set
 CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y
+CONFIG_KVM=y
+CONFIG_KVM_AMD=y
+CONFIG_KVM_ASYNC_PF=y
 # CONFIG_KVM_DEBUG_FS is not set
+CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
 CONFIG_KVM_GUEST=y
+CONFIG_KVM_INTEL=y
+CONFIG_KVM_MMIO=y
+CONFIG_KVM_VFIO=y
 # CONFIG_LCD_CLASS_DEVICE is not set
 CONFIG_LEDS_GPIO=y
 # CONFIG_LEGACY_VSYSCALL_EMULATE is not set

其中,前面带“+”的为新增加的选项,具体位置可能随版本更新而有所变化,可以将上面的内容做成patch文件添加到内核配置文件config-default中,这样编译后内核就会完整地出支持64位的KVM。

3) 其他

其他部分与OW/LEDE常规配置和编译基本相同,故不在此重复说明。

发表评论