开发者指南

龙架构开发入门及注意事项

在非 x86 场景下,许多开发者朋友们可能会问:

这个设备的 SDK 在哪里?

经过自 2021 年以来社区贡献者和龙芯中科工程师的共同努力,大多数主流工具链也已有上游支持。

这意味着什么?

这意味着,获取各类编程工具链的方式已经和 x86 平台上别无二致,不论是通过发行版还是各类编程语言、工具链的官网直接复制一键安装命令,越来越多的编程工具和环境都可以非常简便地安装了!

TIP

考虑到 ABI2.0(“新世界”)是龙架构社区用户和开发者使用的现行标准,本指南仅面向 ABI2.0 系统介绍工具链的安装配置方法,而不再介绍 ABI1.0(“旧世界”)系统相关信息。如果您有面向 ABI1.0 的开发需求,我们建议您与相关项目方沟通并再次确认需求,并在确认有明确必要时,参考来自龙芯开源社区 (loongnix.cn) 的相关资料。


GNU 工具链

GCC 及 Binutils 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。

TIP

请注意:GCC 和 Binutils 后续版本引入了对龙架构平台的支持增强,尤其是 GCC 14 引入了龙架构向量指令集支持、Binutils 2.41 引入了链接器松弛 (Relaxation) 支持,而后 GCC 16 引入了 medium 代码模型支持,对大规模软件项目的支持更佳,均属于关键功能更新。如有可能,请更新到至少如上版本。

如果您希望为软件项目发布通用二进制或正在维护 Linux 发行版,请注意阅读《龙架构软件开发与构建约定》中的相关规范约束。

如下是在几个常见 Linux 发行版和操作系统下安装 GNU 工具链的方法:

操作系统安装方式
安同 OSoma install binutils gcc
Arch Linuxsudo pacman -S binutils gcc
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install build-essential
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install binutils gcc

如果您没有龙架构设备或希望交叉编译:

操作系统安装方式
安同 OSoma install gcc+cross-loongarch64
Debian 13 及以上、Ubuntu 24.04 及以上,以及各衍生版sudo apt install gcc-loongarch64-linux-gnu
Windows 及其他 Linux 发行版请从 GitHub 仓库 loongson/build-tools 安装

LLVM 工具链

LLVM 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。

TIP

请注意:LLVM 后续版本引入了对龙架构平台的支持增强,其中 LLVM 18 引入了龙架构向量指令集支持。如有可能,请至少更新到该版本。

如果您希望为软件项目发布通用二进制或正在维护 Linux 发行版,请注意阅读《龙架构软件开发与构建约定》中的相关规范约束。

如下是在几个常见 Linux 发行版和操作系统下安装 LLVM 工具链(含 Clang)的方法:

操作系统安装方式
安同 OSoma install llvm
Arch Linuxsudo pacman -S clang llvm
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install clang llvm
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install clang llvm

LLVM 工具链(尤其是 Clang 编译器)原生支持交叉编译,使用 LLVM 17 或更新版本并参考本文指定龙架构目标(如 loongarch64-unknown-linux-gnu)即可为龙架构交叉编译该工具链。

Rust

Rust 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。

Rust 官方推荐使用 rustup 安装 Rust 工具链:

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

如下是在几个常见 Linux 发行版和操作系统下安装 Rust (rustc) 及 Cargo 包管理器的方法:

操作系统安装方式
安同 OSoma install rustc
Arch Linuxsudo pacman -S rustc
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install rust-all
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install rust cargo

Node.js

Node.js 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。目前 Node.js 通过 Unofficial Builds 项目提供龙架构二进制,从该页面下载 loong64 标记的工具链包即可直接使用。

如下是在几个常见 Linux 发行版和操作系统下安装 Node.js 的方法:

操作系统安装方式
安同 OSoma install nodejs
Arch Linuxsudo pacman -S nodejs
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install nodejs
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install nodejs

TIP

由于软件维护和用户应用场景的需要,许多 Linux 发行版都提供了多个版本的 Node.js 工具链。您可以根据需要查阅相关发行版的文档,并安装您所需的 Node.js 版本。

Go

Go 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。目前 Go 官方已开始提供龙架构二进制,您可以通过其下载页面下载。

如下是在几个常见 Linux 发行版和操作系统下安装 Go 工具链的方法:

操作系统安装方式
安同 OSoma install go
Arch Linuxsudo pacman -S go
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install golang
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install golang

Go 工具链原生支持交叉编译,使用 Go 1.21 或更新版本并参考本文指定龙架构目标(即 GOARCH=loong64)即可为龙架构交叉编译该工具链。

Python

Python 已正式支持龙架构,您可以通过发行版仓库直接安装、下载二进制或交叉编译等方式安装该工具链。

如下是在几个常见 Linux 发行版和操作系统下安装 Python 的方法:

操作系统安装方式
安同 OSoma install python-3
Arch Linuxsudo pacman -S python
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install python3
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install python3

TIP

由于龙架构仍缺少 manylinux 基线定义,目前 PyPI 官方源没有提供龙架构的模块二进制(这意味着如果您使用 pip 安装 PyPI 模块时,会现场编译相关模块,且可能会需要您安装对应的 C/C++/Rust 工具链)。

龙芯中科目前在 lpypi.loongnix.cn 提供了面向 ABI2.0 系统的 PyPI 二进制源,您可以编辑 /etc/pip.conf 修改 pip 配置以使用该源。此外 GitHub 上的 loong64 组织亦有维护独立的 PyPI 二进制源,具体配置方式请参阅该组织的自述文件。

.NET

.NET 已正式支持龙架构,但由于龙架构属于 .NET 的“社区支持架构 (community-supported architecture)”,微软官方不提供其二进制工具链。

您可以通过以下途径获取 .NET 工具链二进制:

对于常见的 Linux 发行版,选择 RID(.NET 运行时标识符)为 linux-loongarch64 的 SDK 包即可获取完整工具链。如 dotnet-runtime-10.0.1-linux-loongarch64.tar.gz;关于如何使用 tar 包安装 .NET SDK,参阅 .NET 官方文档

为龙架构交叉编译 .NET 程序 ​

.NET 原生支持交叉编译和跨平台发布,使用 .NET 9 以上版本并参考本文指定目标 RID 后即可为龙架构发布 .NET 程序,但由于龙架构属于 .NET 的“社区支持架构”,NuGet.org 不提供目标为龙架构的 .NET 运行时包,在构建过程中会因此失败。

目前可以通过本地提供相应 NuGet 包的方式规避:

从上文获取工具链的位置获取以下文件(*号为具体的版本号):

  • Microsoft.AspNetCore.App.Runtime.linux-loongarch64.*.nupkg
  • Microsoft.NETCore.App.Crossgen2.linux-loongarch64.*.nupkg
  • Microsoft.NETCore.App.Host.linux-loongarch64.*.nupkg
  • Microsoft.NETCore.App.Runtime.linux-loongarch64.*.nupkg
  • runtime.linux-loongarch64.Microsoft.DotNet.ILCompiler.*.nupkg

TIP

loongson-community/dotnet-unofficial-build 提供的发行版将上述文件归类为“源码构建用产物包”,请下载该包以获取上述组件。

将上述文件放入符合您需要的路径(如/data/loongarch64-nupkgs)并参考本文将该目录加入 NuGet 源列表,如下所示:

xml
<packageSources>
    <add key="LoongArch64 Packages" value="/data/loongarch64-nupkgs" />
</packageSources>

方能交叉编译龙架构 .NET 程序。

编译 .NET 工具链 ​

.NET 工具链本身的编译较为复杂,建议参考龙芯中科使用的 CI 构建脚本;该方式使用 .NET 官方推荐的 VMR 源码发行包进行编译。

Java

由于非技术原因,Oracle OpenJDK 暂未支持龙架构 JIT。要安装 Java 工具链,目前推荐通过各 Linux 发行版或通过“龙芯开源社区 (loongnix.cn)” 下载“兼容 Linux 5.10.0 内核 UAPI”的二进制包。

如下是在几个常见 Linux 发行版和操作系统下安装 Java 工具链的方法:

操作系统安装方式
安同 OSoma install openjdk
Arch Linuxsudo pacman -S java-openjdk
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install default-jdk
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install java-latest-openjdk

TIP

由于软件维护和用户应用场景的需要,许多 Linux 发行版都提供了多个版本的 JDK。您可以根据需要查阅相关发行版的文档,并安装您所需的 JDK 版本。

Linux 内核

上游 Linux 内核已正式支持龙架构。一般来说,基于 ABI2.0 的 Linux 发行版均使用上游内核(外加平台规避等补丁,见下文参考),但也有部分商业性质的发行版会选用 6.6 内核并附加大量平台支持补丁。

TIP

Linux 内核从 5.19 包含对龙架构支持,但如希望发挥龙架构硬件机能和性能,请使用最新主线内核分支。

内核维护参考 ​

如前文所说,对于龙架构设备来说,Linux 内核是越新越好的。但考虑到 Linux 发行版有具体的维护规则和需要,如下是对 Linux 大版本更新对应的平台支持的说明:

Linux 版本关键平台支持更新
7.1.43B6000/3C6000 PCIe 速率修复
7.1.1ACPI SystemIO 区域支持
7.12K0300/2K3000/3B6000M 多通道 DMA 支持
6.182K2000/2K3000/3B6000M GPIO 修复
6.172K3000/3B6000M 片上网卡 DWMAC 支持;PWM 调频修复
6.162K2000/2K3000/3B6000M SDIO 支持
6.143C6000 家族多路支持
6.123B6000/3C6000 家族支持(高级扩展 IRQ 模型)
6.7虚拟化支持
6.4超线程 (SMT) 支持

未上游补丁 ​

长期以来,龙架构内核维护及新平台支持均有推送主线,但由于种种技术和非技术原因,部分龙架构功能相关的补丁仍未能上游化。

下表中列出了目前已知的、正在各下游(开发者、发行版社区等)维护的必要支持补丁,供各位参考(补丁列表及代码基于 v7.1.4 技术状态,不包含已经合并到上游的补丁):

描述新增或影响的配置项链接备注
PixArt PS/2 总线设备支持新增:MOUSE_PS2_PIXART (bool: y/n)1用于清华同方超锐 L860-T2、卓怡恒通 L71 等基于 3A5000 及 3A6000 的笔记本,可解决这些设备上触摸板被错误识别为 PS/2 鼠标,导致手势功能及手掌探测失效
HWMon(如温控等硬件监控功能)支持,可为龙芯 3 号家族提供处理器温控支持新增:CPU_HWMON (bool: y/n)1不包括 7A 桥片监控支持;如固件通过 ACPI Thermal Zone 表示该传感器(3C6000 及更新平台上的 202511 及更新版本固件已经支持),就不再需要该补丁
2K3000/3B6000M 平台 CAN-FD 支持新增:CAN_LSCANFD (bool: y/n), CAN_LSCANFD_PLATFORM (tristate: y/m/n)1依赖 7.1 以上内核版本提供的多通道 DMA 支持
BPI1000/1001(“旧世界”)固件平台支持无1, 2, 3, 4, 5, 6, 7, 8在联想开天 M540z、国光 3C5000L 四路服务器及部分使用 2020 - 2022 年份昆仑固件的平台上须打上,否则无法启动
龙芯 I2C 控制器时钟属性解析和总线速率控制支持CONFIG_LS2X_I2C1缺失此功能会导致一些 3B6000M 笔记本的触摸板出现卡顿
SMCv2 固件协议更新CONFIG_LOONGSON3_CPUFREQ1缺失此更新可能导致系统在 202605 版本固件打开 DVFS 开关时引导失败;可以关闭这一配置项规避;另请注意 202605 版本固件为实验性质
规避 DSDT 表中 GPIO 使用了旧版《龙芯 CPU 统一系统架构规范》规定的 gsi_idx_map 中断定义,导致无法使用 GPIO 作为中断源、部分笔记本触摸板不可用的问题CONFIG_GPIO_LOONGSON_64BIT1原则上不影响 2K3000/3B6000M 及后续产品
规避 AMD GCN 1.0 - 4.0 显卡在龙架构平台上时有驱动崩溃、复位和锁死的问题CONFIG_DRM_AMDGPU1机理不明(属于实证型补丁);该规避不能完全避免问题,只能降低问题发生概率;deepin 等商用 6.6 内核中包含更为激进(但同样机理不明)的补丁集,参见该 deepin 拉取请求
规避 AMD "radeon" 显卡驱动(用于 TeraScale 2 及更早的显卡)在 7A 转出的 PCIe 总线上可能出现数据错误的问题CONFIG_DRM_RADEON1, 2, 3机理不明(提交消息在技术上未必正确),但的确有效;补丁 3 将该修改限定给 MIPS 及龙架构 64 位平台 (MACH_LOONGSON64)
在 ACPI 初始化代码中注册 7A2000 桥片中的 3 号 PWM 控制器 LOON0006:03 为 gsgpu_backlight,以支持 LoongGPU 驱动的背光调节CONFIG_PWM_LOONGSON1该补丁是 LoongGPU 背光支持的前序补丁,LoongGPU 驱动相关补丁请见 AOSC-Tracking/loonggpu-kernel-dkms @ aosc/v1.0.1-alpha-lnd25.5
启用 USB root hub 的“远程唤醒”(如 USB 键盘、鼠标等输入设备)支持CONFIG_USB1, 2加入该补丁后可使用键盘唤醒处于 ACPI S3 状态的龙架构设备,但已知会造成部分 x86 笔记本无法睡眠;补丁 2 将该修改限定给 MIPS 及龙架构 64 位平台 (MACH_LOONGSON64)
在 loongson-laptop 驱动的 S3 睡眠/唤醒流程中复位背光使能状态CONFIG_LOONGSON_LAPTOP1规避部分 3B6000M 笔记本 EC 固件导致从 S3 唤醒后屏幕背光被关闭的问题
在 sc.q 行为不正确时将其禁用无1部分 2K3000/3B6000M 平台的固件错误配置了 LA364E 核导致 sc.q 指令写入错误数据,此时需规避该问题才能引导内核;此规避不完整,如用户空间程序在未检查 AT_HWCAP 的情况下使用了 sc.q 指令则其仍可能得到错误结果;建议更新固件以解决该问题
支持使用带 _DSM 方法的 ACPI PRP0001 节点描述的 I2C HID 设备CONFIG_I2C_HID_ACPI1联想开天 N60d-G1d、浪潮英政 CP300L3 等笔记本的触摸板采用此种描述,此时需要该补丁才能使用触摸板
Intel Xe 驱动 16 KiB 页面支持CONFIG_DRM_XE1 2 3 4 5 6在龙架构主流的 16 KiB 内核使用 Intel 显卡需要这些补丁;因固件阶段无法使用 Intel 显卡显示,仍不建议出于在龙架构设备使用的目的购买

Docker

Docker 软件已正式支持龙架构,您可以通过 Linux 发行版软件源安装;如下是在几个常见 Linux 发行版和操作系统下安装 Docker 的方法:

操作系统安装方式
安同 OSoma install docker
Arch Linuxsudo pacman -S docker
Debian、deepin、openKylin(开放麒麟)及 Loongnix 25 等 Debian 系发行版sudo apt install docker.io
Fedora LoongArch Remix、openEuler、Anolis OS、OpenCloudOS 等 Red Hat 系发行版sudo dnf install docker

TIP

目前在 Docker 官方仓库中的龙架构容器仍非常少;龙芯中科维护了针对龙架构 ABI2.0 的 Docker 镜像仓库,您可以按照需要修改 Docker 配置以使用该镜像仓库。

CI 代理 (Runner)

诸多代码托管平台均有提供 CI 代理 (Runner) 支持,其中已有一部分支持龙架构。

GitHub Actions ​

目前 GitHub Actions Runner 由于 NuGet 缺少龙架构支持,暂时无法推进二进制发布。如希望自行编译部署该 CI 代理,可参考此拉取请求。

GitLab Runner ​

GitLab Runner 已正式支持龙架构,可通过其发布页面下载 loong64 标记的软件包或压缩包,直接安装使用。

Gitea act_runner ​

Gitea act_runner 已正式支持龙架构,但暂未提供龙架构二进制,目前可拉取源代码自行编译部署。

Forgejo Runner ​

Forgejo Runner 暂未合入龙架构支持,如希望自行编译部署该 CI 代理,可参考此拉取请求。

Sourcehut ​

Sourcehut 的 CI 代理 builds.sr.ht 已正式支持龙架构。该 CI 代理不发布二进制,您可以自行拉取代码编译部署。

Gitee ​

Gitee 暂未合入龙架构支持,可参考如下拉取请求的代码自行编译部署:

GitCode ​

据社区好友咨询,GitCode 暂未支持自建 CI 代理,暂时无法支持龙架构。