维塔斯科技

标题: 非官方编译,Hyper-V的Openwrt x86和x86-64版,Chaos Calmer正式版 [打印本页]

作者: 21wim7    时间: 2016-3-29 12:35
标题: 非官方编译,Hyper-V的Openwrt x86和x86-64版,Chaos Calmer正式版
鉴于很多朋友发消息,需要Hyper-V的Openwrt,索性发个帖子吧。

声明:

非官方编译的vhd镜像。
有动手能力的朋友,可以参照二楼的patch源代码自行编译。
patch的源代码源自https://patchwork.ozlabs.org/patch/431583/,感谢原作者Ning Ye。
原始patch是3.14内核的,本人对patch做了些许修改,使其支持3.18内核。


版本:
Openwrt Chaos Calmer正式版源代码,git版本r46849。
Windows Server 2008 R2,Windows Server 2012 R2的Hyper-V测试通过,支持标准的虚拟网卡(而不仅是legacy模式)。

链接: http://pan.baidu.com/s/1dD8pkfn 密码: kkbx
除了vhd镜像,也放了一些单独的ipk方便使用,如果需要其他ipk请留言。

区别:
x86只支持1 CPU及800MB内存;
x86-64支持多CPU(起码支持4核心没问题),及大内存(起码16GB内存没问题)。虽然很怀疑OpenWrt是否真的可以有效利用这些资源,不过鉴于有朋友回帖提到这个问题,就编译了一个x86-64。

==下面的截图稍微旧一点,是r46822的==











作者: zzyye1    时间: 2016-3-29 12:35
lz知道怎么编译支持大内存和smt的op吗


作者: nzs1njg4    时间: 2016-3-29 12:35
相当给力,但是还是喜欢使用实体的路由器


作者: 992wfou    时间: 2016-3-29 12:35

这个编译使用的是git迁出openwrt的chaos calmer源代码,理论上也是15.05的正式版。
git show显示的结果如下:
commit e51ee1779fccc2afaf2eaa387081b0ef56df7263

Author: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>

Date:   Fri Sep 11 08:49:42 2015 +0000



    ipq806x: delete from CC branch; it is broken and unsupported



    Signed-off-by: Felix Fietkau <nbd@openwrt.org>



    git-svn-id: svn://svn.openwrt.org/openwrt/branches/chaos_calmer@46845 3c298f89-4303-0410-b956-a3cf2f4a3e73
复制代码




作者: u1xsen    时间: 2016-3-29 12:35

今天编译时,已经git pull更新过了,所以目前上传的镜像应该已经是正式版的了。
git显示的版本为r46845。

用源代码编译就是有这个好处,只要有人提交了代码,是需要pull一下,编译得到的就是最新版。


作者: jjgd1h6    时间: 2016-3-29 12:35

x64用过了,啥都好,可惜不兼容32位的程序(比如迅雷xware),而且没有提供兼容库。


作者: 0fttkirs    时间: 2016-3-29 12:35

15.05今天发布了,有没有强迫症发作想要去编一个呢


作者: 96ru7v0n    时间: 2016-3-29 12:35
楼主是否测试过 Hyper-V 是否能跑在2代主机上呢


作者: gmfj929    时间: 2016-3-29 12:35
虽然现在啥都看不懂,不过还是多谢了


作者: h375k18    时间: 2016-3-29 12:35

因为trunk的内核已经不是3.18了。
实测,对patch进行类似的修改,支持trunk没问题,不过trunk本身并不稳定,所以这里就不发trunk的vhd了。


作者: ylhv549    时间: 2016-3-29 12:35
修改的patch源代码如下:
diff --git a/config/Config-images.in b/config/Config-images.in

index a60dd50..f83317f 100644

--- a/config/Config-images.in

+++ b/config/Config-images.in

@@ -231,6 +231,16 @@ menu "Target Images"

                 select TARGET_IMAGES_PAD

                 select PACKAGE_kmod-e1000



+        config VHD_IMAGES

+                bool "Build Hyper-V image files (VHD)"

+                depends on TARGET_x86 || TARGET_x86_64

+                select GRUB_IMAGES

+                select TARGET_IMAGES_PAD

+                select PACKAGE_kmod-hyperv-balloon

+                select PACKAGE_kmod-hyperv-net-vsc

+                select PACKAGE_kmod-hyperv-util

+                select PACKAGE_kmod-hyperv-storage

+

         config VMDK_IMAGES

                 bool "Build VMware image files (VMDK)"

                 depends on TARGET_x86 || TARGET_x86_64
复制代码diff --git a/package/kernel/linux/modules/virtual.mk b/package/kernel/linux/modules/virtual.mk

index 4464fe9..d4b55ae 100644

--- a/package/kernel/linux/modules/virtual.mk

+++ b/package/kernel/linux/modules/virtual.mk

@@ -186,3 +186,85 @@ define KernelPackage/xen-pcidev/description

endef



$(eval $(call KernelPackage,xen-pcidev))

+

+#

+# Hyper-V Drives depends on x86 or x86_64.

+#

+define KernelPackage/hyperv-balloon

+  SUBMENU:=$(VIRTUAL_MENU)

+  DEPENDS:=@(TARGET_x86||TARGET_x86_64)

+  TITLE:=Microsoft Hyper-V Balloon Driver

+  KCONFIG:= \

+    CONFIG_HYPERV_BALLOON \

+    CONFIG_HYPERVISOR_GUEST=y \

+    CONFIG_PARAVIRT=n \

+    CONFIG_HYPERV=y

+  FILES:=$(LINUX_DIR)/drivers/hv/hv_balloon.ko

+  AUTOLOAD:=$(call AutoLoad,06,hv_balloon)

+endef

+

+define KernelPackage/hyperv-balloon/description

+  Microsofot Hyper-V balloon driver.

+endef

+

+$(eval $(call KernelPackage,hyperv-balloon))

+

+define KernelPackage/hyperv-net-vsc

+  SUBMENU:=$(VIRTUAL_MENU)

+  DEPENDS:=@(TARGET_x86||TARGET_x86_64)

+  TITLE:=Microsoft Hyper-V Network Driver

+  KCONFIG:= \

+    CONFIG_HYPERV_NET \

+    CONFIG_HYPERVISOR_GUEST=y \

+    CONFIG_PARAVIRT=n \

+    CONFIG_HYPERV=y

+  FILES:=$(LINUX_DIR)/drivers/net/hyperv/hv_netvsc.ko

+  AUTOLOAD:=$(call AutoLoad,35,hv_netvsc)

+endef

+

+define KernelPackage/hyperv-net-vsc/description

+  Microsoft Hyper-V Network Driver

+endef

+

+$(eval $(call KernelPackage,hyperv-net-vsc))

+

+define KernelPackage/hyperv-util

+  SUBMENU:=$(VIRTUAL_MENU)

+  DEPENDS:=@(TARGET_x86||TARGET_x86_64)

+  TITLE:=Microsoft Hyper-V Utility Driver

+  KCONFIG:= \

+    CONFIG_HYPERV_UTILS \

+    CONFIG_HYPERVISOR_GUEST=y \

+    CONFIG_PARAVIRT=n \

+    CONFIG_HYPERV=y

+  FILES:=$(LINUX_DIR)/drivers/hv/hv_util.ko

+  AUTOLOAD:=$(call AutoLoad,10,hv_util)

+endef

+

+define KernelPackage/hyperv-util/description

+  Microsoft Hyper-V Utility Driver

+endef

+

+$(eval $(call KernelPackage,hyperv-util))

+

+#

+# Hyper-V Storage Drive needs to be in kernel rather than module to load the root fs.

+#

+define KernelPackage/hyperv-storage

+  SUBMENU:=$(VIRTUAL_MENU)

+  DEPENDS:=@(TARGET_x86||TARGET_x86_64) +kmod-scsi-core

+  TITLE:=Microsoft Hyper-V Storage Driver

+  KCONFIG:= \

+    CONFIG_HYPERV_STORAGE=y \

+    CONFIG_HYPERVISOR_GUEST=y \

+    CONFIG_PARAVIRT=n \

+    CONFIG_HYPERV=y

+  FILES:=$(LINUX_DIR)/drivers/scsi/hv_storvsc.ko

+  AUTOLOAD:=$(call AutoLoad,40,hv_storvsc)

+endef

+

+define KernelPackage/hyperv-storage/description

+  Microsoft Hyper-V Storage Driver

+endef

+

+$(eval $(call KernelPackage,hyperv-storage))
复制代码diff --git a/target/linux/x86/64/config-default b/target/linux/x86/64/config-default

index 1caad74..32c7648 100644

--- a/target/linux/x86/64/config-default

+++ b/target/linux/x86/64/config-default

@@ -99,6 +99,14 @@ CONFIG_HPET_MMAP=y

CONFIG_HW_RANDOM_INTEL=y

# CONFIG_HW_RANDOM_VIRTIO is not set

CONFIG_HYPERVISOR_GUEST=y

+# CONFIG_HYPERV is not set

+# CONFIG_HYPERV_BALLOON is not set

+# CONFIG_HYPERV_NET is not set

+# CONFIG_HYPERV_STORAGE is not set

+# CONFIG_HYPERV_UTILS is not set

+# CONFIG_FB_HYPERV is not set

+# CONFIG_HID_HYPERV_MOUSE is not set

+# CONFIG_HYPERV_KEYBOARD is not set

# CONFIG_I7300_IDLE is not set

# CONFIG_IA32_EMULATION is not set

CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000


复制代码diff --git a/target/linux/x86/config-3.18 b/target/linux/x86/config-3.18

index d7a2d61..6dfdfd7 100644

--- a/target/linux/x86/config-3.18

+++ b/target/linux/x86/config-3.18

@@ -203,6 +203,17 @@ CONFIG_HW_RANDOM=y

CONFIG_HW_RANDOM_GEODE=y

CONFIG_HW_RANDOM_VIA=y

# CONFIG_HYPERVISOR_GUEST is not set

+

+# CONFIG_HYPERV is not set

+# CONFIG_HYPERV_BALLOON is not set

+# CONFIG_HYPERV_NET is not set

+# CONFIG_HYPERV_STORAGE is not set

+# CONFIG_HYPERV_UTILS is not set

+# CONFIG_FB_HYPERV is not set

+# CONFIG_HID_HYPERV_MOUSE is not set

+# CONFIG_VMWARE_BALLOON is not set

+# CONFIG_HYPERV_KEYBOARD is not set

+

CONFIG_HZ_PERIODIC=y

CONFIG_I8253_LOCK=y

# CONFIG_I8K is not set
复制代码diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile

index e7e02f1..a52ec11 100644

--- a/target/linux/x86/image/Makefile

+++ b/target/linux/x86/image/Makefile

@@ -148,6 +148,15 @@ ifneq ($(CONFIG_VMDK_IMAGES),)

   endef

endif



+ifneq ($(CONFIG_VHD_IMAGES),)

+  define Image/Build/vhd

+        rm $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd || true

+        qemu-img convert -f raw -O vpc \

+                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \

+                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd

+  endef

+endif

+

define Image/Build/gzip

         gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img

         gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img

@@ -219,6 +228,7 @@ define Image/Build

         $(call Image/Build/grub2,$(1))

         $(call Image/Build/vdi,$(1))

         $(call Image/Build/vmdk,$(1))

+        $(call Image/Build/vhd,$(1))

         $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img

   else

         $(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso


复制代码



作者: 7tik5km    时间: 2016-3-29 12:35
tedaz 于 2015-9-11 14:36 编辑

是SMP(Symmetric multiprocessing)吗?
OpenWrt的x86-64默认就支持多核心和超过800MB的内存。
下面的截图是OpenWrt x86-64启动日志,显示4个处理器被激活。

虚拟机为4核心,16GB内存,虽然很怀疑OpenWrt是否真的可以充分利用这些资源,但是确实是可以支持的。
实际上x86和x86-64的OpenWrt与一般的Linux非常接近,很多一般Linux支持的功能都可以在OpenWrt上实现。








作者: k7ymp8r    时间: 2016-3-29 12:35

哪个帖子?


作者: 3lhxwzx    时间: 2016-3-29 12:35

这种编译的vhd,在server 2012 r2上毫无问题,早就测试过。

话说,2008r2才是最困难的;
2012r2对linux的支持好了很多很多,有很多第三方的openwrt都能支持2012r2的。



作者: b3zlkb    时间: 2016-3-29 12:35

棒棒哒,晚上回去测试 。 你这个CPU 有点厉害


作者: dq0cm980    时间: 2016-3-29 12:35
为为我没搜到这个帖子



作者: u1jugg    时间: 2016-3-29 12:35
大神果然厉害


作者: y1zq24    时间: 2016-3-29 12:35
数不清 于 2015-9-11 19:35 编辑

不知道以后升级软件包是否会有影响

你这编译的机器哪找的,板子是Supermicro X10SDV-F-O ?


作者: 5bhulls    时间: 2016-3-29 12:35

(1)请问smt是什么?

(2)现在编译的版本,最大可以支持800MB内存,详见截图,请问这么大内存还不够用吗?
以我自己的实际体验,64MB内存可以支持4000个左右的并发连接+QoS,已经足够用了。









作者: zp2g5s    时间: 2016-3-29 12:35
Jasion 于 2015-9-11 17:58 编辑

所以说有点厉害,同系列的 D-1520 4核8线 缓存6M 居然也还是45W ,得益于intel 14nm工艺吧  频率如果做高点 也差不多65W的TDP


作者: 5dqwk0j    时间: 2016-3-29 12:35
感谢lz分享! 学无止境


作者: kc2swh    时间: 2016-3-29 12:35
我实装使用HY版OPENWRT最大的难点就是这个了  解决了这个问题 就实装玩起来了。


作者: cx1hfe    时间: 2016-3-29 12:35
Jasion 于 2015-9-11 17:15 编辑

就是这个帖子,我刚看到发表时间 是今天,,,,,  这样的帖子实在是太好了,
不过貌似这个 补丁应用到 trunk 版本上,昨天试了下报错了。



作者: pb9414x    时间: 2016-3-29 12:35
tedaz 于 2015-9-11 17:52 编辑


D-1540真的是神器,45W的TPD实现了8核16线程,128GB内存。


作者: oj4bk4x    时间: 2016-3-29 12:35

https://www.8x6x.com/thread-1356741-1-1.html  看楼主纠结之路


作者: zl2g19    时间: 2016-3-29 12:35

各有利弊,关键看需求。


作者: jsm015i    时间: 2016-3-29 12:35
Chaos Calmer 15.05今天正式版,可以不用RC3.

http://downloads.openwrt.org/chaos_calmer/15.05/


作者: 9ogdpe    时间: 2016-3-29 12:35
内核编译需要大量的时间去学习和了解,感谢楼主的帖子


作者: phevv4j    时间: 2016-3-29 12:35

就是支持多核心多线程,我用的是实体机双核4线程2g内存,用不了浪费啊。


作者: ci99vkk9    时间: 2016-3-29 12:35

Intel这几年技术精进不少,而且发展的方向也很给力。







欢迎光临 维塔斯科技 (http://www.8x6x.com/) Powered by Discuz! X3.2