如何在国产龙芯架构平台上运行c/c++javanodejs等编程语言(代码片段)

eguid eguid     2022-12-02     733

关键词:

高能预警:本文内容过于硬核,涉及编译器原理、cpu指令集、机器码、编程语言原理、跨平台原理等计算机专业基础知识,建议具有c、c++、java、nodejs等多种编程语言开发能力,且实战经验丰富的资深开发者阅读。

背景

全面的国产化即将来临之时,不仅是操作系统,cpu也会使用国产化芯片作为替换,那么龙芯cpu作为国产cpu龙头,当仁不让,成为国产化替换的首选,硬件条件已经满足了,作为软件开发者,基于龙芯架构的软件当然也要适配起来了。

支持龙芯的操作系统

由于龙芯目前只支持某些特定的linux发行版,有深度OS、统信UOS、中标麒麟、麒麟、普华、新支点操作系统。

截止2021年6月1日,支持的操作系统版本如有新的操作系统支持,请参照龙芯官网说明。

龙芯架构简介

龙芯架构如果在编译器层面不做适配,编程语言(静态编译型和动态编程语言)是不能运行的,为什么运行不了呢?因为cpu指令集不同,目前市面上的编程语言大部分都是以支持intel/amd为首的x86或者x86_64指令集,和支持苹果安卓等移动端使用的arm精简指令集为主,龙芯使用开源的mips指令集,与上面都不同,除非编程语言的编译器能够支持mips指令集编译,否则市面上所有编程语言都不支持在龙芯架构平台上运行。

对于编译器可以说大部分开发者可能跟博主一样,七窍通了六窍。但是这不要紧,并不影响我们理解它的原理。

编程语言是如何运行在特定架构的平台上的呢? 答案是:编译器。

编译器原理简述

(过于硬核,可以选择跳过到后面的龙芯运行java)

有一点大家知道的是,我们编写的代码只是为了方便我们人类去阅读、编写的,机器是没办法运行的,这时候根据编程语言的不同,就需要编译器将静态编译型语言翻译成机器码。

静态编译型语言如何编译到特定架构平台

编译器把我们编写的代码翻译成特定架构平台的机器码,比如使用gcc,cmake编译c/c++代码的时候需要选择特定的架构平台。
再比如,rust、golang等语言则必须先用c++编译器编译出支持龙芯的golang、rust编译器,才能自举,否则无法编译运行。

这里我们以c/c++为例,来简单介绍一下如何编译到龙芯平台。

如何编译c/c++代码到龙芯架构平台

对于使用了上述操作系统的小伙伴们,可以直接跟其他linux一样,cmake,./configure就可以了,没有一点变化,所以我们直接跳过,这里讲讲使用其他操作系统的情况,就是只要在编译的时候加上两个参数(架构和cpu)即可

./configure 
--arch=mips 
--cpu=loongson3a

ffmpeg和opencv都参照这种方式编译即可。

注意:GCC4.6以后才默认支持龙芯3A架构,所以请GCC版本较低的自行升级到最新版本即可。

动态语言如何在特定架构平台运行

动态语言与静态编译型语言不同在于它们在每种架构平台都有一套运行时(以java和nodejs举例:jvm,v8)。比如java和nodejs,java在不同的操作系统和架构上都提供了不同的jdk运行时,而js则依靠不同架构平台的v8虚拟机运行时才能运行,而jdk和nodejs运行时都依靠静态编译型语言编译成特定架构平台机器码才能运行,所以不管是动态编译还是动态脚本都需要依赖通过特定架构平台的静态编译后的运行时(运行时:jvm,v8等) 。

那么到这里,我们已经知道要解决在龙芯架构平台上运行java或者nodejs这种动态编译型语言该如何做了,jdk和nodejs都是使用c/c++编写的,那么我们就可以编译jdk和nodejs(含v8引擎)的源码(c/c++)到龙芯指令集就可以了

可喜的是龙芯平台帮我做了这件事,目前龙芯平台已经可以支持java。

如何在龙芯上运行Java

龙芯很早就开始参贡献openjdk项目了,因此,国产龙芯平台自己也维护了一个openjdk版本分支:http://www.loongnix.org/index.php/Java
龙芯平台上必须使用该版本jdk才可以运行java项目,这样就不需要我们自己去编译openjdk的源码到龙芯平台了。
因为龙芯平台单独维护了jdk版本,所以使用java的小伙伴们只要使用龙芯的openjdk版本就可以把java项目很平滑的部署到龙芯平台上,而不需要担心兼容性的问题,真正让java实现了一次编写,到处运行。

如何在龙芯平台上运行nodejs

nodejs是一个基于 Chrome V8 引擎的 JavaScript 运行环境;

  跟Java相同的是,龙芯平台已适配了loongnix-Server以及Debian10对应的版本:nodejs-v12.16.3,并将持续维护。所以nodejs的小伙伴们可以安心了,使用nodejs开发的程序可以平滑的过渡到龙芯平台上运行。

★ NodeJS下载
nodejs-v12.16.3(server系统) 点击下载
nodejs-v12.16.3(debian系统) 点击下载

★ 龙芯NPM源
源地址1:http://npm.loongnix.org:4873
源地址2:http://registry.loongnix.org:4873

说明:龙芯npm源设置方法与设置淘宝npm源完全类似,例如:npm config set registry
http://npm.loongnix.org:4873

到这里为止,我们已经涵盖了大部分常用的编程语言如何运行在龙芯平台上的说明,为了更好的支持的发展,博主会继续更新有关国产芯片和国产操作系统的文章,欢迎大家不吝“点赞、收藏、关注”一键三连。

什么是龙芯平台jdk?国产龙芯平台jdk版本解惑(代码片段)

什么是龙芯平台JDK?龙芯公司基于OpenJDK从无到有实现的LoongArch64和MIPS64上的版本。龙芯平台JDK是基于开源的OpenJDK研发的,通过了JCK的测试,符合JavaSE的标准。龙芯平台JDK使用GPLv2,withClasspathException授权协议。为什... 查看详情

国产化系列龙芯平台指令集简介及现有处理器的支持特性(代码片段)

DATE:2021.10.27文章目录1、转载参考2、龙芯平台指令集简介3、编译参数4、查找热点函数进行代码优化1、转载参考龙芯平台指令集简介及现有处理器的支持特性2、龙芯平台指令集简介LoongISA里包括MIPS部分指令集,其中有MIPS64Rele... 查看详情

国产化系列银河麒麟系统(龙芯3a4000)上docker安装指南(代码片段)

DATE:2021.10.15文章目录1、Docker安装包下载2、docker安装方法3、启动docker服务4、制作基础镜像4.1、通过tar备份目录4.2、导入镜像4.3、运行4.4、删除:5、升级gcc版本6、参考1、Docker安装包下载Docker-龙芯开源社区(loongnix.cn)2、docker安... 查看详情

国产32核服务器cpu验证成功!100%自主指令架构,单机最多可支持四路128核,来自龙芯中科...

明敏鱼羊发自凹非寺量子位|公众号QbitAI国产CPU又有新进展了:龙芯中科宣布,已完成32核服务器CPU初样芯片验证。官方信息显示,这颗名为3D5000的芯片,是通过芯粒技术把两个原生16核的3C5000封装在一起。△图源&#... 查看详情

国产实时操作系统+intelx86/龙芯平台超边缘计算机方案

引言近年来,物联网、云计算、机器学习和网络安全等技术不断推动工业4.0的发展,“云边端”的架构正逐步替代“云管端”,边缘计算成为新时代许多领域转型的关键要素。以智能制造为例,不同于为互联网服... 查看详情

国产cpu新里程碑!龙芯3号新一代发布,性能追赶amd

芯东西12月24日消息,今天,龙芯中科发布龙芯4000系列CPU芯片,分别为<strong>3A4000和3B4000</strong>。性能方面,3A4000/3B4000采用28nmFDSOI工艺,微架构为GS464V核心,通用处理性能提升一倍以上,这将成为我国自主CPU发展史上又... 查看详情

国产cpu新里程碑!龙芯3号新一代发布,性能追赶amd

芯东西12月24日消息,今天,龙芯中科发布龙芯4000系列CPU芯片,分别为<strong>3A4000和3B4000</strong>。性能方面,3A4000/3B4000采用28nmFDSOI工艺,微架构为GS464V核心,通用处理性能提升一倍以上,这将成为我国自主CPU发展史上又... 查看详情

国产loongarch64(龙芯)gcc的初体验

前言龙芯可能是国产里面比较独立的构建上下游生态的IP架构,在GCC,LLVM,Qemu里面均有相应适配,本篇初次体验下其GCC下的龙芯。概括1.先下载一个龙芯交叉编译tool:下载地址:http://ftp.loongnix.cn/toolchain/gc... 查看详情

[转帖]你不曾见过的国产cpu:可能是最全的龙芯系列芯片家谱(上)

你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(上)https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=717788 爱集微·06-0122:07·IC 来源: IT之家2009年,美国著名杂志《连线》刊登了一篇题为《人民的处... 查看详情

livegbslivenvr等国产化平台中视频监控平台的适配以及实现监控摄像头web浏览器无插件播放的方案

目前在国产话大背景下,很多应用软件都要适配国产化服务器。尤其是与政务、公安相关的项目,基本都开始国产化。目前很少有监控视频平台支持国产话系统的,但是这一步是势在必行的。LiveGBSGB28181视频平台在龙芯、鲲鹏、... 查看详情

国产化之x64平台安装银河麒麟操作系统(代码片段)

背景某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟v4,CPU使用飞腾处理器。飞腾处理器是ARMv8架构的,在之前的文章中介绍了使用QEMU模拟ARMv8架构安装银河麒麟操作系统的方式,不过这种模拟的方式运行效... 查看详情

国产化系列龙芯平台指令集简介及现有处理器的支持特性(代码片段)

DATE:2021.10.27文章目录1、转载参考2、龙芯平台指令集简介3、编译参数4、查找热点函数进行代码优化1、转载参考龙芯平台指令集简介及现有处理器的支持特性2、龙芯平台指令集简介LoongISA里包括MIPS部分指令集,其中有MIPS64Rele... 查看详情

rt-thread与龙芯中科完成产品兼容互认

...名物联网操作系统厂商睿赛德科技(RT-Thread)与国产CPU领军企业龙芯中科技术股份有限公司(以下简称“龙芯中科”)完成产品兼容互认。睿赛德科技的高安全嵌入式实时操作系统产品RT-ThreadSecure在龙芯2K1000平台... 查看详情

如何确定跨平台项目的架构类型?

】如何确定跨平台项目的架构类型?【英文标题】:Howtodeterminearchitecturetypeincross-platformproject?【发布时间】:2019-07-0520:33:21【问题描述】:我在Xcode11beta2中创建了项目,该项目具有新引入的跨平台功能,适用于iOS和macOS。我无法... 查看详情

国产数字芯片厂商详细信息

参考技术A国产数字芯片厂商详细信息下面我们将从核心技术、主要产品、目标市场和应用方案等方面对这30家公司逐一展示。中科龙芯核心技术:MIPS授权架构的CPU及生态圈、跨指令兼容的二进制翻译技术。主要产品:面向行业... 查看详情

[转帖]龙芯3a4000处理器实测:28nm工艺不变性能仍可提升100%以上(代码片段)

...63122.htm 龙芯是中科院下属的计算机所研发的自主产权国产处理器,现在已经由中科龙芯公司商业化,再过几天他们又要发布新一代龙芯处理器——龙芯3A4000系列了,这是在现有的龙芯3A3000系列上的改进版。根据之前的... 查看详情

编译cython的HelloWorld示例:不知道如何在平台上编译C/C++代码

】编译cython的HelloWorld示例:不知道如何在平台上编译C/C++代码【英文标题】:Compilingcython\'sHelloWorldExample:don\'tknowhowtocompileC/C++codeonplatform【发布时间】:2017-11-0903:25:57【问题描述】:每当我尝试编译simplesetcython示例时helloworld.pyxpr... 查看详情

jumpserver开源堡垒机完成龙芯架构兼容性认证

...件提供商FIT2CLOUD飞致云宣布,JumpServer开源堡垒机通过龙芯架构兼容性认证。经过严格验证,LoongArch龙芯架构与JumpServer运维安全审计系统V2.0在龙芯3A5000/3C5000L平台上完成兼容性测试,功能与稳定性良好,获得由龙... 查看详情