是的,你没有看错
中兴新支点桌面操作要在龙芯CPU上支持QQ
目前腾讯官方只发布和维护Windows版本的QQ,通过Wine技术则可以实现使Windows版本的QQ运行在Linux系统上,中兴新支点桌面操作系统已发布在Linuxx86CPU上的NewStartQQ
中兴新支点桌面操作系统软件中心
【NewStartQQ下载】
中兴新支点桌面操作系统软件中心
【NewStartQQ】
要在Linux龙芯CPU上支持QQ,这似乎在业内算是一件十分,十分特别困难的事情!这么中兴新支点桌面操作系统在龙芯CPU上支持QQ之旅究竟有多崎岖?
「背景」
在国家信息安全的大背景下,CPU及操作系统的国产化就首当其冲。其中,龙芯无疑是国产化CPU领域的领军者,非常是龙芯3A3000,其在结构和位宽上的突破,使其在用户体验上大幅度提高。而操作系统则是清一色Linux操作系统,正如我们的中兴新支点桌面操作系统。在成功适配龙芯3A3000后,我们首先就遇见了在龙芯上支持QQ的需求,经过深入剖析这一需求的市场,我们决定啃一啃这块硬骨头。
「方案初定」
首先,我们来客观剖析下龙芯上支持QQ这件事的实际状况:
问:有Linux版本的QQ吗?
答:QQ早些年曾经有Linux版本共创linux桌面操作系统下载,然而这个版本早已处于不被维护,存在功能严重缺位等问题。而目前腾讯官方只发布和维护Windows版本的QQ。
问:Windows版本QQ能在Linux上运行么?
答:其实可以,只要通过Wine技术(Wine简单说就是在Unix平台模拟WindowsAPI的一个“模拟器”,因而使Windows上的应用程序(EXE文件)能直接运行在Unix环境中,但是性能损失不大),可以使Windows版本的QQ运行在Linux系统上。比如,我们看见的龙井QQ、深度QQ、NewStartQQ。并且这儿须要非常注意,此处所有的Wine解决的将Windows应用程序迁移到Linux平台上运行,它们都是同在x86CPU上。
问:x86应用程序能运行在龙芯环境中么?
答:其实也可以,有好多种方法,例如各类虚拟机、应用虚拟化,这种(基本)也有一个共同的基础:Qemu。
问:Qemu是哪些?
答:Qemu是一个真正的虚拟机,用于各类硬件构架平台的模拟,其包括system和Linux-user两种模式。Linux-user模式,顾名思义,其完全运行于用户态。其基本原理是将应用程序的指令(x86指令)逐字翻译成与构架无关的中间指令,之后再将中间指令翻译成主机上能运行的目标指令(Mips64指令),翻译后的指令能直接在主机上执行。
所以,要在龙芯上运行QQ须要解决两大技术问题:
1、WindowsAPI到LinuxAPI翻译(转换),这个理论上可以通过Wine解决。
2、x86硬件指令到龙芯(Mips64)硬件指令的翻译linux运维博客,这样理论上可以通过qemulinux-user模式解决。
这么,看似有可能了
Qemu+Wine!应当能解决问题!
哇,理论方案已出,我们撸起衣袖开干吧!
「遇到难题」
没想到一开始就碰到以下困局:
第一,x86上的应用程序在龙芯环境中使用qemulinux-user模式运行,直接就发生crash,哪怕是最简单的helloworld。缘由是龙芯是Mips构架,相较x86和ARM,它的社区参与度没有这么高。而无论是Qemu、内核还是Wine,都涉及硬件相关的实现,而这种关键的组件中,对龙芯(Mips)支持都不好,一方面不稳定,另一方面好多功能缺位。所以,想要在龙芯上运行QQ,还要攀越好多座未知高山,想想都是一身虚汗!
第二,性能损失,虽然在x86PC机上使用Qemu以纯软件的形式模拟执行其它构架的应用程序,也会有较显著的性能问题。由于Qemu模拟指令,须要经过两次转换(见Qemu原理介绍),一条guest指令翻译成host指令后,可能是十条,甚至更多。综合来看,纯软件的指令翻译,性能损失基本是一个数目级。x86仍旧这么,而龙芯则更甚linuxtar,结果可能是难以忍受的慢。
第三,龙芯构架自身的特殊构架设计,例如龙芯内核使用默认页面大小为16K。而其它主流构架基本都是用的4K大小的页面,会造成一定的兼容问题。
第四,调试十分特别难!因为须要经过两层翻译,任何问题的剖析调试都异常困难。而QQ在成功运行的公路上可能出现的问题不计其数,每位问题的剖析调试都是一次考虑和摧残。你可以想想......真的早已不敢想了!
「我们的进展」
就在这样的一座大山接着一座大山,一个深坑挨到一个坑洞的艰辛摸索中,我们还是取得了以下喜人进展:
第一,我们通过解决Qemu的核心翻译模块tcg中的几个关键bug及龙芯16K特殊页面大小造成Qemu翻译异常的问题,实现了单线程程序可以成功运行在龙芯的Qemu+Wine环境下。目前单线程的x86应用程序(例如SourceInsight3、Notepad++等)已能在中兴新支点桌面操作系统中正常运行。
第二,对于多线程的WineQQ,我们解决了大量的WineQQ启动dll加载失败的问题。
「后续我们将集中攻克」
第一,Qemu用户模式的多线程支持。
据剖析,目前多线程程序难以运行最主要的缘由是,Qemu用户模式不支持多线程应用程序。或则不能说不支持,应当说支持得不好,起码对Mips来说是这样的。所以,须要在Qemu用户模式中的降低(或加固)multithread支持,须要实现两个关键点:原子操作和显存屏障。涉及底层硬件,问题复杂度和难度很大,须要悉心专研。
第二,Wine本地化及性能问题。
目前的方案为Qemu+Wine,将要Wine运行于Qemu中,这儿将Qemu理解为一个虚拟机的话,将要整个Wine+QQ都运行与虚拟机中。而这其中,Wine属于相当重量级,对Wine的翻译会消耗CPU可能会超过QQ本身,会成为严重的性能困局。所以,该方案只能作为核高基和研究使用,基本不太可能使其达到可用状态。所以,基于性能考虑,还须要更轻量级的方案,换个位置:Wine+Qemu似乎能行。将Wine本地化,正式Wine直接在龙芯环境中编译和运行,使其运行于虚拟机外。
这般,可以省下大部份的指令翻译时间,大大提高性能。说起容易,做上去就难了(应当说很难),难点在于:
(1)Wine自身对Mips的支持完全没有(x86和Arm构架支持不错),这部份工作须要自己做,社区不可能帮你做,这部份工作的难度和工作量都不小。
(2)Wine和Qemu和应用程序的插口问题。Wine本地化后共创linux桌面操作系统下载,怎么能够正确的与应用程序和Qemu插口,例如,怎么能够让运行于Qemu(虚拟机)中的应用程序调用Qemu外的Wine提供的API,她们之间怎样通讯。这将是一项难度极大的任务,很有挑战性。
因为Windows没有Mips版本,Wine支持Mips的开发将很难进行,包括调试。
前期的经验告诉我们,上面肯定都会有很高很险的山峰,好多很深的坑洞。并且基于我们中兴操作系统研制部门在操作系统领域精耕十余载,在涉及的内核、虚拟化、wine方面丰富的积累和自信.我们相信这趟险阻的航行一定会带来丰盛的成果!我们一起拭目以待吧!
广州中兴新支点技术有限公司创立于2004年,属中兴通信的全资子公司,是一家专门为用户提供CPI物联网解决方案的企业。CPI物联网解决方案全面应用于智能交通、应急指挥、工业设备互联、无人巡检覆盖等环境复杂及大干扰场景。同时公司还拥有软件技术服务和专家级解决方案,包括:服务器操作系统、嵌入式操作系统、桌面操作系统、高可用集群软件等,服务于诸多低端项目,在国外外各大联通营运商、国有大小型企业及电子政务解决方案中广泛应用,中国Linux开源软件技术实力最强的单位之一。
本内容来自:中兴新支点:
本文原创地址://lrxjmw.cn/sdnmykczxxzd.html编辑:刘遄,审核员:暂无