将应用移植到 Windows on Snapdragon
发表于 2022-04-26 09:36:37

本文提及的 Qualcomm 产品由 Qualcomm Technologies, Inc./或其子公司提供。

如果由您担纲设计Windows笔记本或平板电脑,您最期望加入的是哪些功能?如今,多数用户认为自己的首要需求是:高性能、一整日,甚至数日的电池续航、随时随地持续连接到云端。

得益于我们的骁龙计算平台,这个梦想已经成为现实。市面上已有多款设备搭载该计算平台,比如:Acer Spin 7HP Elite FolioSamsung Galaxy Book Go 5G联想ThinkPad X13s,后者也是全球首台由搭载骁龙 8cx Gen 3的笔记本电脑。骁龙计算平台集成一块现代片上系统(SoC)和多项突破性技术,如人工智能、5G 毫米波和高级摄像机和音频功能,为如今的移动Windows计算体验提供所需的高性能和能效,我们将之称为Windows on Snapdragon

几个月前,在ARM DevSummit 2021大会上,我们了解到了大量使用Microsoft工具开发Windows on Snapdragon应用的信息。下面我们简要介绍几个亮点,以及这些亮点对于希望使用此创新平台的应用开发者的意义。

提高移植灵活性的新仿真选项

对于Windows 10以后的版本,您可以通过仿真运行x8632位)Windows应用程序,或原生运行ARM6464Arm Windows应用程序,无需修改即可运行现有的32Windows应用程序。要实现接近原生的性能,或运行现有的64Windows应用程序,只需要使用ARM64构建目标(即本机64位)重新编译应用程序。

过去,因为需要重新构建进程内的所有二进制文件(包括第三方库和插件),所以,移植应用程序只有两种选择:要么完全成功,要么彻底失败。现在,推出了新的Windows 11应用程序二进制接口(API)目标ARM64EC (其中EC表示仿真兼容),可以在同一进程中以接近原生性能的方式运行仿真和本机64位代码。Windows 11现在支持x64仿真,也即意味着现有的64Windows应用程序(例如,C/C + +.NETUWP等)能够不加修改直接运行,ARM64EC让您能够灵活地将应用程序移植成原生64位程序。您也可以查看ARM64EC ABI详细视图,其中也包含相关资料,指导应用程序开发者如何编写和调试编译成Arm64EC的代码

现在,如果需要,您可以从完全仿真开始,之后逐渐移植代码(比如,可以首先移植性能关键代码,然后再移植其他代码)。最重要的是,现在第三方库和插件等依赖关系可以保留成x64位,因为ARM64EC可以通过仿真运行这些第三方库和插件。这在移植时是一项巨大的优势,因为您不再需要依赖第三方,将依赖关系重新构建成原生ARM64。有关ARM64EC的更多信息,请浏览此Microsoft博客文章

开发indows on Snapdragon应用所需的条件

为了利用这些优势,首先需要一台搭载骁龙的Windows 11设备,以运行和调试您的应用程序。可以是一台单独的计算机,您可以在连接后执行远程部署和调试(详见下文)。您也可以使用任何搭载骁龙计算平台的设备,或者使用适用于Windows的骁龙开发工具包(如下所示,可通过Microsoft 购买)。这款套件又称为ECS LIVA Mini Box QC710 Desktop,外形小巧,成本低廉,非常适合Windows on Snapdragon开发。配备了骁龙 7c计算平台,支持Windows 10Windows 11,并且提供多个连接选项。

适用于Windows的骁龙开发工具包

此外,还需要Visual Studio 2022,支持ARM64EC构建目标。安装时,需选择 arm64ec > MSVC v143 VS 2022 C++ ARM64EC 构建工具,以安装必要的编译器。如果您不能使用到完整版Visual Studio 2022,只想针对Windows移植或开发64位本地应用程序,也可以下载Visual Studio Code

配置时,在Windows 11的设置中打开“开发人员模式”,以便安装和运行非Windows Store提供的未签名的应用程序(例如,UWP应用程序)。

然后,创建Visual Studio项目,为ARM64ARM64EC构建目标添加配置,具体可参考这一篇Microsoft博客文章

移植注意事项

将现有代码移植到Windows on Snapdragon时,需注意以下几点:

  • 汇编代码:标识所有汇编代码(例如,C/C++代码中的汇编代码)。由于这些代码可能是针对x86/x64指令集编写的,因此需要使用ARM64指令集重写。
  • 处理器代码:同样,标识并替换查找特定x86/x64寄存器的代码。
  • 架构假设:寻找基于x86x64目标更改程序流的条件,包括编译时间(例如,#ifdefs)和运行时条件(例如,if/else代码)。可能需要为Windows on Snapdragon添加额外的分支,或者用跨平台代码替换条件。
  • 部函数:检查内部函数,确保: a)编译器支持,b) 可以被新的构建目标预期执行。
  • 过时的依赖关系:即使ARM64EC可以运行非原生64位依赖关系,也应留意遗留及过时的依赖关系,因为这些依赖关系仍然可能存在潜在的安全风险,最好加以替换。

远程调试

除本地调试之外,您还可以远程调试indows on Snapdragon设备——使用Windows on Snapdragon设备或者其他Windows设备(如x64设备)。若要启用远程调试,请确保您有适用于ARM64的Visual Studio 2022远程工具

此外,还需要在Windows设置中启用“远程调试设备发现”。结合开发人员模式(如前文所述),可以将开发机器与远程目标机器配对。

另外,还需在Window设置中启用“设备门户”,为远程管理设备提供设备管理页面。

由于Windows 11和骁龙支持Hyper-V,您也可以在Windows on Snapdragon设备上使用虚拟机运行Windows 11,执行本地或远程测试/调试。在内核加载和内核驱动程序开发,测试不同环境设置下的部署和安装时,使用虚拟机也是十分有益的。

此外,可以使用的工具集越来越多。比如,WinDBGKDNET,用于执行内核调试。现在,Sysinternals这里将近有50个应用。

Windows终端也是很好的工具。它可以在一个窗口中运行不同的控制台,如PowerShell,并支持Windows Linux 子系统(WSL)WSL允许您使用Linux开发工具(命令行和图形),为Windows on Snapdragon开发工具集再添新成员。

此外,微软已经加入Linaro,作为Linaro’s Windows on Arm项目的成员,帮助推进开发人员套件。 您可以在Linaro项目页面找到有关LLVMPython等相关工具的信息。

现在,各种工具齐全,将应用程序移植到Windows on Snapdragon的时机可谓前所未有,而且移植工作也更加简单。不但过程简单,而且您的应用程序也将在始终在线的设备上运行,为用户提供他们梦想的移动Windows体验。

其他博客及资源

如需了解有关Windows on Snapdragon开发的详细信息,请在YouTube上浏览ARM DEVSUMMIT 2021的以下视频:

  • 下一代Windows on Arm开发
  • Windows on Arm开发简介
  • Windows on Arm开发和调试

另外,请浏览以下资源:

  • 骁龙8cx Gen 3计算平台
  • QDN页面的Windows on Snapdragon
  • 骁龙开发工具包现可用于在ARM平台测试Windows应用
  • 始终开启、始终连接:促进Windows 10 on ARM的应用
  • Windows on ARM开发如何使用这些工具?
  • 游戏开发人员:Windows 10 ARM64支持Unreal Engine

骁龙是Qualcomm Technologies, Inc./或其子公司的产品。

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】