高能預警:本文內容過於硬核,涉及編譯器原理、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
到這裡為止,我們已經涵蓋了大部分常用的程式語言如何執行在龍芯平臺上的說明,為了更好的支援的發展,博主會繼續更新有關國產晶片和國產作業系統的文章,歡迎大家不吝“點贊、收藏、關注”一鍵三連。