X86模擬龍芯與編譯 .NET CoreCLR


前段時間得知龍芯團隊成功移植並開源了 CoreCLR ,忙完事情后,快樂地搗鼓一下這個東西。近年來國產操作系統、芯片等的到很大的關注和快速發展,我們開發的軟件適配國產的機器環境就尤為重要,未來 IT 行業的變化會影響到我們的飯碗。

.NET

.NET是一個免費的、跨平台的開源開發人員平台,可以構建多種應用程序。借助.NET,您可以使用多種語言、不同的編輯器和不同語言生成的庫來創建 Web,Mobile,Desktop,Game 和 IoT 應用。

MIPS64 Port of CoreCLR 源碼地址:

Github:https://github.com/gsvm/coreclr

Gitee國內鏡像:https://gitee.com/whuanle/coreclr

收到一台龍芯機器

感謝新生命團隊的石頭哥提供了一台龍芯服務器,其機器型號及配置系統版本如下:

靈瓏 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:

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 命令來管理軟件庫,而aptjavac 的一個命令行工具。不太清楚其它龍芯服務器是否也是這樣。

由於機器太舊,沒有兼容的新版本系統支持,因此只能放棄在此機器上編譯 CoreCLR,改成使用 X86(Linux) 跨架構模擬CPU,使用了 QEMU 工具來跑適配龍芯的 Fedora28 系統。

編譯 CoreCLR 環境要求

.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)

你可以參考筆者以往的文章來了解:https://www.cnblogs.com/whuanle/p/11426310.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 系統。

Linux 安裝 KVM

首先要在系統上安裝 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.qcow2、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 安裝相應的包、庫。推薦使用 Redhat的系統,例如 Fedora28、Centos,不然你會被折騰哭的。

然后需要漫長的等待。

成功后會出現:

登錄:

user:lemote
password:loongson

下載 CoreCLR

在使用 QEMU 啟動 Fedora28 后,有兩種通道使用 Fedora28 系統,會出現窗口啟動系統桌面,同時終端(tty)也可以登錄到 Fedora28,也就是說不需要遠程登錄。

因為桌面比較卡,所以我們可以直接在終端執行命令,這樣就不需要進入 Fedora28 系統桌面啟動終端了(別亂用 Ctrl + C)。

首先在系統安裝 git:

sudo yum install git

然后從加速倉庫下載源碼:

sudo git clone https://gitee.com/whuanle/coreclr.git

嘗試編譯 CoreCLR

現在所有文件都下載就緒了,不過前面 編譯 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

操,編譯一天了。算了,不寫了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM