Chiphell - 分享与交流用户体验

 找回密码
 加入我们
搜索
      
查看: 37975|回复: 212

[NAS] 非官方编译,Hyper-V的Openwrt x86和x86-64版,Chaos Calmer正式版

  [复制链接]
发表于 2015-9-11 10:47 | 显示全部楼层 |阅读模式
本帖最后由 tedaz 于 2017-2-17 21:27 编辑

鉴于很多朋友发消息,需要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的==
10.png

20.PNG



 楼主| 发表于 2015-9-11 11:08 | 显示全部楼层
修改的patch源代码如下:
  1. diff --git a/config/Config-images.in b/config/Config-images.in
  2. index a60dd50..f83317f 100644
  3. --- a/config/Config-images.in
  4. +++ b/config/Config-images.in
  5. @@ -231,6 +231,16 @@ menu "Target Images"
  6.                  select TARGET_IMAGES_PAD
  7.                  select PACKAGE_kmod-e1000

  8. +        config VHD_IMAGES
  9. +                bool "Build Hyper-V image files (VHD)"
  10. +                depends on TARGET_x86 || TARGET_x86_64
  11. +                select GRUB_IMAGES
  12. +                select TARGET_IMAGES_PAD
  13. +                select PACKAGE_kmod-hyperv-balloon
  14. +                select PACKAGE_kmod-hyperv-net-vsc
  15. +                select PACKAGE_kmod-hyperv-util
  16. +                select PACKAGE_kmod-hyperv-storage
  17. +
  18.          config VMDK_IMAGES
  19.                  bool "Build VMware image files (VMDK)"
  20.                  depends on TARGET_x86 || TARGET_x86_64
复制代码
  1. diff --git a/package/kernel/linux/modules/virtual.mk b/package/kernel/linux/modules/virtual.mk
  2. index 4464fe9..d4b55ae 100644
  3. --- a/package/kernel/linux/modules/virtual.mk
  4. +++ b/package/kernel/linux/modules/virtual.mk
  5. @@ -186,3 +186,85 @@ define KernelPackage/xen-pcidev/description
  6. endef

  7. $(eval $(call KernelPackage,xen-pcidev))
  8. +
  9. +#
  10. +# Hyper-V Drives depends on x86 or x86_64.
  11. +#
  12. +define KernelPackage/hyperv-balloon
  13. +  SUBMENU:=$(VIRTUAL_MENU)
  14. +  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  15. +  TITLE:=Microsoft Hyper-V Balloon Driver
  16. +  KCONFIG:= \
  17. +    CONFIG_HYPERV_BALLOON \
  18. +    CONFIG_HYPERVISOR_GUEST=y \
  19. +    CONFIG_PARAVIRT=n \
  20. +    CONFIG_HYPERV=y
  21. +  FILES:=$(LINUX_DIR)/drivers/hv/hv_balloon.ko
  22. +  AUTOLOAD:=$(call AutoLoad,06,hv_balloon)
  23. +endef
  24. +
  25. +define KernelPackage/hyperv-balloon/description
  26. +  Microsofot Hyper-V balloon driver.
  27. +endef
  28. +
  29. +$(eval $(call KernelPackage,hyperv-balloon))
  30. +
  31. +define KernelPackage/hyperv-net-vsc
  32. +  SUBMENU:=$(VIRTUAL_MENU)
  33. +  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  34. +  TITLE:=Microsoft Hyper-V Network Driver
  35. +  KCONFIG:= \
  36. +    CONFIG_HYPERV_NET \
  37. +    CONFIG_HYPERVISOR_GUEST=y \
  38. +    CONFIG_PARAVIRT=n \
  39. +    CONFIG_HYPERV=y
  40. +  FILES:=$(LINUX_DIR)/drivers/net/hyperv/hv_netvsc.ko
  41. +  AUTOLOAD:=$(call AutoLoad,35,hv_netvsc)
  42. +endef
  43. +
  44. +define KernelPackage/hyperv-net-vsc/description
  45. +  Microsoft Hyper-V Network Driver
  46. +endef
  47. +
  48. +$(eval $(call KernelPackage,hyperv-net-vsc))
  49. +
  50. +define KernelPackage/hyperv-util
  51. +  SUBMENU:=$(VIRTUAL_MENU)
  52. +  DEPENDS:=@(TARGET_x86||TARGET_x86_64)
  53. +  TITLE:=Microsoft Hyper-V Utility Driver
  54. +  KCONFIG:= \
  55. +    CONFIG_HYPERV_UTILS \
  56. +    CONFIG_HYPERVISOR_GUEST=y \
  57. +    CONFIG_PARAVIRT=n \
  58. +    CONFIG_HYPERV=y
  59. +  FILES:=$(LINUX_DIR)/drivers/hv/hv_util.ko
  60. +  AUTOLOAD:=$(call AutoLoad,10,hv_util)
  61. +endef
  62. +
  63. +define KernelPackage/hyperv-util/description
  64. +  Microsoft Hyper-V Utility Driver
  65. +endef
  66. +
  67. +$(eval $(call KernelPackage,hyperv-util))
  68. +
  69. +#
  70. +# Hyper-V Storage Drive needs to be in kernel rather than module to load the root fs.
  71. +#
  72. +define KernelPackage/hyperv-storage
  73. +  SUBMENU:=$(VIRTUAL_MENU)
  74. +  DEPENDS:=@(TARGET_x86||TARGET_x86_64) +kmod-scsi-core
  75. +  TITLE:=Microsoft Hyper-V Storage Driver
  76. +  KCONFIG:= \
  77. +    CONFIG_HYPERV_STORAGE=y \
  78. +    CONFIG_HYPERVISOR_GUEST=y \
  79. +    CONFIG_PARAVIRT=n \
  80. +    CONFIG_HYPERV=y
  81. +  FILES:=$(LINUX_DIR)/drivers/scsi/hv_storvsc.ko
  82. +  AUTOLOAD:=$(call AutoLoad,40,hv_storvsc)
  83. +endef
  84. +
  85. +define KernelPackage/hyperv-storage/description
  86. +  Microsoft Hyper-V Storage Driver
  87. +endef
  88. +
  89. +$(eval $(call KernelPackage,hyperv-storage))
复制代码
  1. diff --git a/target/linux/x86/64/config-default b/target/linux/x86/64/config-default
  2. index 1caad74..32c7648 100644
  3. --- a/target/linux/x86/64/config-default
  4. +++ b/target/linux/x86/64/config-default
  5. @@ -99,6 +99,14 @@ CONFIG_HPET_MMAP=y
  6. CONFIG_HW_RANDOM_INTEL=y
  7. # CONFIG_HW_RANDOM_VIRTIO is not set
  8. CONFIG_HYPERVISOR_GUEST=y
  9. +# CONFIG_HYPERV is not set
  10. +# CONFIG_HYPERV_BALLOON is not set
  11. +# CONFIG_HYPERV_NET is not set
  12. +# CONFIG_HYPERV_STORAGE is not set
  13. +# CONFIG_HYPERV_UTILS is not set
  14. +# CONFIG_FB_HYPERV is not set
  15. +# CONFIG_HID_HYPERV_MOUSE is not set
  16. +# CONFIG_HYPERV_KEYBOARD is not set
  17. # CONFIG_I7300_IDLE is not set
  18. # CONFIG_IA32_EMULATION is not set
  19. CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
复制代码
  1. diff --git a/target/linux/x86/config-3.18 b/target/linux/x86/config-3.18
  2. index d7a2d61..6dfdfd7 100644
  3. --- a/target/linux/x86/config-3.18
  4. +++ b/target/linux/x86/config-3.18
  5. @@ -203,6 +203,17 @@ CONFIG_HW_RANDOM=y
  6. CONFIG_HW_RANDOM_GEODE=y
  7. CONFIG_HW_RANDOM_VIA=y
  8. # CONFIG_HYPERVISOR_GUEST is not set
  9. +
  10. +# CONFIG_HYPERV is not set
  11. +# CONFIG_HYPERV_BALLOON is not set
  12. +# CONFIG_HYPERV_NET is not set
  13. +# CONFIG_HYPERV_STORAGE is not set
  14. +# CONFIG_HYPERV_UTILS is not set
  15. +# CONFIG_FB_HYPERV is not set
  16. +# CONFIG_HID_HYPERV_MOUSE is not set
  17. +# CONFIG_VMWARE_BALLOON is not set
  18. +# CONFIG_HYPERV_KEYBOARD is not set
  19. +
  20. CONFIG_HZ_PERIODIC=y
  21. CONFIG_I8253_LOCK=y
  22. # CONFIG_I8K is not set
复制代码
  1. diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
  2. index e7e02f1..a52ec11 100644
  3. --- a/target/linux/x86/image/Makefile
  4. +++ b/target/linux/x86/image/Makefile
  5. @@ -148,6 +148,15 @@ ifneq ($(CONFIG_VMDK_IMAGES),)
  6.    endef
  7. endif

  8. +ifneq ($(CONFIG_VHD_IMAGES),)
  9. +  define Image/Build/vhd
  10. +        rm $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd || true
  11. +        qemu-img convert -f raw -O vpc \
  12. +                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
  13. +                $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vhd
  14. +  endef
  15. +endif
  16. +
  17. define Image/Build/gzip
  18.          gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img
  19.          gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img
  20. @@ -219,6 +228,7 @@ define Image/Build
  21.          $(call Image/Build/grub2,$(1))
  22.          $(call Image/Build/vdi,$(1))
  23.          $(call Image/Build/vmdk,$(1))
  24. +        $(call Image/Build/vhd,$(1))
  25.          $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img
  26.    else
  27.          $(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso
复制代码

发表于 2015-9-11 11:29 来自手机 | 显示全部楼层
虽然现在啥都看不懂,不过还是多谢了
发表于 2015-9-11 12:24 | 显示全部楼层
lz知道怎么编译支持大内存和smt的op吗
发表于 2015-9-11 12:25 | 显示全部楼层
感谢lz分享! 学无止境
 楼主| 发表于 2015-9-11 12:56 | 显示全部楼层
yysqu 发表于 2015-9-11 12:24
lz知道怎么编译支持大内存和smt的op吗

(1)请问smt是什么?

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

40.png

发表于 2015-9-11 13:03 | 显示全部楼层
tedaz 发表于 2015-9-11 12:56
(1)请问smt是什么?

(2)现在编译的版本,最大可以支持800MB内存,详见截图,请问这么大内存还不够用 ...

就是支持多核心多线程,我用的是实体机双核4线程2g内存,用不了浪费啊。
 楼主| 发表于 2015-9-11 14:31 | 显示全部楼层
本帖最后由 tedaz 于 2015-9-11 14:36 编辑
yysqu 发表于 2015-9-11 13:03
就是支持多核心多线程,我用的是实体机双核4线程2g内存,用不了浪费啊。 ...

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

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

50.PNG
60.PNG
发表于 2015-9-11 16:59 | 显示全部楼层
为为我没搜到这个帖子
 楼主| 发表于 2015-9-11 17:02 | 显示全部楼层
Jasion 发表于 2015-9-11 16:59
为为我没搜到这个帖子

哪个帖子?
发表于 2015-9-11 17:09 | 显示全部楼层
内核编译需要大量的时间去学习和了解,感谢楼主的帖子
发表于 2015-9-11 17:10 | 显示全部楼层
我实装使用HY版OPENWRT最大的难点就是这个了  解决了这个问题 就实装玩起来了。
发表于 2015-9-11 17:12 | 显示全部楼层
本帖最后由 Jasion 于 2015-9-11 17:15 编辑

就是这个帖子,我刚看到发表时间 是今天,,,,,  这样的帖子实在是太好了,
不过貌似这个 补丁应用到 trunk 版本上,昨天试了下报错了。
发表于 2015-9-11 17:14 | 显示全部楼层
Chaos Calmer 15.05今天正式版,可以不用RC3.

http://downloads.openwrt.org/chaos_calmer/15.05/
 楼主| 发表于 2015-9-11 17:22 | 显示全部楼层
Jasion 发表于 2015-9-11 17:12
就是这个帖子,我刚看到发表时间 是今天,,,,,  这样的帖子实在是太好了,
不过貌似这个 补丁应用到 t ...

因为trunk的内核已经不是3.18了。
实测,对patch进行类似的修改,支持trunk没问题,不过trunk本身并不稳定,所以这里就不发trunk的vhd了。
发表于 2015-9-11 17:24 | 显示全部楼层
tedaz 发表于 2015-9-11 17:22
因为trunk的内核已经不是3.18了。
实测,对patch进行类似的修改,支持trunk没问题,不过trunk本身并不稳 ...

15.05今天发布了,有没有强迫症发作想要去编一个呢
 楼主| 发表于 2015-9-11 17:27 | 显示全部楼层
数不清 发表于 2015-9-11 17:14
Chaos Calmer 15.05今天正式版,可以不用RC3.

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

这个编译使用的是git迁出openwrt的chaos calmer源代码,理论上也是15.05的正式版。
git show显示的结果如下:
  1. commit e51ee1779fccc2afaf2eaa387081b0ef56df7263
  2. Author: nbd <[email protected]>
  3. Date:   Fri Sep 11 08:49:42 2015 +0000

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

  5.     Signed-off-by: Felix Fietkau <[email protected]>

  6.     git-svn-id: svn:[email protected] 3c298f89-4303-0410-b956-a3cf2f4a3e73
复制代码


 楼主| 发表于 2015-9-11 17:31 | 显示全部楼层
Jasion 发表于 2015-9-11 17:24
15.05今天发布了,有没有强迫症发作想要去编一个呢

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

用源代码编译就是有这个好处,只要有人提交了代码,是需要pull一下,编译得到的就是最新版。
发表于 2015-9-11 17:46 | 显示全部楼层
tedaz 发表于 2015-9-11 17:31
今天编译时,已经git pull更新过了,所以目前上传的镜像应该已经是正式版的了。
git显示的版本为r46845。 ...

棒棒哒,晚上回去测试 。 你这个CPU 有点厉害
 楼主| 发表于 2015-9-11 17:50 来自手机 | 显示全部楼层
本帖最后由 tedaz 于 2015-9-11 17:52 编辑
Jasion 发表于 2015-9-11 17:46
棒棒哒,晚上回去测试 。 你这个CPU 有点厉害


D-1540真的是神器,45W的TPD实现了8核16线程,128GB内存。
发表于 2015-9-11 17:55 | 显示全部楼层
本帖最后由 Jasion 于 2015-9-11 17:58 编辑
tedaz 发表于 2015-9-11 17:50
D-1540真的是神奇,45W的TPD实现了8核16线程,128GB内存。

所以说有点厉害,同系列的 D-1520 4核8线 缓存6M 居然也还是45W ,得益于intel 14nm工艺吧  频率如果做高点 也差不多65W的TDP
发表于 2015-9-11 18:04 | 显示全部楼层
相当给力,但是还是喜欢使用实体的路由器
 楼主| 发表于 2015-9-11 18:41 | 显示全部楼层
Jasion 发表于 2015-9-11 17:55
所以说有点厉害,同系列的 D-1520 4核8线 缓存6M 居然也还是45W ,得益于intel 14nm工艺吧  频率如果做高 ...

Intel这几年技术精进不少,而且发展的方向也很给力。
 楼主| 发表于 2015-9-11 18:41 | 显示全部楼层
luyue7 发表于 2015-9-11 18:04
相当给力,但是还是喜欢使用实体的路由器

各有利弊,关键看需求。
发表于 2015-9-11 19:25 | 显示全部楼层
楼主是否测试过 Hyper-V 是否能跑在2代主机上呢
发表于 2015-9-11 19:25 | 显示全部楼层
本帖最后由 数不清 于 2015-9-11 19:35 编辑
tedaz 发表于 2015-9-11 17:27
这个编译使用的是git迁出openwrt的chaos calmer源代码,理论上也是15.05的正式版。
git show显示的结果如 ...

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

你这编译的机器哪找的,板子是Supermicro X10SDV-F-O ?
发表于 2015-9-11 19:38 | 显示全部楼层
数不清 发表于 2015-9-11 19:25
不知道以后升级软件包是否会有影响

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

https://www.chiphell.com/thread-1356741-1-1.html  看楼主纠结之路
发表于 2015-9-11 19:50 | 显示全部楼层
大神果然厉害
发表于 2015-9-11 19:53 | 显示全部楼层
tedaz 发表于 2015-9-11 14:31
是SMP(Symmetric multiprocessing)吗?
OpenWrt的x86-64默认就支持多核心和超过800MB的内存。
下面的截 ...

x64用过了,啥都好,可惜不兼容32位的程序(比如迅雷xware),而且没有提供兼容库。
 楼主| 发表于 2015-9-11 20:14 | 显示全部楼层
Jasion 发表于 2015-9-11 19:25
楼主是否测试过 Hyper-V 是否能跑在2代主机上呢

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

话说,2008r2才是最困难的;
2012r2对linux的支持好了很多很多,有很多第三方的openwrt都能支持2012r2的。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2021-9-18 05:33 , Processed in 0.011054 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2007-2021 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表