记录下工作上龙芯适配相关。
由来 内部存在适配龙芯需求,适配相关信息比较零散,并且以后可能不会接触这块了,这里个人角度记录下笔记。
abi1.0 abi1.0 和 abi2.0 的区别见文章旧世界与新世界 , abi1.0 的内核主要是 4.19 版本左右:
1 2 3 4 5 6 7 8 9 $ uname -aLinux 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
编译相关 需要专门的 golang 和 gcc ,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 \ ; \ 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 FROM xxxRUN 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
config.guess 和 config.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 -aLinux 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/RUN set -eux; \ CC=loongarch64-unknown-linux-gnu-gcc; \ xxx
config.guess 和 config.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; \ 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 ]; \ 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