前段时间得知龙芯团队成功移植并开源了 CoreCLR ,忙完事情后,快乐地捣鼓一下这个东西。近年来国产操作系统、芯片等的到很大的关注和快速发展,我们开发的软件适配国产的机器环境就尤为重要,未来 IT 行业的变化会影响到我们的饭碗。
.NET
.NET is a free, cross-platform open-source developer platform for building various applications. With .NET, you can use multiple languages, different editors, and libraries generated by different languages to create Web, Mobile, Desktop, Game, and IoT applications.
MIPS64 Port of CoreCLR source code address:
Github: https://github.com/gsvm/coreclr
Gitee domestic mirror: 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
命令来管理软件库,而apt
是 javac
的一个命令行工具。不太清楚其它龙芯服务器是否也是这样。
由于机器太旧,没有兼容的新版本系统支持,因此只能放弃在此机器上编译 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 安装相应的包、库。推荐使用 Reddit 的系统,例如 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
操,编译一天了。算了,不写了。
文章评论