admin管理员组文章数量:1631186
是的,你没有看错
中兴新支点桌面操作系统要在龙芯CPU上支持QQ
目前腾讯官方只发布和维护Windows版本的QQ,通过Wine技术则可以实现使Windows版本的QQ运行在Linux系统上,中兴新支点桌面操作系统已发布在Linux x86 CPU上的NewStart QQ
中兴新支点桌面操作系统软件中心
【NewStartQQ下载】
中兴新支点桌面操作系统软件中心
【NewStartQQ】
要在Linux龙芯CPU上支持QQ,这其实在业内算是一件非常,非常非常困难的事情!那么中兴新支点桌面操作系统在龙芯CPU上支持QQ之旅到底有多艰险?
「 背 景 」
在国家信息安全的大背景下,CPU及操作系统的国产化就首当其冲。其中,龙芯无疑是国产化CPU领域的领军者,特别是龙芯3A3000,其在结构和主频上的突破,使其在用户体验上大幅度提升。而操作系统则是清一色Linux操作系统,正如我们的中兴新支点桌面操作系统。在成功适配龙芯3A3000后,我们首先就遇到了在龙芯上支持QQ的需求,经过深入分析这一需求的市场,我们决定啃一啃这块硬骨头。
「 方 案 初 定 」
首先,我们来客观分析下龙芯上支持QQ这件事的实际状况:
问:有Linux版本的QQ吗?
答:QQ早些年以前有Linux版本,但是这个版本已经处于不被维护,存在功能严重缺失等问题。而目前腾讯官方只发布和维护Windows版本的QQ。
问:Windows版本QQ能在Linux上运行么?
答:当然可以,只要通过Wine技术(Wine简单说就是在Unix平台模拟Windows API的一个“模拟器”,从而使Windows上的应用程序(EXE文件)能直接运行在Unix环境中,而且性能损失不大),可以使Windows版本的QQ运行在Linux系统上。例如,我们看到的龙井QQ、深度QQ、NewStart QQ。但是这里需要特别注意,此处所有的Wine解决的将Windows应用程序迁移到Linux平台上运行,它们都是同在x86 CPU上。
问:x86应用程序能运行在龙芯环境中么?
答:当然也可以,有很多种方式,比如各种虚拟机、应用虚拟化,这些(基本)也有一个共同的基础:Qemu 。
问:Qemu是什么?
答:Qemu是一个真正的虚拟机,用于各种硬件架构平台的模拟,其包括system和Linux-user两种模式。Linux-user模式,顾名思义,其完全运行于用户态。其基本原理是将应用程序的指令(x86指令)逐条翻译成与架构无关的中间指令,然后再将中间指令翻译成主机上能运行的目标指令(Mips64指令),翻译后的指令能直接在主机上执行。
所以,要在龙芯上运行QQ需要解决两大技术问题:
1、Windows API到Linux API翻译(转换),这个理论上可以通过Wine解决。
2、x86硬件指令到龙芯(Mips64)硬件指令的翻译,这样理论上可以通过qemu linux-user模式解决。
那么,看似有可能了
Qemu+Wine!应该能解决问题!
哇,理论方案已出,我们撸起袖子开干吧!
「 遇 到 难 题 」
没想到一开始就遇到以下难题:
第一,x86上的应用程序在龙芯环境中使用qemu linux-user模式运行,直接就发生crash,哪怕是最简单的hello world。原因是龙芯是Mips架构,相较x86和ARM,它的社区参与度没有那么高。而无论是Qemu、内核还是Wine,都涉及硬件相关的实现,而这些关键的组件中,对龙芯(Mips)支持都不好,一方面不稳定,另一方面很多功能缺失。所以,想要在龙芯上运行QQ,还要翻越很多座未知高山,想想都是一身冷汗!
第二,性能损失,即使在x86 PC机上使用Qemu以纯软件的方式模拟执行其它架构的应用程序,也会有较明显的性能问题。因为Qemu模拟指令,需要经过两次转换(见Qemu原理介绍),一条guest指令翻译成host指令后,可能是十条,甚至更多。综合来看,纯软件的指令翻译,性能损失基本是一个数量级。x86尚且如此,而龙芯则更甚,结果可能是无法忍受的慢。
第三,龙芯架构自身的特殊架构设计,比如龙芯内核使用默认页面大小为16K。而其它主流架构基本都是用的4K大小的页面,会导致一定的兼容问题。
第四,调试非常非常难!由于需要经过两层翻译,任何问题的分析调试都异常困难。而QQ在成功运行的道路上可能出现的问题不计其数,每个问题的分析调试都是一次考虑和折磨。你可以想想......真的已经不敢想了!
「 我 们 的 进 展 」
就在这样的一座大山接着一座大山,一个大坑挨着一个大坑的艰难摸索中,我们还是取得了以下喜人进展:
第一,我们通过解决Qemu的核心翻译模块tcg中的几个关键bug及龙芯16K特殊页面大小导致Qemu翻译异常的问题,实现了单线程程序可以成功运行在龙芯的Qemu+Wine环境下。目前单线程的x86应用程序(比如SourceInsight3、Notepad++等)已能在中兴新支点桌面操作系统中正常运行。
第二,对于多线程的Wine QQ,我们解决了大量的Wine QQ启动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本地化后,如何才能正确的与应用程序和Qemu接口,比如,如何才能让运行于Qemu(虚拟机)中的应用程序调用Qemu外的Wine提供的API,他们之间如何通信。这将是一项难度极大的任务,很有挑战性。
由于Windows没有Mips版本,Wine支持Mips的开发将很难进行,包括调试。
前期的经验告诉我们,前面肯定还会有很高很险的山峰,很多很深的大坑。但是基于我们中兴操作系统研发部门在操作系统领域深耕十余载,在涉及的内核、虚拟化、wine方面丰富的积累和自信.我们相信这趟艰险的航行一定会带来丰盛的成果!我们一起拭目以待吧!
广东中兴新支点技术有限公司成立于2004年,属中兴通讯的全资子公司,是一家专门为用户提供CPI物联网解决方案的企业。CPI物联网解决方案全面应用于智能交通、应急指挥、工业设备互联、无人巡检覆盖等环境复杂及大干扰场景。同时公司还拥有软件技术服务和专家级解决方案,包括:服务器操作系统、嵌入式操作系统、桌面操作系统、高可用集群软件等,服务于众多高端项目,在国内外各大电信运营商、国有大中型企业及电子政务解决方案中广泛应用,中国Linux开源软件技术实力最强的单位之一。
本内容来自:中兴新支点:http://www.gd-linux
版权声明:本文标题:突破!中兴新支点Linux桌面操作系统在龙芯CPU上支持QQ使用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729091635a1186188.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论