将您的应用程序移植到Windows on Snapdragon上
发表于 2024-08-01 14:07:04

编者注:本篇博文于2024年7月更新,以包含提供微软CoPilot+PC experiences的最新骁龙人工智能个人电脑设备。最初发表于2022年4月。

如果您要设计梦寐以求的Windows笔记本电脑或平板电脑,您最想要的功能是什么?如今,大多数用户将高性能、全天/多日电池续航时间以及在任何地方与云保持永久连接作为其最优先的需求。

目前,本公司的骁龙X系列计算平台Surface Pro惠普Elitebook Ultra戴尔Latitude 7455联想ThinkPad T14s 等人工智能个人电脑提供支持,从而实现这一梦想。骁龙计算平台包括现代片上系统和最高NPU能效比的突破性技术,并具有可为用户提供构建下一代人工智能体验所需要的性能和功耗效率的AI能力。

本文介绍了如何轻松的将您的x86应用程序优化至由骁龙X系列平台所支持的Arm兼容应用程序。

提高移植灵活性的模拟选项

从Windows 10开始,您可以通过模拟器运行x86(32位)Windows应用程序,也可以本机运行64位Windows应用程序,这样您就可以运行现有的32位Windows应用程序而无需任何修改。如要从本机性能中获益或运行现有的64位Windows应用程序,只需使用本机64位构建目标文档对其进行重新编译。

传统上,移植应用程序是一件要么全有要么全无的事情,因为进程中的所有二进制文件(包括第三方程序库和插件)都需要重新构建。但是,使用名为 ARM64EC(EC 代表兼容性模拟)的Windows 11应用程序二进制接口(应用程序接口),可以在同一进程中同时使用模拟器和本机运行64位代码,性能接近在本机直接运行。而Windows 11支持x64仿真,可以确保运行现有的64位Windows应用程序(例如:C/ c++、.NET, UWP等),同时无需进行任何修改,从而使您能够灵活地将应用程序增量移植到本机64位。

如要获得应用程序开发人员编写和调试为64位Windows应用程序所编译代码的更多信息,请查看该ARM64EC系统二进制接口详细视图

如果需要,您可以从完全模拟开始,并随着时间的推移移植部分代码(例如,您可以先专注于关键性能代码,然后移植其他代码)。最重要的是,第三方程序库和插件等依赖项现在可以保持为x64,因为您可以通过模拟对其运行。这在移植方面是一个巨大的胜利,因为您不再需要依赖第三方来重新构建本机x64的依赖项。有关在Windows上构建本机ARM兼容应用程序的更多信息,请参阅 微软公司发布的本篇文章

Windows on Snapdragon上开发Windows所需要的内容

如要利用这些优势,您首先需要一个由骁龙驱动的Windows 11设备,并在该设备上运行并调试您的应用程序。该设备可以是一台单独的机器,您可以连接到设备上并进行远程部署和调试(下面将详细论述)。您可以使用任何由Snapdragon计算平台驱动的设备,也可以使用用于Windows的骁龙开发人员工具包(如下所示)。该工具包以紧凑的形式提供了一个具有成本效益的解决方案,这对于Windows on Snapdragon的开发非常有用。该工具包由 骁龙X Elite计算平台提供支持,可支持Windows 11,并包括若干连接选项。

用于Windows的骁龙开发人员工具包

您还需要支持64位本机应用程序的Visual Studio 2022。在安装过程中,请务必选择 arm64ec > MSVC v143 - VS 2022 C++ ARM64EC构建工具来安装必要的编译器。如果您没有完整版的Visual Studio 2022,并且仅想移植或开发64位的本机Windows应用程序,您可以下载VSCode。

在配置端,在Windows 11的设置中打开开发人员模式。通过该模式,您可以从Windows Store的外部安装和运行未签名的应用程序(例如:通用windows平台应用程序)。然后,创建一个Visual Studio项目,并添加ARM64或ARM64EC构建目标的配置,参考这篇微软公司发布的博文

移植注意事项

在将现有代码移植到Windows on Snapdragon上时,请注意以下事项:

  • 汇编代码:检查所有汇编代码(例如,嵌入在C/C++代码中的汇编代码)。因为该代码很可能是为x86/x64指令集编写,所以需要使用x64指令集重写。
  • 处理器特定代码:同样,识别和替查找换特定x86/x64寄存器的代码。
  • 架构假设:查找基于x86和x64目标的改变程序流程的条件。其中包括编译时(例如:#ifdefs)和运行时条件(例如,if/else语句)。您可能需要为Windows on Snapdragon添加额外的分支,或者用跨平台代码替换条件。
  • 内联函数:检查内联函数,以确保:a)编译器对其支持;b)它们按照新构建目标的预期执行。
  • 过时依赖项:尽管ARM64EC可以运行非本机64位依赖项,但您应该注意遗留的和过时的依赖项,因为它们仍然存在潜在的安全风险,可能更值得替换。

远程调试

除了本地调试之外,您还可以远程调试Windows on Snapdragon设备——无论是通过Windows on Snapdragon设备还是其他Windows设备(例如,x64设备)。如要启用远程调试,请确保您拥有用于ARM64 Visual Studio 2022的远程工具

您同样需要在Windows设置中启用 设备发现远程调试 。结合 开发人员模式(前面提到过),可确保您将开发机器与远程目标机器配对。

请确保在Windows设置中启用设备门户。这样可提供对设备进行远程管理的设备管理页面。

由于Windows 11和骁龙均支持 Hyper-V,您还可以在Windows on Snapdragon设备上的虚拟机中运行Windows 11,以执行本地或远程测试/调试。启动该类虚拟机对于内核加载和内核驱动程序开发,以及在不同环境设置下测试各项部署和安装非常有用。

不要忘了利用不断发展的工具集 – 使用 WinDBG以及KDNET 来执行内核调试。在此处提供了现有的大约50个Sysinternals 应用程序。

Windows终端同样值得一试。它可以在同一个窗口中运行PowerShell等不同的控制台,并支持Linux的Windows子系统(WSL)。通过WSL,您可以使用Linux开发工具(命令行和图形)来进一步增强Windows on Snapdragon开发工具集。

此外,微软和高通均为Linaro Windows on Arm项目的成员,以帮助推进开发人员套件。您可以在Linaro的项目页面上找到有关LLVM、Python等特定工具的信息。

如要将您的应用程序移植到Windows on Snapdragon上,从来没有比现在更好、更简单的方式了。这不仅是一个简单的过程,而且您的应用程序将在一个始终在线的设备上运行,从而为您的用户提供更高水平的Windows体验。

额外博文和资源

如要获得有关Windows on Snapdragon开发的更多详细信息,请查看以下资源:

骁龙属于高通科技公司和/或其子公司产品。

在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通公司或其子公司(以下简称为“高通公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通公司或任何其他方的赞同或表述。本网站同样可以提供非高通公司网站和资源的链接或参考。高通公司对于可能通过本网站引用、访问、或链接的任何非高通公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。

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