前段時間得知龍芯團隊成功移植並開源了 CoreCLR ,忙完事情後,快樂地搗鼓一下這個東西。近年來國產操做系統、芯片等的到很大的關注和快速發展,咱們開發的軟件適配國產的機器環境就尤其重要,將來 IT 行業的變化會影響到咱們的飯碗。html
.NET是一個免費的、跨平臺的開源開發人員平臺,能夠構建多種應用程序。藉助.NET,您可使用多種語言、不一樣的編輯器和不一樣語言生成的庫來建立 Web,Mobile,Desktop,Game 和 IoT 應用。java
MIPS64 Port of CoreCLR 源碼地址:linux
Github:https://github.com/gsvm/coreclrios
Gitee國內鏡像:https://gitee.com/whuanle/coreclrc++
感謝新生命團隊的石頭哥提供了一臺龍芯服務器,其機器型號及配置系統版本以下:git
靈瓏 9S2A Linux Loongson 2.6.27.1 #6 Wed Nov 10 16:17:35 CST 2010 mips64 GNU/Linux Debian GNU/Linux 5.0
CPU:github
system type : lemote-lynloong-2f-9003 processor : 0 cpu model : ICT Loongson-2 V0.3 FPU V0.1 BogoMIPS : 532.48 wait instruction : no microsecond timers : yes tlb_entries : 64
此使用的龍芯服務器系統使用 apt-get
命令來管理軟件庫,而apt
是 javac
的一個命令行工具。不太清楚其它龍芯服務器是否也是這樣。shell
因爲機器太舊,沒有兼容的新版本系統支持,所以只能放棄在此機器上編譯 CoreCLR,改爲使用 X86(Linux) 跨架構模擬CPU,使用了 QEMU 工具來跑適配龍芯的 Fedora28 系統。ubuntu
.NET Core Runtime 對操做系統以及操做系統要求版本,可參考:https://github.com/dotnet/core/blob/master/release-notes/3.1/3.1-supported-os.md服務器
因爲 CoreCLR 的依賴很是多,要編譯 CoreCLR ,你可能須要在系統中(Linux)安裝如下版本及以上的類庫:
cmake 3.14 llvm-3.9 clang-3.9 lldb-3.9 liblldb-3.9-dev libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev libcurl4-openssl-dev libssl-dev libkrb5-dev libnuma-dev (optional, enables numa support)
你能夠參考筆者以往的文章來了解:http://www.javashuo.com/article/p-atwvyfyq-hk.html
爲了可以更快安裝、更新軟件,你可能須要更換軟件源加快訪問速度,MIPS 鏡像源請參考如下資料:
而後使用如下命令更新系統:
sudo apt-get upgrade sudo apt-get update
若是出現 W: GPG error:
,說明更換過鏡像源,簽名失效,此時須要從新添加密鑰文件。
你能夠查看此處解決問題:https://askubuntu.com/questions/131601/gpg-error-release-the-following-signatures-were-invalid-badsig
如何在龍芯服務器上重裝系統:http://ftp.loongnix.org/os/loongnix/1.0/doc/Loongnix-1.0.2003%e5%ae%89%e8%a3%85%e6%89%8b%e5%86%8c.pdf
考慮到大多數同窗沒有龍芯服務器,咱們能夠在 Linux for X86 的機器上,使用 Emulate Loongson On x86 Machine(如下簡稱QEMU) 來模擬運行龍芯 CPU 。不過性能會很低,只適合使用開發測試。
Linux for X86 系統推薦使用 Fedora 系統,迅雷加速下載地址:thunder://QUFodHRwOi8vbWlycm9ycy55dW4taWRjLmNvbS9mZWRvcmEvcmVsZWFzZXMvMzIvV29ya3N0YXRpb24veDg2XzY0L2lzby9GZWRvcmEtV29ya3N0YXRpb24tTGl2ZS14ODZfNjQtMzItMS42Lmlzb1pa
注:若是已經安裝 Linux 系統,則不須要再下載此鏡像。若是使用深度等系統,後續可能須要安裝一些別的庫。
筆者使用的是 Deepin 系統。
首先要在系統上安裝 Kernel-based Virtual Machine(KVM),才能配合 QEMU 虛擬 CPU。
一鍵安裝須要的環境:
sudo apt-get update --fix-missing sudo apt-get install virt-manager bridge-utils libvirt-clients qemu qemu-kvm
Fedora28 for 龍芯系統:http://dev.lemote.com:8000/files/fedora28-qemu/
注:必下,須要下載 Fedora28-for-loongson-live6-mate.qcow二、initramfs-5.4.38-1.fc28.lemote.mips64el.img 、vmlinuz-5.4.38-1.fc28.lemote.mips64el 三個文件。
接下來要安裝 QEMU,你能夠參考 官方文檔,自行安裝。
可是爲了方便和節約時間,能夠下載已經編譯過的庫:http://ftp.godson.ac.cn/users/~flygoat/qemu-loongson-amd64/ ,下載 qemu-loongson-amd64-rc1.zip 文件。
下載完畢後,解壓 qemu-loongson-amd64-rc1.zip 文件,進入目錄,執行chmod 777 qemu-system-mips64el
,而後將下載的系統 Fedora28-for-loongson-live6-mate.qcow2 等三個文件 件放到此目錄下。
執行:
sudo ./qemu-system-mips64el -M loongson3 -vga qxl -serial stdio \ -device qemu-xhci,id=xhci -device usb-tablet,bus=xhci.0 \ -kernel vmlinuz-5.4.38-1.fc28.lemote.mips64el \ -initrd initramfs-5.4.38-1.fc28.lemote.mips64el.img \ -append "console=ttyS0,115200 root=/dev/vda3" \ -drive file=./Fedora28-for-loongson-live6-mate.qcow2,if=virtio \ -L ./pc-bios
注:若是執行後提示缺乏例如 libpng15.so.15 等,請自行 Google 安裝相應的包、庫。推薦使用 Reddit 的系統,例如 Fedora2八、Centos,否則你會被折騰哭的。
而後須要漫長的等待。
成功後會出現:
登陸:
user:lemote password:loongson
在使用 QEMU 啓動 Fedora28 後,有兩種通道使用 Fedora28 系統,會出現窗口啓動系統桌面,同時終端(tty)也能夠登陸到 Fedora28,也就是說不須要遠程登陸。
由於桌面比較卡,因此咱們能夠直接在終端執行命令,這樣就不須要進入 Fedora28 系統桌面啓動終端了(別亂用 Ctrl + C)。
首先在系統安裝 git:
sudo yum install git
而後從加速倉庫下載源碼:
sudo git clone https://gitee.com/whuanle/coreclr.git
如今全部文件都下載就緒了,不過前面 編譯 CoreCLR 環境要求
一節,咱們提到編譯 CoreCLR 須要依賴不少庫,例如 cmake,因此這個時候,咱們還不能直接編譯下載的 CoreCLR 源代碼。
首先更新一下:
sudo yum upgrade sudo yum update
執行 cmake --version
你會發現 cmake 版本是 3.11,而 CoreCLR 要求 3.14 以上。因此咱們須要更新一下系統自帶的 cmake,還有其餘的依賴庫。
可是要編譯出 cmake ,起碼一個下午,再處理其餘庫,就分分鐘自閉了。。。
可使用下面命令快速安裝一些依賴庫:
sudo dnf install llvm cmake clang libunwind-devel lttng-ust-devel libicu-devel numactl-devel gcc-c++ openssl libssl-dev # 若是執行命令時提示哪個依賴庫有問題,能夠先從列表中移除,後續再單個安裝
不過很淒涼的是 fedora28 MIPS 的 cmake 版本:
cmake.mips64el 3.11.2-1.fc28.lemote @fedora
看樣子只能手動編譯了。。。
先將 cmake 的源代碼下載:
git clone https://gitee.com/mirrors/CMake.git
源代碼下載完畢後,進入目錄,執行如下命令進行編譯:
cmake . && make && make install
若是提示找不到 OpenSSL,則執行如下命令再從新執行編譯操做:
rm -f CMakeCache.txt yum -y install ncurses-devel yum install openssl-devel
原本 cmake 的編譯速度奇慢,耐心等待(要半天可能都不行),不過按照筆者給出的步驟來,能夠省下幾個小時。
而後打開 coreclr 目錄,執行:
sudo ./build.sh
操,編譯一天了。算了,不寫了。