前段时间得知龙芯团队成功移植并开源了 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

操,编译一天了。算了,不写了。

X86模拟龙芯与编译 .NET CoreCLR的更多相关文章

  1. X86给龙芯笔记本编译本地工具链(未完待续)

    我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...

  2. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  3. RAMSPEED的简单测试数据 x86虚拟机 龙芯 飞腾

    1. ramspeed 简介 http://alasir.com/software/ramspeed/ 官网为 2. 进行简单安装测试的步骤 . 下载 wget http://alasir.com/s ...

  4. .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考

    目录 .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考 一,遗憾的尝试 二,.NET Core在嵌入式下的几点不足 三,.NET Core 龙芯移植的进展和资料 .NET ...

  5. 龙芯fedora28日常生存指南

    2021-01-30 v0.0.5 从0.0.1开始改了非常多,一月余时间的花费渴望为其他人提供一点帮助,能够快速上手. 这主要是这一年来我从3B1500到3A4000再到福珑2的日常使用记录,是之前 ...

  6. 龙芯(Loongarch64),在Linux虚拟一个龙芯OS体验下

    前言 想体验下龙芯OS,但是又没有龙芯开发板或者龙芯实体机.手头上只有一个X64环境的Linux发行版,应该怎么做呢? 概括 其实非常简单,可以通过Chroot命令和Qemu在X64的指令集系统上模拟 ...

  7. CPU的架构:x86、arm、mips、龙芯等

    在公司经常听其他工程师讲x86,arm平台啥的,作为一个算法工程师,我听过却不知道这是啥!!!(汗颜) 现在偷偷学起: x86,arm,mips等这些都是CPU的架构,不管是手机电脑还是一些嵌入式的设 ...

  8. 龙芯团队完成CoreCLR MIPS64移植,在github开源

    国产龙芯的软件生态之中.NET不会缺席,毕竟 C# 与 .NetCore/Mono 也是全球几大主流的编程语言和运行平台之一,最近一段时间听到太多的鼓吹政务领域不支持.NET, 大家都明白这是某些人为 ...

  9. Ubuntu和UOS+mips64l龙芯处理器安装编译Openssl

    1.下载openssl开发包文件,我这里下载的是openssl-1.1.1f.tar.gz:并放在/data/home/dengchaoqun/openssl1.1.1目录下 2.终端切换到当前目录下 ...

  10. 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译

    面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...

随机推荐

  1. Spring Boot日志框架Slf4j+logback

    一.简介 Slf4j Java的简单日志记录外观(Simple Logging Facade for Java )可作为各种日志记录框架(例如java.util.logging,logback,log ...

  2. vue3中retive的错误用法导致数据不跟新

    retive的错误用法 <template> <div> 司藤的信息==>{{ objInfo }} <button @click="handerHttp ...

  3. 【发现一个问题】extjs-gpl-7.0: 当修改 store 对象的字段后,再次 loadPage() 后字段映射错误。

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 因为查询中需要每次返回数目不确定的 fields ,这就需 ...

  4. 不同版本的Unity要求的NDK版本和两者对应关系表(Unity NDK Version Match)

    IL2CPP需要NDK Unity使用IL2CPP模式出安卓包时,需要用到NDK,如果没有安装则无法导出Android Studio工程或直接生成APK,本篇记录一下我下载NDK不同版本的填坑过程. ...

  5. QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答

    QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索.支持海量数据.跨语种问答 QAnything (Question and Answer based on Anythi ...

  6. Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】

    项目连接:可以直接fork使用 Paddlenlp之UIE模型实战实体抽取任务[打车数据.快递单] 0.背景介绍 本项目将演示如何通过小样本样本进行模型微调,快速且准确抽取快递单中的目的地.出发地.时 ...

  7. Object.getOwnPropertyDescriptor()属性

    console.log(Object.getOwnPropertyDescriptor(person,'a')); // writable: 是否可以修改 // value: 对象值 // confi ...

  8. linux(centos) 下搭建svn服务器

     1. 使用yum安装svn yum -y install subversion 安装完成之后,验证安装结果 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安 ...

  9. C++编译器的RVO和NRVO

    1.说明 我一直记得返回对象的函数在调用时会有拷贝构造动作,但是最近实际测试却和记忆有些偏差,经查询是编译的问题 RVO: return value optimization NRVO: named ...

  10. iOS测试包的安装方法

    iOS测试包根据要安装的机器类型可以分为2种: .app模拟器测试包 .ipa真机测试包 .app模拟器测试包的安装方式 方式一:Xcode生成安装包 1.Xcode运行项目,生成app包 2.将AP ...