arm汇编程序的典型应用
Windows生态系统的大部分生命都与一个处理器家族相关联:英特尔的x86和兼容的设备(例如AMD的)。 Windows NT与其他处理器家族的短暂争夺并没有持续多久,在发布了一些版本之后,MIP和DEC的Alpha被搁置了。 甚至英特尔的Itanium也没有持续很长时间,Windows Server 2008 R2是支持它的最新版本。
但是随着Windows 8的发布,英特尔对Windows平台的统治开始发生真正的变化。新版Windows RT将其带入了新的处理器体系结构,并支持ARM不断增长的硬件家族。 功能有限的Windows RT寿命很短,因此除了Microsoft最初的Surface RT之外,它几乎没有硬件支持。 但是Windows 10的IoT Core版本和基于NT内核的Windows 10 Mobile都存在Windows对ARM的支持。
在ARM上介绍Windows
2017年底,微软宣布Windows on ARM ,这是Windows 10的完整版本,它将在最新一代的ARM处理器上运行。 它是由高通公司开发的,包括一个仿真层,该层可以运行32位x86代码以及为ARM32编译的UWP应用。 该模拟器运行良好,并且代码无法在其中运行Microsoft快速发布了经过修改的配置,这些配置可以使这些应用程序运行。
使用高通公司的LTE Snapdragon片上系统(SoC)硬件的始终在线,始终连接的硬件很有吸引力。 它可以比智能手机更有效地支持移动业务场景,并具有18个小时或更长的电池寿命,从而确保即使在12个小时轮班结束时,移动PC仍然可以在线。 像所有PC一样,这些机器也需要软件,这些软件应尽最大可能发挥作用。
不幸的是,ARM上的Windows依赖于32位代码是一个限制,因为现代代码倾向于针对64位系统进行编译,从而支持Windows在Intel系统上的默认安装。 因此,尽管您可能有一个应用程序要安装在基于ARM的Windows PC上,但没有32位版本,则可能不支持该应用程序。
对于第一批设备来说,对64位的支持是一个很大的问题,这些设备运行的是高端智能手机级Snapdragon 845处理器,性能受到限制。 但是,高通公司ARM处理器的发展路线图表明,性能将在未来几年内显着提高,并且当前的设备已经在使用功能更强大的Snapdragon850。用于新计算机的代码需要获得最佳性能,并避免仿真开销。
如今,在现代设备上运行本机ARM64代码消除了与运行模拟x86代码相关的任何惩罚,同时简化了代码从一种处理器类型到另一种处理器类型的移植。
Visual Studio现在支持ARM64
Beta版本的Visual Studio 15更新现在已有ARM 64位支持。 但是,它还没有投入生产,尽管您可以将64位ARM应用程序的构建侧面加载到测试设备上,但是您不能通过公共或私有Windows应用商店分发这些应用程序。 随着Visual Studio 15.9的发布,这一切都发生了变化,该版本使ARM64支持成为正式支持,并且可以选择通过Windows Store分发代码。
Microsoft鼓励开发人员构建UWP应用程序的 ARM64版本,但Visual Studio 15.9还支持ARM64 C ++代码。 这是一个重要的更改,因为您可以通过安装一组新的Visual C ++编译器和库来使用它来交付复杂应用程序的本机版本。 您需要做的就是设置一个新的构建目标并编译您的代码。 现有的Win32代码应该可以进行很少的编译,并且现在可以使用Microsoft的Desktop Bridge将您的代码直接传递到Windows应用商店,以制作与Windows应用商店兼容的软件包。
另外,Visual Studio的安装程序工具将构建与ARM兼容的安装包,因此可以从现有的本地部署工具中安装代码。 桌面桥包装的代码也将从Intune的公司商店中安装,这为您提供了另一种选择来控制对任何ARM64业务关键代码的访问。
更新现有项目以针对ARM64
向Visual Studio项目添加ARM64支持非常容易 :
- 对于C ++ UWP,您需要做的就是添加C ++ Universal Windows Platform工具。 安装它们后,您可以使用项目配置工具为ARM64添加新的解决方案平台。 如果您的依赖项支持该平台,请保存代码并将ARM64用作构建目标。
- 基于.Net的UWP应用需要针对Windows 10的受支持版本,并在项目文件中具有ARM64的新属性组。 与C ++一样,为ARM64创建一个新的解决方案平台,并构建和测试您的代码。
Microsoft 提供了有关将现有UWP应用移植到ARM和ARM64的准则。 要记住的最重要的事情之一是,尽管ARM设备上的Windows具有内置的蜂窝调制解调器,但它们不是智能手机。 我桌上的HP Envy X2是Surface尺寸的设备,具有大屏幕,并且没有智能手机上的任何按钮。 为Windows 10移动版编写的代码将移植到ARM上的Windows,但它需要一个全新的UI来解决在移动PC和智能手机中缺少的设备按钮和更大的屏幕空间的问题。
UWP尚未完全替代.Net Framework ,因此在将现有.Net代码移植到UWP for ARM时,需要谨慎行事。 某些.Net组件尚未移植到ARM,因此您可能需要与供应商协商以获取针对新平台编译的版本。
另外,要调试ARM64代码,您需要Windows on ARM设备。 作为构建过程的一部分,将代码侧面加载到测试硬件上,然后使用Visual Studio的远程调试工具设置断点并访问测试设备上的堆栈。
构建本机ARM驱动程序
Visual Studio 15.9的一个重要方面是对构建基于ARM64的驱动程序的支持 。 将Windows Driver Kit与ARM和ARM64 C ++编译器结合使用,可以基于Microsoft的示例代码构建新的驱动程序,也可以修改现有的Windows驱动程序代码。 由于ARM上的Windows是熟悉的Windows内核,因此应该可以进行重新编译。
但是,两个平台之间的体系结构差异可能会导致问题。 驱动程序的级别越低,可能就需要进行更多的工作,尽管这应该仅属于设备制造商。 自定义USB连接的硬件不应过多依赖于ARM或x86,从而将风险降至最低。
翻译自: https://www.infoworld.com/article/3321931/how-to-build-64-bit-apps-for-windows-on-arm.html
arm汇编程序的典型应用