zhangguanzhang's Blog

龙芯折腾适配笔记

字数统计: 1.8k阅读时长: 9 min
2026/05/13
loading

记录下工作上龙芯适配相关。

由来

内部存在适配龙芯需求,适配相关信息比较零散,并且以后可能不会接触这块了,这里个人角度记录下笔记。

abi1.0

abi1.0 和 abi2.0 的区别见文章旧世界与新世界, abi1.0 的内核主要是 4.19 版本左右:

1
2
3
4
5
6
7
8
9
$ uname -a
Linux localhost.localdomain 4.19.90-89.11.v2401.a.ky10.loongarch64 #1 SMP Sun Apr 28 09:49:22 CST 2024 loongarch64 loongarch64 loongarch64 GNU/Linux
$ cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Halberd)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Halberd)"
ANSI_COLOR="0;31"

虚拟化相关

virt-manager 上开虚机,在 cockpit 的 9090 web 上创建好像有问题,暂时没过多尝试。

qemu

https://github.com/zhangguanzhang/compile-and-packages/tree/master/loong64/qemu-user-static

编译相关

需要专门的 golanggcc,docker 镜像仓库在 https://cr.loongnix.cn/search https://github.com/Loongson-Cloud-Community/dockerfiles

基础镜像也可以选择:

loognix-server 源配置相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
yum install -y loongnix-release \
loongnix-release-epel \
# loongnix-repos \
# loongnix-release-advanced-virtualization \
# loongnix-release-ceph-nautilus \
# loongnix-release-ceph-pacific \
# loongnix-release-kubernetes \
# loongnix-release-nfv-openvswitch \
# loongnix-release-openstack-ussuri \
# loongnix-release-qpid-proton \
# loongnix-release-rabbitmq-38 \
; \
yum makecache; \
dnf install -y --setopt=tsflags=nodocs --setopt=install_weak_deps=False \
...
dnf clean all; \
rm -rf /var/cache/dnf /var/cache/yum/* /tmp/*

cc 相关

如果制作 amd64 的交叉编译镜像:

1
2
3
4
5
6
7
8
9
10
11
# amd64基础镜像
FROM xxx
RUN set -eux; \
cd /; \
wget https://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.6.tar.xz; \
tar xfJp loongson-gnu-toolchain-*.tar.xz; \
rm -f loongson-gnu-toolchain-*.tar.xz; \
mv loongson-gnu-toolchain-*-x86_64-* loongson-gnu-toolchain

ENV PATH=/loongson-gnu-toolchain/bin:$PATH
# 交叉编译export CC=loongarch64-linux-gnu-gcc

config.guessconfig.sub 文件可以使用:

1
2
3
4
5
curl -fSL 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess
curl -fSL 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub
# 或者下面
wget https://raw.githubusercontent.com/Loongson-Cloud-Community/docker-library/refs/heads/main/library/redis/6.2.19-alpine3.21/config.guess \
https://raw.githubusercontent.com/Loongson-Cloud-Community/docker-library/refs/heads/main/library/redis/6.2.19-alpine3.21/config.sub

python

pip 源 https://pypi.loongnix.cn/loongson/pypi/+simple/

nodejs

https://registry.loongnix.cn:4873 例如 sharp 库依赖 libvips 库需要单独使用龙芯编译的:

1
npm install sharp@0.33.5 --registry=https://registry.loongnix.cn:4873/

rust

https://docs.loongnix.cn/rust/rustup.html

ffmpeg

loongnix-repos 里带一些源,但是 yum repolist all 看到会没有开启,如果安装 ffmpeg:

1
2
3
4
5
6
7
8
yum install -y loongnix-repos \
; \
dnf install -y --setopt=tsflags=nodocs --setopt=install_weak_deps=False \
--enablerepo=plus \
ffmpeg \
; \
dnf clean all; \
rm -rf /var/cache/dnf /var/cache/yum/* /tmp/*

abi2.0

以内核 >=6.x 为主的新世界,基本开源都能编译出来的,不需要额外下载单独的包和大范围修改代码相关:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ cat /etc/os-release 
NAME="Kylin Linux Advanced Server"
VERSION="V11 (Swan25)"
ID="kylin"
VERSION_ID="V11"
PRETTY_NAME="Kylin Linux Advanced Server V11 (Swan25)"
ANSI_COLOR="0;31"

$ uname -a
Linux localhost.localdomain 6.6.0-32.7.v2505.ky11.loongarch64 #1 SMP Tue Jul 8 02:45:54 UTC 2025 loongarch64 loongarch64 loongarch64 GNU/Linux

$ lscpu
架构: loongarch64
CPU 运行模式: 32-bit, 64-bit
Address sizes: 48 bits physical, 48 bits virtual
字节序: Little Endian
CPU: 16
在线 CPU 列表: 0-15
BIOS 厂商 ID: QEMU
型号名称: Loongson-3A5000
BIOS 型号名称: virt CPU @ 2.0GHz
BIOS CPU family: 1
CPU 系列: Loongson-64bit
型号: 0x10
每个核的线程数: 1
每个座的核数: 1
座: 16
BogoMIPS: 4000.00
标记: cpucfg lam ual fpu lsx lasx crc32
Caches (sum of all):
L1d: 1 MiB (16 instances)
L1i: 1 MiB (16 instances)
L2: 4 MiB (16 instances)
L3: 16 MiB (1 instance)
NUMA:
NUMA 节点: 1
NUMA 节点0 CPU: 0-15

不是较新的龙芯服务器都可以安装 abi1.0 和 abi2.0 的系统的,只不过龙芯现在主推 abi2.0 ,较新的服务器上没有去测试过 abi1.0。

虚拟化相关

阵列

服务器安装完成后,插了 ssd 盘发现系统不识别,感觉要做阵列才行,lspci 后看了 pci 信息,搜了下应该可以用 storcli 做阵列,然后谷歌搜了下相关还真找到了一个 rpm,不过它内部是 qemu-x86_64 运行的 x86_64 二进制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
wget https://update.cs2c.com.cn/loongarch0928/0926-dianxin/Packages/v10-sp1-appstore-openstack-queens/Packages/storcli-1.23-03.a.ky10.loongarch64.rpm
yum localinstall storcli-1.23-03.a.ky10.loongarch64.rpm
rpm -ql storcli
cd /opt/MegaRAID/storcli/
qemu-x86_64 ./storcli64 show
qemu-x86_64 ./storcli64 /c0/eall/sall show

Drive Information :
=================

---------------------------------------------------------------------------
EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type
---------------------------------------------------------------------------
252:4 11 Onln 0 893.75 GB SATA SSD N N 512B SageMicro SSD U -
252:5 10 Onln 0 893.75 GB SATA SSD N N 512B SageMicro SSD U -
252:7 12 UGood - 3.492 TB SATA SSD N N 512B YRS1TSA03840YC U -
---------------------------------------------------------------------------


# 创建一个单盘的RAID0虚拟磁盘,
qemu-x86_64 ./storcli64 /c0 add vd type=r0 drives=252:7
qemu-x86_64 ./storcli64 /c0/eall/sall show

---------------------------------------------------------------------------
EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type
---------------------------------------------------------------------------
252:4 11 Onln 0 893.75 GB SATA SSD N N 512B SageMicro SSD U -
252:5 10 Onln 0 893.75 GB SATA SSD N N 512B SageMicro SSD U -
252:7 12 Onln 1 3.492 TB SATA SSD N N 512B YRS1TSA03840YC U -
---------------------------------------------------------------------------

内部因为有业务组没时间适配,后面从 abi2.0 切换到 abi1.0 重新适配,阵列还在。

虚拟机

虚机 virt-manager 开虚机,记得安装依赖 edk2-ovmf-loongarch64 虚机才有 UEFI 固件(不然机器会开机黑屏),virt-manager 上面新建虚机,选择本地光驱介质,选择ISO文件,这样创建出来会自带控制器关联上cdrom并且类型为Virtio scsi。
在 cockpit 的 9090 web 上创建的则需要在 virt-mananger 界面添加控制器并切成 Virtio scsi

qemu

qemu-user-static 可以从 fedora42 rpm 取出来的,qemu-user-static-loongarch64-2 9.2.4-2.fc42.x86_64 或者使用我的 zhangguanzhang/qemu-user-static

编译相关

golang 官方 golang 即可

cc

我们用的是 欧拉 24.03 龙芯架构作为基础镜像,内部 glibc 版本下发现交叉编译 gcc 可以使用如下:

1
2
3
4
5
6
7
8
9
10
11
RUN set -eux; \
cd /; \
wget https://github.com/loong64/cross-tools/releases/download/20250911/x86_64-cross-tools-loongarch64-unknown-linux-gnu-stable.tar.xz; \
tar xf x86_64-cross-tools-loongarch64-*.tar.xz; \
rm -f x86_64-cross-tools-loongarch64-*.tar.xz

ENV PATH=$PATH:/loongarch64-unknown-linux-gnu/bin/
### 下面是编译的时候设置 CC env
RUN set -eux; \
CC=loongarch64-unknown-linux-gnu-gcc; \
xxx

config.guessconfig.sub 文件可以使用:

1
2
3
4
5
curl -fSL 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' -o config.guess
curl -fSL 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' -o config.sub
# 或者下面
wget https://raw.githubusercontent.com/Loongson-Cloud-Community/docker-library/refs/heads/main/library/redis/6.2.19-alpine3.21/config.guess \
https://raw.githubusercontent.com/Loongson-Cloud-Community/docker-library/refs/heads/main/library/redis/6.2.19-alpine3.21/config.sub

python

由于python这块,社区的wheel包制作还不普及,如果制作一些运行镜像的时候pip install一直报错,考虑是用龙芯的wheel包的话,需要升级pip后再使用龙芯的pip源,以下是参考:

1
2
3
4
5
6
7
8
9
10
11
12
RUN set -eux; \
# 龙芯 pip 必须升级,不然某些 wheel 还是下载 tar.gz
pip3 install --upgrade pip --trusted-host lpypi.loongnix.cn -i https://lpypi.loongnix.cn/loongson/pypi/+simple --no-dependencies; \
for i in {1..30}; do \
pip3 install -r /etc/requirements \
--retries 10000 --timeout 360 \
--trusted-host lpypi.loongnix.cn -i https://lpypi.loongnix.cn/loongson/pypi/+simple --no-dependencies && break || sleep 1; \
done; \
[ "$i" -lt 30 ]; \
# 网站不稳定,上面循环使用cache,这里清理
rm -rf /root/.cache/pip

或者拿jiter举例 https://lpypi.loongnix.cn/loongson/pypi/+simple/jiter/

node

https://registry.loongnix.cn:5873 例如:

1
npm install sharp --registry=https://registry.loongnix.cn:5873/

一些编译参考

https://github.com/zhangguanzhang/compile-and-packages/tree/master/loong64

CATALOG
  1. 1. 由来
  2. 2. abi1.0
    1. 2.1. 虚拟化相关
    2. 2.2. qemu
    3. 2.3. 编译相关
      1. 2.3.1. cc 相关
      2. 2.3.2. python
      3. 2.3.3. nodejs
      4. 2.3.4. rust
      5. 2.3.5. ffmpeg
  3. 3. abi2.0
    1. 3.1. 虚拟化相关
      1. 3.1.1. 阵列
      2. 3.1.2. 虚拟机
    2. 3.2. qemu
    3. 3.3. 编译相关
      1. 3.3.1. cc
      2. 3.3.2. python
      3. 3.3.3. node
  4. 4. 一些编译参考