前段时间得知龙芯团队成功移植并开源了 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
操,编译一天了。算了,不写了。