包教包会:龙芯3A5000上尝试运行任意Windows软件

  几个月之前,龙芯中科刚放出可用的二进程翻译模块时,我写了一篇《在龙芯3A5000上运行Windows程序》。

guee:在龙芯3A5000上运行Windows程序237 赞同 · 120 评论文章

  很多朋友说那篇文章中的操作太复杂。我写的时候,没有觉得操作难度大,可现在回头去看,也觉得过于繁琐。于是重写一篇,使用更简单的方法达到同样的目的。下面的视频与本文配套,可一起食用:

包教包会:龙芯3A5000安装Loongnix系统和运行Windows软件2365 播放 · 20 赞同视频

实际步骤仅三步:

  1. 安装Loongnix或UOS,并更新系统;

  2. 安装 Wine 和 Q4Wine;

  3. 双击运行 exe。

  第1 步可以忽略,第3步可以忽略——仅一个步骤。但为了显得文章内容丰富,下面还是详细地说一说。

龙芯二进制翻译技术简介:

  龙芯的CPU不是x86架构(指令集),当前最新的3A5000、3B5000、3C5000……系列CPU产品都是使用的龙芯中科自主设计的LoongArch架构(指令集)。不同架构的CPU不能相互兼容二进制程序,比如在ARM的CPU上就不能直接安装运行x86版的Windows,在使用Intel/AMD的CPU的电脑上也不能安装ARM版本的Android。有的读者会问:“凤凰OS、技德OS也是Android,不就可以在电脑上安装吗?”那是因为它们是x86版本的Android,就可以安装在x86架构的电脑上,但如果想要在ARM手机/平板上运行,那它们就得提供ARM的版本。

  操作系统区分CPU架构(指令集),应用程序不但区分CPU架构,还要区分操作系统,分版本发布。我们知道绝大多数应用软件都只有x86/Windows的版本,也有些软件只有Android或IOS版,或者同时发布多种架构多个平台的版本。现在越来越多的国产软件开始发布支持国产CPU和Linux系统的版本,国产硬件和软件助推“信息技术应用创新产业”发展。

  x86架构的CPU高端型号已经有多次对我国禁售的事件, Windows、IOS、Android也都是来自美国的操作系统,随时都有被中断供应和服务的风险。现在与技术研究和生产力相关的硬件和软件被“卡脖子”的问题越来越不能忽视,因此建立独立的硬件和软件生态迫在眉睫,只有自力更生才能保障国家各个领域和行业的安全。自力更生不是拒绝国际合作,而是要实现“以我为主”的国际合作及技术交流。海纳百川、开放包容、兼容并蓄、博采众长、实现和谐发展、和平共处。

  龙芯LoongArch架构发布还不到一年,软件生态建设以国内软件企业为主,不到一年的时间,在桌面、服务器上的应用深度和广度已经远超诞生了十几年的RISC-V,与ARM的桌面、服务器生态水平相当。然而与x86/Windows相比仍然远远不如,特别是党政办公和一些生产环境的软件非常依赖Windows,也不能轻易转移到龙芯/Linux平台,如果不能脱离x86/Windows环境,又如何用龙芯CPU保障信息和生产安全呢?

  龙芯的解决方案就是“二进制翻译”,通过二进制翻译在LoongArch架构的Linux上运行x86架构的Linux/Window程序。龙芯的“二进制翻译”方案是以专门设计的CPU硬件指令来加速二进制翻译的过程,是硬件与软件有机结合的产物,龙芯中科把它命名为LAT(Loongson Architecture Translator),中文名为“龙芯体系结构翻译器”。翻译x86应用的叫“LATX”,翻译ARM应用的叫“LATA”,目前还只有LATX,可以运行x86架构的应用程序。

  纯软件的二进制翻译技术早已存在,但都存在翻译运行时效率极低的问题。有一些软件使用了一些取巧的方法,比如在ARM架构的Linux上运行x86的程序时,x86程序调用的系统API也是x86的,但翻译软件不翻译API接口内部的二进制代码,而直接转向为对本机系统API的调用,就能省去大量的翻译任务。如果应用程序的大多数功能和计算是通过系统API实现,就能达到较高的运行效率,因为系统API不用翻译。但是当遇到对系统API调用极少的代码时,翻译运行的效率就会低于10%,这种方式不能从根本上解决二进制翻译效率低下的问题。

  上方的截图中,左侧的终端窗口中是在3A5000/Loongnix上测试p7zip的情况,仅进行了单线程测试。

  得分3121的是LoongArch64架构原生的p7zip(16.02)Linux版,得分1877的是使用LATX翻译运行的x86_64架构的p7zip(16.02)Linux版,翻译运行效率为60%。并不是任何软件都是60%的翻译运行效率,这与LATX对x86指令支持程度有关,比如AES加密就很慢,LATX还没有对相关指令实现优化支持,程序以i386基本指令运行。也有一些测试超过60%的效率,这就是优化得较好的情况。

  右下方是Unigine游戏引擎的Benchmark程序,Unigine游戏引擎有Linux的版本,这里运行的就是x86_64架构的Linux版本。不过由于LATX尚不完善,Benchmark的3D动画还不能正常显示,但能说明LATX不只支持命令行程序,也支持图形化界面的软件。我还尝试了Mathematica这款著名的数学工具,运行时提示Qt初始化错误,应该是由于龙芯LATX提供的x86 Linux运行库中暂缺Qt库的原因。

  下面的截图是在飞腾D2000/UOS上测试p7zip的情况,使用BOX86进行二进制翻译,也仅进行了单线程测试。因UOS软件源中未提供BOX64,故翻译运行的p7zip是32位x86版本,测试成绩可能会比64位版本略低一些。

  得分2381的是ARM64架构原生的p7zip(16.02)Linux版,得分657的是使用BOX86翻译运行的x86架构的p7zip(16.02 32bit)Linux版,翻译运行效率为28%。

  龙芯当前的LATX还处于alpha测试版状态,无论是应用程序本身的二进制代码,还是对系统API的调用,它都全部翻译执行,非常粗暴。我非常期待龙芯的LATX结合软件优化方案之后的状态,兼容并蓄、博采众长,之后翻译运行时的平均效率必然会更高。

  注:几天前龙芯更新的LATX 1.1.3-alpha版仍然是在粗暴地完全翻译x86应用程序,以及应用程序使用的所有库文件及接口。因为单纯的硬件加速二进制翻译还没有达到最佳状态,所以可能就没有急于加上对系统API调用转向、以及静态翻译等各种纯软件翻译方案的优化技巧,来达到更高的翻译运行效率。

在龙芯3A5000上使用LATX:

  目前在龙芯自己的Linux发行版Loongnix中和统信的UOS专业版(LoongArch)中已经内置了LATX,可以直接运行x86架构的Linux软件。银河麒麟我未测试,不知道是否内置,也不确定是否可以安装LATX的软件包。如果要运行Windows软件,那么还需要安装Windows API兼容层软件wine。wine是为Windows程序提供API接口支持,本身不具有翻译CPU二进制指令的能力。在非x86架构的CPU上运行wine就需要前置二进制翻译工具,例如在ARM Linux上常用的qemu、BOX86/64、exagear等,在龙芯LoongArch架构上则主要使用龙芯自己开发的LATX。

  在龙芯3A5000的电脑上使用LATX,首先需要安装Loongnix或UOS。

  Loongnix安装镜像在“龙芯开源社区”网站下载,建议使用下图中红线勾出的两个版本之一。两个版本只是默认的桌面环境不同,一个cartoon一个mate,我使用的是cartoon版本。安装过程可以参考上面的视频,本文不再赘述。

  UOS专业版的安装镜像在“统信UOS生态社区”官网下载。打开首页后点击顶部的“资源中心”,再选择“桌面专业版”,下载“统信UOS桌面专业版loongarch64”。需要注意这些镜像下载链接不能用迅雷打开,请使用浏览器自身的下载功能。UOS的安装教材非常多,此处也不再详述。

  安装Loongnix或UOS专业版之后,首先需要把系统更新到最新状态。Loongnix和UOS中都有图形界面的更新程序,也可以使用终端输入命令来更新系统。Loongnix的“系统更新”工具是在开始菜单中,UOS的系统更新是在“控制中心”中。

  命令行更新系统的操作在两个系统上相同,只是在UOS上需要先打开“开发者模式”。因为UOS专业版主要用于各种办公环境,稳定易用优先,所以默认关闭了root权限,需要注册了“开发者”帐号才能打开root权限,以避免非专业用户因各种误操作导致系统或各种软件环境被破坏。

  命令行更新系统也很简单,在桌面上点击鼠标右键,在弹出的菜单中选择“在终端中打开”,在打开的终端窗口中输入如下命令:

  sudo apt update && sudo apt upgrade -y

  如果只是想要运行x86/Linux程序,那么在系统更新完成之后,只需要安装LAT。要想运行Windows程序,就要再安装Wine。Wine也是一个x86架构的Linux程序,在系统中用了LAT之后就可以直接安装使用。为了使用更方便,还需要安装一个管理wine的图形化界面工具Q4Wine。在终端窗口输入如下命令就可以完成安装:

  sudo apt install lat wine5 q4wine

  本文开始处的视频中,在Loongnix系统中安装的wine是wine 6.0的版本,但UOS(LoongArch)版中目前只有wine5以及Deepin-wine的5.0和6.0。如果UOS用户没有打开“开发者模式”,那么可以通过应用商店安装Q4Wine,并使用Deepin-wine。不过Q4Wine与deepin-wine可能存在一些兼容性问题,不推荐使用。

  Q4Wine首次运行时,会显示设置向导界面,主要需要配置Wine各个主程序所在的路径:

  上图是默认的路径,但一般wine的安装路径不是这个,而只是安装时在/usr/bin下面自动创建了符号链接文件来指向真实的文件路径。因此也可以把路径设置到真正的安装路径,一般是在/opt文件夹下面。例如:

/opt/wine5
/opt/wine6
/opt/deepin-wine5-stable
/opt/deepin-wine6-stable

  在UOS下,还需要配置终端程序路径,把终端程序设置为/usr/bin/deepin-terminal,如下图所示:

  其它的设置项目都可以使用默认值,直接点击“下一步”直至完成。Q4Wine配置完成之后,就会出现下面的界面:

  Q4Wine已经预设了默认的windows(wine)环境,前缀(名称)为Default,但还没有在硬盘上完成初始化。此时双击Q4Wine界面中的程序图标,或者在Linux的文件管理器中双击exe文件,就会自动完成windows(wine)环境的初始化。由于Q4Wine与deepin-wine可能存在一些兼容性问题,当使用deepin-wine时,自动初始化的windows(wine)可能是一个空文件夹。需要通过应用商店安装一个使用wine的软件,并成功运行。然后再在Q4Wine中创建一个“新前缀”,把路径指向到刚才软件运行后自动创建的windows(wine)环境文件夹,这样的文件夹是在/home/用户/.deepin-wine/下面。

  在wine提供的windows环境中,提供了一个功能精简的“资源管理器”,可以在Q4Wine的界面中双击打开。从资源管理器中可以看到,C盘就是windows环境,默认映射到/home/用户/.wine文件夹。Z盘是映射到Linux的根目录,如果插入了U盘,就会依次自动映射为D盘、E盘。在资源管理器中,可以进行浏览、复制、粘贴等文件操作,也可以双击打开文件。双击exe文件时就会打开运行,比较便捷。

  更加便捷的方式是在Linux的文件管理器中直接双击打开exe,Q4Wine会自动弹出一个运行对话框:

  一般不需要修改默认设置,直接点击“是”,然后程序就会运行。可以运行绿色软件,也可以运行安装程序。有一些只能全屏的游戏,可以通过设置“虚拟桌面”使它窗口化运行。有一些Windows程序不允许同时运行多个,那么可以在Q4Wine中创建多个“前缀”得到多个相互隔离的windows环境,在每个“前缀”中运行一个,实现多开。也有些程序使用Wine直接就能实现多开,不需要创建多个“前缀”。下面是网友在龙芯3A5000上玩网游时的视频截图。

  不只游戏,一些股票软件在龙芯3A5000上也可以正常安装运行,在LoongArch软件生态建设初期可以作为原生生态的有益补充。

  因为wine默认不包含Windows下的字体文件,而是使用的Linux的字体,某些程序会因为找不到字体而不能正确显示文字。解决这个问题的方式很简单,就是把Windows下的字体文件复制到Linux上。一般系统安装在C盘,那么Windows字体文件夹不是C:\Windows\Fonts。

  字体可以复制到两个地方:

  1、复制到Windows(Wine)环境的Window\Fonts,默认路径是:

  /home/用户/.wine/drive_c/windows/fonts

  字体文件复制完成之后立即生效。

  如果有多个Windows(Wine)环境,那么每环境中的fonts文件夹中都需要复制字体文件。很麻烦而且浪费空间,那么可以试试第二个方法。

  2、复制到Linux系统的字体文件夹中,不但wine可以用,Linux的程序也可以用。默认路径一般是:

  /usr/share/fonts

  Linux的字体文件夹下还有子文件夹,这一点与Windows不一样。因此我们也可以创建一个子文件夹来存放来自Windows的字体文件。比如可以创建一个win-fonts文件夹,再把字体文件复制进去。现在还不算完,还需要进入文件夹运行几个命令:

  cd /usr/share/fonts/win-fonts
  sudo mkfontscale
  sudo mkfontdir
  sudo fc-cache

  如此便字体生效,一劳永逸。

转载请注明:《包教包会:龙芯3A5000上尝试运行任意Windows软件

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注