龙芯3A3000笔记本怎样使用摄像头?

fubaojun2006 回复了问题 • 2 人关注 • 3 个回复 • 753 次浏览 • 2017-01-25 11:30 • 来自相关话题

我是一个开发者,从哪里可以买到龙芯3A3000笔记本?

fubaojun2006 回复了问题 • 2 人关注 • 1 个回复 • 967 次浏览 • 2017-01-25 11:27 • 来自相关话题

内核是否支持debugfs?

回复

loongnix 回复了问题 • 1 人关注 • 1 个回复 • 275 次浏览 • 2017-01-25 10:18 • 来自相关话题

内核是否支持perf?

回复

loongnix 回复了问题 • 1 人关注 • 1 个回复 • 393 次浏览 • 2017-01-25 10:15 • 来自相关话题

安全可靠 自主创新 ——中国网安发布龙御系列产品

代表月亮消咩尼 发表了文章 • 0 个评论 • 273 次浏览 • 2017-01-24 11:45 • 来自相关话题

安全可靠 自主创新 ——中国网安发布龙御系列产品   8月19日,第十四届中国国际软件合作洽谈会专业分论坛之一的“网络空间安全创新发展论坛”在成都成功举办。该论坛由中国电子科技网络信息安全有限公司 (下文称:中国网安)主办、成都安全可 ...查看全部
安全可靠 自主创新 ——中国网安发布龙御系列产品

  8月19日,第十四届中国国际软件合作洽谈会专业分论坛之一的“网络空间安全创新发展论坛”在成都成功举办。该论坛由中国电子科技网络信息安全有限公司 (下文称:中国网安)主办、成都安全可靠信息技术联合会承办,以“安全可靠·自主创新”为主题,针对基础安全、IT安全、灾难备份、电子认证等网络安全产 业生态圈及关键环节,解析国内外产业发展动态,探讨网络安全产业链演进路径和发展战略,分享网络空间安全服务解决方案的领先实践,主推军民融合深度发展与 应用创新,发布《成都市网络空间安全产业白皮书》及自主可控产品。当天,成都市经信委及成都市网信办领导与中国电子科技集团首席专家、中国网安总工程师饶 志宏、卫士通公司高级副总裁赵秀玲、龙芯中科技术有限公司副总裁张戈等人一同上前,共同发布《成都市网络空间安全产业白皮书》(下文称:白皮书)及中国网 安龙御系列自主可控计算机、卫士通中华卫士系列自主可控安全交换机。

97.png

发布会现场
        中国网安及旗下卫士通公司发布的龙御系列自主可控安全计算机与中华卫士系列自主可控安全交换机产品是成都市安全自主可控产业落地的典型代表。龙御系列自主 可控安全计算机产品是中国网安历经三年潜心研发,深度融合中国网安安全一体化发展思路的智慧结晶。该型计算机采用全自主技术的龙芯新一代3A2000处理 器。值得一提的是,相比常见的自主可控计算机,作为网络安全旗舰企业的中国网安为龙御系列注入了别具特色的十大安全功能,从物理安全、数据安全、系统安 全、管理安全四个方面入手为用户提供了可灵活配置的强大安全能力。卫士通中华卫士系列自主可控安全交换机,采用龙芯系列处理器,结合盛科交换芯片实现接入 层、汇聚层高性能兼容性网络交换能力的同时对控制数据、配置文件、介入安全、互联安全进行安全保护,成为保障网络通信安全的利器。

98.png

龙御系列自主可控计算机
        处理器是信息产业的基础部件,是电子设备的核心器件,龙芯致力于为国家安全战略需求提供自主、安全、可靠的处理器,为信息产业及工业信息化的创新发展提供高性能、低成本、低功耗的处理器。龙芯将会和合作伙伴一起共同为中国网络安全建设不断贡献力量。

根植LoongISA 服务新生态

代表月亮消咩尼 发表了文章 • 0 个评论 • 311 次浏览 • 2017-01-24 11:42 • 来自相关话题

根植LoongISA 服务新生态 一、引言           Java虚拟机(JVM)是整个Java技术体系的核心,是实现Java平台无关性和安全性的基石。Java程序是平台无关的,但Java虚拟机却是平台 ...查看全部
根植LoongISA 服务新生态

一、引言
 
        Java虚拟机(JVM)是整个Java技术体系的核心,是实现Java平台无关性和安全性的基石。Java程序是平台无关的,但Java虚拟机却是平台 相关的。目前,应用最广泛、设计最先进的Java虚拟机当属Oracle主力维护的OpenJDK系列虚拟机。但OpenJDK官方仅支持x86和 sparc架构处理器(近几年才开始新增对Power PC和ARM架构的支持),并不支持MIPS处理器。为了在龙芯处理器上运行Java,龙芯公司及时组建了Java虚拟机团队,专门负责OpenJDK在 龙芯平台上的移植和优化。Java虚拟机团队经过好几年的艰苦攻关,终于使得Java可以稳定高效地在龙芯处理器上运行,为龙芯的市场开拓和生态建设奠定 了坚实的基础。
        目前,龙芯同时维护OpenJDK6(32位和64位)和OpenJDK8(64位)两个虚拟机版本。考虑到未来Java虚拟机的发展趋势,龙芯Java 虚拟机团队主力维护OpenJDK8,后期所有升级和优化主要针对OpenJDK8进行;而OpenJDK6原则上只进行功能性Bug的修复。因此,为了 更高的运行效率和更及时的技术支持,笔者强烈建议所有龙芯上的Java应用尽可能使用OpenJDK8开发。2016年5月,龙芯OpenJDK8免费向 全世界开源(http://hg.loongnix.org),龙芯将其多年的心血回报给了开源社区。据笔者所知,龙芯首次完整实现了OpenJDK的 MIPS分支,堪称OpenJDK发展史上的一个里程碑。
那么龙芯OpenJDK8的开源是否标志着龙芯Java虚拟机的成熟呢?龙芯Java虚拟机团队在开源之后又做了些什么呢?未来龙芯Java虚拟机的发展当何去何从呢?
 
二、奔跑吧,龙芯JVM
 
        龙芯对于Java虚拟机性能的追求永无止境。虽然Java应用早已稳定高效地运行在龙芯平台上,龙芯Java虚拟机团队从未停止前进的步伐。 OpenJDK8 MIPS分支的开源对于龙芯而言,既是一种鼓舞和激励,更是一种鞭挞和责任。一方面,作为一个处理器硬件供应商,龙芯是整个国产自主信息产业生态链的根 基,有责任将Java虚拟机等底层系统软件维护好,以向上层客户提供一个友好的开发平台。另一方面,作为OpenJDK唯一完整实现的MIPS分支,龙芯 有义务持续优化,以便为更多的MIPS平台提供一个高效的Java运行环境。因此,龙芯Java虚拟机团队在开源之后没有丝毫松懈,继续加速向前奔跑。
        龙芯开源社区(http://www.loongnix.org/)网站中的Java版(http://www.loongnix.org /index.php/Java)是及时了解龙芯Java虚拟机最新发展动态的有效途径。从该版中我们可以看到,龙芯JDK8开源后仅一个月,龙芯又发布 了JDK8 MIPS分支的新版本—JDK8-mips64-rc16。该版本消除了龙芯Java虚拟机中大量非对齐存储访问,并对虚拟机中数组拷贝进行了优化。业界 权威的SPECjvm2008的评测数据表明,相对于上一个发行版,JDK8-mips64-rc16的性能提升幅度超过了20%!
 
 
三、根植LoongISA,服务新生态
 
         对Java的高效支持是龙芯不断发展壮大其软件生态的关键。据Oracle的官方统计数据,全球有超过97%的企业基于Java进行应用开发。世界著名 的编程语言排行榜TIOBE在2016年1月的统计数据表明,Java的流行度再次位居榜首。Java技术的应用和发展达到了前所未有的高度。凭借其优秀 的平台无关性、安全性和网络移动性等优势,Java必将在云计算、大数据、移动互联网和物联网等新兴应用中大显身手。
        既然Java对龙芯的软件生态如此重要,龙芯Java虚拟机未来的发展方向又是什么呢?对于这个问题,我们可以从龙芯OpenJDK8的开源代码中 (http://hg.loongnix.org/jdk8-mips64-public/hotspot/)找到一         些答案。从代码库中最近提交的patch可以大致推断出未来龙芯Java虚拟机发展的两个重要方向:
        1.       基于MIPS兼容的LoongISA指令系统,充分挖掘龙芯处理器硬件性能
         LoongISA指令系统兼容MIPS64指令,并新增了1400多条龙芯扩展指令,涉及基础指令、虚拟机指令、面向x86和ARM的二进制翻译指令和 向量指令等四个方面。LoongISA是龙芯于2015年8月18日在其3A2000芯片中首次发布的一套自主指令系统。为了充分发挥LoongISA指 令系统,尤其是龙芯扩展指令在Java虚拟机中的优势,龙芯Java虚拟机团队在其开源的OpenJDK8中首次引入了“UseLoongsonISA” 优化选项。该优化选项标识着龙芯开始在其Java虚拟机中大范围启用自定义的扩展指令。通过虚拟机启动参数“-XX:- UseLoongsonISA”可以随时禁用针对龙芯特有的优化,从而兼容其它标准MIPS架构处理器。LoongISA可以更加充分地发挥龙芯处理器的 硬件性能,期待未来可以将龙芯Java虚拟机的性能推向新的高度。
        2.       将编译原理与龙芯具体实践相结合,深度优化虚拟机即时编译器(JIT)性能
        龙芯近期提交了几十个性能优化的patch,其中绝大部分都是针对HotSpot Server版JIT的优化补丁。JIT编译器直接决定了Java虚拟机的性能,而HotSpot Server版JIT是OpenJDK中性能最高的编译器,故近期龙芯Java虚拟机团队倾注了大量心血对其进行深度优化。由于官方开源的JIT主要针对 x86等传统架构的处理器进行设计,龙芯需要不断改进原始的编译器设计,以更好地适应龙芯处理器的硬件结构和流水线特性。目前龙芯正对OpenJDK8 Server版JIT的后端进行大刀阔斧的优化,其目的是为了强化JIT对LoongISA的支持,并且要让编译器更加适应龙芯处理器的流水线特性。当 然,龙芯团队对于JIT的优化绝不会仅限于编译器后端,将来肯定也会对编译器的前端进行优化,以将处理器的性能发挥到极致。
        龙芯Java虚拟机近期又做了很多优化,其优化的效果又如何呢?由于缺乏龙芯官方正式发布的优化数据,笔者将龙芯开源的OpenJDK8在3A2000机 器上进行了编译,并以基本数学运算为例直观地感受了一下近期龙芯Java虚拟机的优化效果,如表1所示。表中优化前的数据表示JDK8-mips64- rc16虚拟机的性能,优化后的数据表示当前龙芯开源Java虚拟机的性能。从这些数据可以看出,乘除法和求余操作等基本数学运算的性能普遍提升70%以 上。从龙芯开源代码所提交patch的描述信息可知,上述优化效果主要源于JIT编译器新增了对LoongISA中gsdmult和gsddiv等龙芯扩 展指令的支持。可以预见,随着JIT对LoongISA支持的不断完善,龙芯Java虚拟机的性能将会越来越高。因此,“根植LoongISA,服务新生 态”已成为未来龙芯Java虚拟机前进的重要方向。
     
95.png

  表1 龙芯OpenJDK8性能优化效果
 
 
四、结束语
 
        随着应用系统对Java性能的要求不断增加,龙芯对Java虚拟机的优化是永无止境的。龙芯将其精心维护的OpenJDK8 MIPS分支开源,一方面是为了回馈开源社区;另一方面也希望能够吸引更多的开源爱好者加入到MIPS分支的开发者队伍中来。龙芯Java虚拟机团队迫切 期待每一位开源爱好者的贡献。您可以通过龙芯开源社区(http://www.loongnix.org/)积极参与龙芯Java虚拟机的开发和维护,为 OpenJDK MIPS分支的持续优化和我国自主可控软硬件生态的建设贡献力量。未来,龙芯的软件生态会因为您的支持和参与而变得愈发精彩!

龙芯中科参加全国计算机体系结构学术年会(ACA 2016)并发表演讲

代表月亮消咩尼 发表了文章 • 0 个评论 • 216 次浏览 • 2017-01-24 11:40 • 来自相关话题

龙芯中科参加全国计算机体系结构学术年会(ACA 2016)并发表演讲 全国计算机体系结构学术年会 (ACA,Advanced Computer Architecture)是 国内体系结构领域最权威的学术盛会,每两年举办一次,目前已历经21年共10届 ...查看全部
龙芯中科参加全国计算机体系结构学术年会(ACA 2016)并发表演讲
全国计算机体系结构学术年会 (ACA,Advanced Computer Architecture)是 国内体系结构领域最权威的学术盛会,每两年举办一次,目前已历经21年共10届。2016年全国计算机体系结构学术年会(ACA 2016)于8月22日至23日在山东省威 海市举行,会议由中国计算机学会主办,中国计算机学会体系结构专业委员会、中国科学院计算技术研究所、哈尔滨工业大学(威海)承办。
ACA 2016大会主题为新型计算机系统技术,将为国内外相关领域的学术界和企业界专家学者提供了一个交流合作、发布最前沿科研成果的平台,推动和促进我国在新 型计算机系统技术相关领域的学术交流、学科发展和产学研合作。除了邀请国内外权威学者发表特邀报告外,本次大会还举办了一系列精彩丰富的活动:大学生创新竞赛、青年学者论坛、教学论坛、工业界需求论坛等。龙芯中科作为国内计算机体系结构代表企业应邀参加会议,龙芯中科副总裁张戈在大会主会场上作了《龙芯自主IT产业生态建设》的报告。

92.jpg


龙芯中科副总裁张戈作《龙芯自主IT产业生态建设》报告
 
为进一步推动计算机专业的系统能力教学综合改革,交流教学改革经验,探索将试验成果大范围推广的内容、模式和工作机制,使高校更好地开展系统能力培养的教 学工作,计算机体系结构专委会于ACA 2016会议期间,专门设置了一个关于计算机组成与系统结构相关课程改革的教学论坛。本次教学论坛由计算机体系结构专委会副主任委员汪东升教授主持。会议 围绕计算机组成与系统结构课程(组)的教学,共同探讨该课程(组)的知识体系架构及其与前导课和后继课程之间的相互关联关系,以及该课程(组)在学生系统 能力培养方面的地位和作用等。龙芯中科副总裁张戈应邀在教学论坛上作了《国产基础软硬件人才需求及面向系统能力培养的教学实验平台设计》的报告。同时在大 会的展示区龙芯中科展出了专门配合系统能力教学综合改革的教学实验系统,包括“体系结构与CPU设计教学实验系统”、“多功能操作系统教学实验系统”、 “高性能-并行计算教学实验系统”等,获得了高校老师的关注和兴趣。复旦大学张亮老师团队还在大会的上使用龙芯教学实验平台演示了他们开发的AIMv6新 一代教学操作系统,引起了大会与会人员的广泛关注。

93.jpg


复旦大学张亮老师团队使用龙芯教学实验平台演示AIMv6新一代教学操作系统

94.jpg


龙芯中科展示配合系统能力教学综合改革的教学实验系统
 

在龙芯电脑上用Kodi打造多媒体娱乐中心

代表月亮消咩尼 发表了文章 • 0 个评论 • 247 次浏览 • 2017-01-24 11:38 • 来自相关话题

在龙芯电脑上用Kodi打造多媒体娱乐中心 Kodi是一款自由和开源的优秀媒体中心软件,它的前身是xbmc(Xbox Media Center),从15.0版本开始,xbmc改名为Kodi,它能够播放几乎所有流行的音频和视频格式。另外,Kodi还被设 ...查看全部
在龙芯电脑上用Kodi打造多媒体娱乐中心
Kodi是一款自由和开源的优秀媒体中心软件,它的前身是xbmc(Xbox Media Center),从15.0版本开始,xbmc改名为Kodi,它能够播放几乎所有流行的音频和视频格式。另外,Kodi还被设计用于播放网络媒体,支持 各种网络媒体协议,你可以把你的媒体库放在家庭网络中或直接播放互联网媒体,这样你的电脑就会变成一个全功能的多媒体娱乐中心。 
        在Linux下,LibAV 与 FFmpeg 都是流行的开源多媒体解码器库,龙芯梦兰考虑到系统中的应用需求,对 LibAV、ffmpeg 的视频解码性能进行了深入的优化,重点提升了 MPEG4、H.264 等格式的解码性能。此外,龙芯梦兰又完善了AMD系列显卡在龙芯平台上的高清硬解码,在龙芯平台上播放高清视频已不成问题。今天,龙芯梦兰软件工程师以外置了AMD Radeon HD8470显卡,操作系统为龙芯版fedora21的龙芯3A2000电脑为例,来看看在龙芯电脑上用Kodi打造多媒体娱乐中心的使用情况及表现。
1 软件安装
        首先从软件源里安装Kodi,龙芯版fedora21已经移植好了Kodi,并且收纳进了软件仓库,因此直接从软件源里安装即可,打开终端,输入命 令:sudo yum install kodi 。然后等待软件完成安装。首次运行Kodi,软件的界面语言是英文,通过简单的设置就能将其界面语言更改为中文。
得益于Kodi的强大插件支持,许多开发者开发了应用于kodi各个功能的插件,从网上下载中文插件库安装到Kodi后,会发现这个插件库包含了天气、音乐、视频等众多插件。
2 电视直播
        利用直播电视插件随机选择一个电视频道进行观看,可以发现软件的响应速度很快,画面秒开。通过下方的信息栏可以看到,该视频流的分辨率为1080P。龙芯 3A2000电脑在播放的时候,画面非常流畅,没有任何卡顿和跳帧。此外,大家最关心的就是龙芯3A2000电脑在播放视频时资源占用的问题,通过 htop命令可以看到cpu资源占用率、系统负载并不高。
3 视频点播
        除了看电视直播,有时可能还需要点播在线视频,这时可以打开搜狐视频插件。该插件用于获取搜狐视频网站上的视频资源,它的视频分类清晰,搜索功能强大。在 使用搜索功能时还可以发现Kodi支持汉语拼音输入中文,只要将左边“中文”勾选上即可。输入法还具有强大的词汇联想功能,以“北平无战事”为例,输入简 拼“BPWZS”就能正确显示出结果。
4 在线音乐
        除了在线视频,在线音乐也少不了,通过安装中文插件库,国内的音乐网站插件也可以轻松安装到Kodi,只需启用插件即可。
5 无线投影
        如今,DLNA、Airplay等无线投影功能使文档演示和多媒体无线推送更加方便,Kodi也集成了这些功能。现在的许多手机APP都支持 Airplay、DLNA无线投影。经过测试,选择酷狗音乐、WPS office进行DLNA、Airplay无线投影功能时,这两款APP都能百分之百完美使用。
  Kodi的设计很人性化,在测试文档无线投影过程中,它不仅能跟随手机屏幕的方向,还支持在接收投影时按数字键将文档进行相应比例的放大。
6 远程控制
        此外,Kodi也支持通过APP或者网页进行远程控制,在手机上安装官方出品的Kodi remote并开启Kodi的远程控制功能后,对Kodi remote进行简单配置,就能在这个APP上控制Kodi了。
总结
        通过对视频、音频、无线投影、远程控制等功能的测试使用,综合来看,在龙芯电脑上用Kodi打造多媒体娱乐中心是比较成功的。Kodi在龙芯平台上表现十 分不错,无论是在功能上还是表现上,丝毫不落伍于在X86平台上的体验,当然,Kodi的功能远远不止这些,有兴趣的读者可以自行尝试。自从龙芯产业化基 地2004年在江苏建立后,龙芯一直在努力打造自己的体系,随着更多的优秀软件移植到龙芯平台以及更多软件的优化,相信龙芯电脑的体验也将会越来越好。
 

在龙芯电脑上用Kodi打造多媒体娱乐中心

代表月亮消咩尼 发表了文章 • 0 个评论 • 228 次浏览 • 2017-01-24 11:38 • 来自相关话题

在龙芯电脑上用Kodi打造多媒体娱乐中心 Kodi是一款自由和开源的优秀媒体中心软件,它的前身是xbmc(Xbox Media Center),从15.0版本开始,xbmc改名为Kodi,它能够播放几乎所有流行的音频和视频格式。另外,Kodi还被设 ...查看全部
在龙芯电脑上用Kodi打造多媒体娱乐中心
Kodi是一款自由和开源的优秀媒体中心软件,它的前身是xbmc(Xbox Media Center),从15.0版本开始,xbmc改名为Kodi,它能够播放几乎所有流行的音频和视频格式。另外,Kodi还被设计用于播放网络媒体,支持 各种网络媒体协议,你可以把你的媒体库放在家庭网络中或直接播放互联网媒体,这样你的电脑就会变成一个全功能的多媒体娱乐中心。 
        在Linux下,LibAV 与 FFmpeg 都是流行的开源多媒体解码器库,龙芯梦兰考虑到系统中的应用需求,对 LibAV、ffmpeg 的视频解码性能进行了深入的优化,重点提升了 MPEG4、H.264 等格式的解码性能。此外,龙芯梦兰又完善了AMD系列显卡在龙芯平台上的高清硬解码,在龙芯平台上播放高清视频已不成问题。今天,龙芯梦兰软件工程师以外置了AMD Radeon HD8470显卡,操作系统为龙芯版fedora21的龙芯3A2000电脑为例,来看看在龙芯电脑上用Kodi打造多媒体娱乐中心的使用情况及表现。
1 软件安装
        首先从软件源里安装Kodi,龙芯版fedora21已经移植好了Kodi,并且收纳进了软件仓库,因此直接从软件源里安装即可,打开终端,输入命 令:sudo yum install kodi 。然后等待软件完成安装。首次运行Kodi,软件的界面语言是英文,通过简单的设置就能将其界面语言更改为中文。
得益于Kodi的强大插件支持,许多开发者开发了应用于kodi各个功能的插件,从网上下载中文插件库安装到Kodi后,会发现这个插件库包含了天气、音乐、视频等众多插件。
2 电视直播
        利用直播电视插件随机选择一个电视频道进行观看,可以发现软件的响应速度很快,画面秒开。通过下方的信息栏可以看到,该视频流的分辨率为1080P。龙芯 3A2000电脑在播放的时候,画面非常流畅,没有任何卡顿和跳帧。此外,大家最关心的就是龙芯3A2000电脑在播放视频时资源占用的问题,通过 htop命令可以看到cpu资源占用率、系统负载并不高。
3 视频点播
        除了看电视直播,有时可能还需要点播在线视频,这时可以打开搜狐视频插件。该插件用于获取搜狐视频网站上的视频资源,它的视频分类清晰,搜索功能强大。在 使用搜索功能时还可以发现Kodi支持汉语拼音输入中文,只要将左边“中文”勾选上即可。输入法还具有强大的词汇联想功能,以“北平无战事”为例,输入简 拼“BPWZS”就能正确显示出结果。
4 在线音乐
        除了在线视频,在线音乐也少不了,通过安装中文插件库,国内的音乐网站插件也可以轻松安装到Kodi,只需启用插件即可。
5 无线投影
        如今,DLNA、Airplay等无线投影功能使文档演示和多媒体无线推送更加方便,Kodi也集成了这些功能。现在的许多手机APP都支持 Airplay、DLNA无线投影。经过测试,选择酷狗音乐、WPS office进行DLNA、Airplay无线投影功能时,这两款APP都能百分之百完美使用。
  Kodi的设计很人性化,在测试文档无线投影过程中,它不仅能跟随手机屏幕的方向,还支持在接收投影时按数字键将文档进行相应比例的放大。
6 远程控制
        此外,Kodi也支持通过APP或者网页进行远程控制,在手机上安装官方出品的Kodi remote并开启Kodi的远程控制功能后,对Kodi remote进行简单配置,就能在这个APP上控制Kodi了。
总结
        通过对视频、音频、无线投影、远程控制等功能的测试使用,综合来看,在龙芯电脑上用Kodi打造多媒体娱乐中心是比较成功的。Kodi在龙芯平台上表现十 分不错,无论是在功能上还是表现上,丝毫不落伍于在X86平台上的体验,当然,Kodi的功能远远不止这些,有兴趣的读者可以自行尝试。自从龙芯产业化基 地2004年在江苏建立后,龙芯一直在努力打造自己的体系,随着更多的优秀软件移植到龙芯平台以及更多软件的优化,相信龙芯电脑的体验也将会越来越好。
 

龙芯3A2000上移植NASA WorldWind指南

代表月亮消咩尼 发表了文章 • 0 个评论 • 288 次浏览 • 2017-01-24 11:36 • 来自相关话题

龙芯3A2000上移植NASA WorldWind指南 一、初识NASA WORLDWIND   NASA World Wind是NASA(美国)国家航空和宇宙航行局联合出品,类似Earthview 3D的鸟瞰工具,更加权威而且完全免 ...查看全部
龙芯3A2000上移植NASA WorldWind指南

一、初识NASA WORLDWIND   NASA World Wind是NASA(美国)国家航空和宇宙航行局联合出品,类似Earthview 3D的鸟瞰工具,更加权威而且完全免费。通过这套程序的3D引擎,可以让你从外太空看见地球上的任何一个角落。


91.png


worldwind主界面
    有“天眼”之称的一款软件是否可以在龙芯平台上运行呢?经过修改、调试、编译,笔者终于成功的在龙芯3A2000上运行了worldwind。下面来看看移植过程。
二、下载worldwind以及相关的软件包
首先介绍下和worliwind相关的两外两个软件包gluegen和jogl。
gluegen是自动生成的java和JNI代码,调用C库的工具,可以绑定底层API,如java本地接口(JNI)和 AWT本地接口(jawt)。
jogl是Java对OpenGL绑定的开源项目并设计为采用Java开发的应用程序,还提供了众多3D图形库,如:AWT、Swing和SWT widget,以及自定义窗口工具nativewindow。
为了不让大家走弯路,笔者先简单的介绍下载包的版本。笔者下载的worldwind是2.0.0版本,REDME.txt文档上介绍支持Java SDK1.5.0以上版本。需下载1.5版本的gluegen和jogl包。
● worldwind下载路径:http://ftp.loongnix.org/others/NasaWorldWind/
● gluegen和jogl下载路径:http://jogamp.org/deployment/archive/rc/v2.1.5/archive/Sources/
点击gluegen-v2.1.5.tar.7z和jogl-v2.1.5.tar.7z即可下载。
三、编译环境
笔者使用的电脑是龙芯3A2000,系统是Loongnix-Fedora21。
系统下载地址:  http://www.loongnix.org
四、编译源代码
笔者详细的述说这三个软件包里需要修改的地方。
第一步:首先编译gluegen软件包
1.进入gluegen软件包,查找build.xml文件。(记得将解压后的文件名修改为gluegen)
[loongson@localhost gluegen]$find . -name build.xml
./test/TestOneJar_InJar/jogamp01/build.xml
./test/junit/com/jogamp/gluegen/build.xml
./make/build.xml 修改 ./make/build.xml文件,搜索mips,添加如下代码:
在328行添加如下代码:
+  <target name="declare.linux.mips64el" if="isLinuxMips64el">
+      <echo message="Linux.mips64el" />
+     <property name="compiler.cfg.id"                      value="compiler.cfg.linux" />
+    <property name="linker.cfg.id"                        value="linker.cfg.linux.mips64el" />
+  </target>在360行后面加上代码:
+  declare.linux.mips64el,2.进入gluegen软件包,查找PlatformPropsImpl.java文件。
[loongson@localhost gluegen]$ find . -name PlatformPropsImpl.java
./src/java/jogamp/common/os/PlatformPropsImpl.java修改PlatformPropsImpl.java文件,查找mips,在301行添加如下代码:
+ else if( archLower.equals("mips64") ) {        // android  gaoquan
+            return CPUType.MIPS_64;
+        } else if( archLower.equals("mips64el") ) {        // android   gaoquan
+            return CPUType.MIPS_64el;
+        }3.修改PlatformPropsImpl.java文件。
在./src/java/jogamp/common/os/PlatformPropsImpl.java文件的getOSAndArch()方法下,添加分支,代码如下:
case IA64:
                _os_and_arch = "ia64";
                break;
+            case MIPS_64el:
+                os_and_arch = "mips64el";
+               break;
             case SPARCV9_64:
                _os_and_arch = "sparcv9";
                break;4.修改MachineDescriptionRuntime.java文件。
在./src/java/jogamp/common/os/MachineDescriptionRuntime.java文件的isCPUArch32Bit()方法下,添加分支,代码如下:
private static boolean isCPUArch32Bit(final Platform.CPUType cpuType) throws RuntimeException {
    switch( cpuType ) {
        case X86_32:
        ...........    
+      case MIPS_64el:
            return false;5.进入gluegen软件包,查找./make/gluegen-cpptasks-base.xml文件,此文件修改的代码有些多。在gluegen-cpptasks-base.xml中搜索mipsel,在380行添加代码:
在gluegen-cpptasks-base.xml中搜索mipsel,在380行添加代码:
 <condition property="isLinuxMipsel">
      <and>
        <istrue value="${isLinux}" />
        <os arch="mipsel" />
      </and>
    </condition>
+    <condition property="mipsel">
+      <os arch="mipsel" />
+    </condition>
+      <condition property="isLinuxMips64el">
+      <and>
+        <istrue value="${isLinux}" />
+        <os arch="mips64el" />
+      </and>
+    </condition>
+    <condition property="mips64el">
+      <os arch="mips64el" />
+    </condition>
<condition property="isLinuxPpc">580行添加代码:
<echo message="LinuxMipsel=${isLinuxMipsel}" />
+    <echo message="LinuxMips64el=${isLinuxMips64el}" />
       <echo message="LinuxPpc=${isLinuxPpc}" />650行添加代码:
 <target name="gluegen.cpptasks.detect.os.linux.mipsel" unless="gluegen.cpptasks.detected.os.2" if="isLinuxMipsel">
    <property name="os.and.arch" value="linux-mipsel" />
  </target>
+  <target name="gluegen.cpptasks.detect.os.linux.mips64el" unless="gluegen.cpptasks.detected.os.2" if="isLinuxMips64el">
+    <property name="os.and.arch" value="linux-mips64el" />
+  </target>
  <target name="gluegen.cpptasks.detect.os.linux.ppc" unless="gluegen.cpptasks.detected.os.2" if="isLinuxPpc">
    <property name="os.and.arch" value="linux-ppc" />
  </target>682行添加代码+ gluegen.cpptasks.detect.os.linux.mips64el,1192行添加代码: <linker id="linker.cfg.linux.mipsel" name="${gcc.compat.compiler}">
    </linker>
+   <linker id="linker.cfg.linux.mips64el" name="${gcc.compat.compiler}">
+   </linker>
    <linker id="linker.cfg.linux.ppc" name="${gcc.compat.compiler}">
</linker> 1413行添加代码:
<target name="gluegen.cpptasks.declare.compiler.linux.mipsel" if="isLinuxMipsel">
      <echo message="Linux.Mipsel" />
      <property name="compiler.cfg.id.base"          value="compiler.cfg.linux" />
      <property name="linker.cfg.id.base"            value="linker.cfg.linux" />
      <property name="java.lib.dir.platform"         value="${java.home.dir}/jre/lib/mipsel" />
    </target>
+    <target name="gluegen.cpptasks.declare.compiler.linux.mips64el" if="isLinuxMips64el">
+      <echo message="Linux.Mips64el" />
+      <property name="compiler.cfg.id.base"          value="compiler.cfg.linux" />
+      <property name="linker.cfg.id.base"            value="linker.cfg.linux" />
+      <property name="java.lib.dir.platform"         value="${java.home.dir}/jre/lib/mips64el" />
+    </target>
    <target name="gluegen.cpptasks.declare.compiler.linux.ppc" if="isLinuxPpc">
      <echo message="Linux.Ppc" />
      <property name="compiler.cfg.id.base"          value="compiler.cfg.linux" />
      <property name="linker.cfg.id.base"            value="linker.cfg.linux" />
      <property name="java.lib.dir.platform"         value="${java.home.dir}/jre/lib/ppc" />
</target>1449行添加代码:
 + gluegen.cpptasks.declare.compiler.linux.mipsel,6.在build-test.xml文件中搜索java.build,在164行添加如下代码:
 +   <!--
+   <target name="android.package" depends="java.generate,java.build,native.build" if="isAndroid">
+   -->
+    <target name="android.package" depends="java.generate,native.build" if="isAndroid">
+        <aapt.signed
            assetsdir="resources/assets-test"7.最后在make目录下,使用ant来编译:
 gluegen.build.check.aapt:
android.package:
developer-src-zip:
      [zip] Building zip: /home/loongson/jogl/gluegen/build/gluegen-java-src.zip
developer-zip-archive:
all:
BUILD SUCCESSFULgluegen软件包终于编译成功了!
* 最后记得将build目录下的 .jar 文件拷贝到worldwind下
第二步:编译jogl软件包
1.下载swt.jar文件(http://ftp.loongnix.org/others/NasaWorldWind/),拷贝到swt目录下(jogl-v2.1.5/make/lib/swt/)
2.进入jogl-v2.15软件包,在./make/build-nativewindow.xml文件中进行修改。
  <target name="c.configure.linux.mipsel" if="isLinuxMipsel">
      <echo message="Linux.MIPSEL" />
      <property name="compiler.cfg.id"                      value="compiler.cfg.linux" />
      <property name="linker.cfg.id.oswin"                  value="linker.cfg.linux.nativewindow.x11" />
    </target>
+   <target name="c.configure.linux.mips64el" if="isLinuxMips64el">
+      <echo message="Linux.MIPS64EL" />
+      <property name="compiler.cfg.id"                      value="compiler.cfg.linux" />
+      <property name="linker.cfg.id.oswin"                  value="linker.cfg.linux.nativewindow.x11" />
+    </target>
<target name="c.configure.linux.ppc" if="isLinuxPpc">
    ..........
+   c.configure.linux.mipsel,c.configure.linux.mips64el,c.configure.linux.ppc  3.修改build-common.xml文件,添加如下代码:
  <condition property="swt.jar" value="${project.root}/make/lib/swt/gtk-linux-x86/swt-debug.jar">
          <istrue value="${isAndroid}" /> <!-- FIXME JAU .. hack -->
        </condition>
+       <condition property="swt.jar" value="${project.root}/make/lib/swt/gtk-linux-mips64el/swt.jar">
+          <istrue value="${isLinuxMips64el}" /> <!-- FIXME JAU .. hack -->
+        </condition>
         <property name="swt-cocoa-macosx-x86_64.jar" value="${project.root}/make/lib/swt/cocoa-macosx-x86_64/swt-debug.jar"/>  4.修改build-jogl.xml文件,添加如下代码:
 <target name="c.configure.linux.mipsel" if="isLinuxMipsel">
      <echo message="Linux.MIPSEL" />
      <property name="compiler.cfg.id"                     value="compiler.cfg.linux" />
      <property name="linker.cfg.id.os"                    value="linker.cfg.linux.jogl.x11" />
    </target>
+    <target name="c.configure.linux.mips64el" if="isLinuxMipsel">
+      <echo message="Linux.MIPSEL" />
+      <property name="compiler.cfg.id"                     value="compiler.cfg.linux" />
+      <property name="linker.cfg.id.os"                    value="linker.cfg.linux.jogl.x11" />
+    </target>
+   c.configure.linux.mipsel,c.configure.linux.mips64el,c.configure.linux.ppc5.修改build-newt.xml文件,添加如下代码:
 +    <target name="c.configure.linux.mips64el" if="isLinuxMips64el">
+      <echo message="Linux.mips64el" />
+      <property name="compiler.cfg.id"                      value="compiler.cfg.linux" />
+      <condition property="linker.cfg.id.oswin"             value="linker.cfg.linux.newt.x11"
+                                                            else="linker.cfg.linux">
+          <isset property="isX11" />
+      </condition>
+      <echo message="linker.cfg.id.oswin ${linker.cfg.id.oswin}" />
+    </target>
+    c.configure.linux.mipsel,c.configure.linux.mips64el,c.configure.linux.ppc6.在make目录下,使用ant来编译:
 all:
BUILD SUCCESSFUL
Total time: 3 minutes 1 second终于编译成功了!
* 记得将jogl下的jogl-all.jar、nativewindow-natives-linux-mips64el.jar、jogl-all-natives-linux-mips64el.jar,拷贝到worldwind下
第三步:在worldwind下,运行提供的用例。
 [loongson@localhost worldwind-2.0.0]$ chmod +x run-demo.bash
[loongson@localhost worldwind-2.0.0]$ ./run-demo.bash gov.nasa.worldwindx.examples.ApplicationTemplate最终worldwind终于运行起来了!3A2000下拖动页面基本流畅。
为了能够更流畅的查看地图,可以屏蔽终端的输入:
 [loongson@localhost worldwind-2.0.0]$ ./run-demo.bash gov.nasa.worldwindx.examples.ApplicationTemplate &>/dev/null
五、如果您觉得要修改的代码太多,不方便。笔者为你提供了更简单的方法。
1. 下载http://ftp.loongnix.org/others/NasaWorldWind/ 里面有patch文件,还有使用说明。根据说明来修改三个软件包,最后在worldwind目录里输入
./run-demo.bash gov.nasa.worldwindx.examples.ApplicationTemplate