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

实际步骤仅三步:
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的情况,也仅进行了单线程测试 。因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权限 , 以避免非专业用户因各种误操作导致系统或各种软件环境被破坏 。
命令行更新系统也很简单,在桌面上点击鼠标右键,在弹出的菜单中选择“在终端中打开” , 在打开的终端窗口中输入如下命令:

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

文章插图
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文件夹下面 。例如:
【包教包会:龙芯3A5000上运行任意Windows软件】/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:WindowsFonts 。
字体可以复制到两个地方:
1、复制到Windows(Wine)环境的WindowFonts,默认路径是:
/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-fontssudo mkfontscalesudo mkfontdirsudo fc-cache
如此便字体生效,一劳永逸 。
本文到此结束,希望对大家有所帮助!

猜你喜欢