本文记录一次从零开始在 Ubuntu 主机上跑通玄铁 C908X QEMU Linux 系统的完整过程。

适合人群:

  • 第一次接触玄铁 RISC-V SDK。

  • 想在没有真实开发板的情况下先用 QEMU 跑 Linux。

  • 已经拿到玄铁 Linux SDK 镜像包和玄铁 QEMU 模拟器包。

本教程最终目标:

在 XuanTie QEMU 中启动 C908X,进入 riscv64 Linux shell,并验证 CPU、内核、rootfs、网卡信息。

1. 环境说明

本次使用的主机环境:

Ubuntu 22.04
目标 CPU:C908X
QEMU:玄铁定制 QEMU V5.4.1
Linux SDK:XuanTie Linux SDK V1.3.0
目标系统:64 位 RISC-V Linux 6.6

注意:这里必须使用玄铁定制 QEMU。普通 Ubuntu 自带 QEMU 大概率不支持:

-cpu c908x

如果执行普通 QEMU,可能会提示不认识 c908x 这个 CPU 类型。

2. 需要下载的文件

需要两个包。

2.1 Linux SDK 镜像包

文件名:

xuantie-linux-V1.3.0.tar.gz

作用:提供 OpenSBI、U-Boot、Linux kernel、rootfs 等预编译镜像。

解压后主要目录如下:

archived
├── fpga
├── images
├── images-rva23
├── k230
├── tools
└── yocto-build-commits.txt

其中 C908X 主要使用 archived/images 目录。

2.2 玄铁 QEMU 模拟器包

文件名:

xuantie-qemu-x86_64-Ubuntu-20.04-V5.4.1.tar.gz

作用:提供玄铁定制版 qemu-system-riscv64

解压后需要找到:

qemu/bin/qemu-system-riscv64

3. Windows 使用 scp 传输文件到 Ubuntu

假设下载的文件在 Windows 的:

D:\Users\hpkt\Downloads

远端 Ubuntu 用户和 IP:

用户:wangwenwen
IP:192.168.6.153

3.1 创建远端目录

在 Windows PowerShell 执行:

ssh wangwenwen@192.168.6.153 "mkdir -p /home/wangwenwen/Xuantie/xuantie_sdk"
ssh wangwenwen@192.168.6.153 "mkdir -p /home/wangwenwen/Xuantie/xuantie_sdk/qemu"

3.2 传输 Linux SDK

scp .\xuantie-linux-V1.3.0.tar.gz wangwenwen@192.168.6.153:/home/wangwenwen/Xuantie/xuantie_sdk/

3.3 传输 QEMU 包

scp .\xuantie-qemu-x86_64-Ubuntu-20.04-V5.4.1.tar.gz wangwenwen@192.168.6.153:/home/wangwenwen/Xuantie/xuantie_sdk/qemu/

注意:scp 远端路径前面一定要有冒号:

wangwenwen@192.168.6.153:/home/wangwenwen/Xuantie/xuantie_sdk/

如果写成下面这样就是错的:

wangwenwen@192.168.6.153 /home/wangwenwen/Xuantie/xuantie_sdk

4. Ubuntu 上解压文件

登录 Ubuntu:

ssh wangwenwen@192.168.6.153

进入 SDK 目录:

cd /home/wangwenwen/Xuantie/xuantie_sdk
ls

应该能看到:

xuantie-linux-V1.3.0.tar.gz
qemu

4.1 解压 Linux SDK

cd /home/wangwenwen/Xuantie/xuantie_sdk
tar xzvf xuantie-linux-V1.3.0.tar.gz

解压后检查:

ls

应该看到:

archived  qemu  xuantie-linux-V1.3.0.tar.gz

检查镜像目录:

ls archived/images

应该看到:

kernel  opensbi  rootfs  u-boot  zsb

4.2 解压 QEMU

cd /home/wangwenwen/Xuantie/xuantie_sdk/qemu
tar xzvf xuantie-qemu-x86_64-Ubuntu-20.04-V5.4.1.tar.gz

查找 QEMU 可执行文件:

find /home/wangwenwen/Xuantie/xuantie_sdk/qemu -name qemu-system-riscv64

正常结果类似:

/home/wangwenwen/Xuantie/xuantie_sdk/qemu/bin/qemu-system-riscv64

5. C908X 需要使用哪些镜像

C908X 属于 64 位 Linux 6.6 镜像组,主要使用下面这些文件:

OpenSBI:
archived/images/opensbi/fw_dynamic-v1.7-rv64.bin
​
U-Boot:
archived/images/u-boot/u-boot-qemu-rv64.bin
​
Linux Kernel:
archived/images/kernel/Image-6.6-rv64-kcdefault
​
Rootfs:
archived/images/rootfs/rootfs.xuantie-image-rv64-6.6-lite.ext4

如果想使用 debug 版本内核,可以把 kernel 换成:

archived/images/kernel/Image-6.6-rv64-kcdebug

6. 安装 QEMU 运行依赖

玄铁 QEMU 包名里写的是 Ubuntu 20.04,但本次主机是 Ubuntu 22.04,所以会遇到一些动态库版本不匹配问题。

先安装常见依赖:

sudo apt update
sudo apt install -y \
  libcapstone4 \
  libspice-server1 \
  libsnappy1v5 \
  libsdl2-2.0-0 \
  libsdl2-image-2.0-0 \
  libslirp0 \
  libaio1 \
  libiscsi7 \
  librdmacm1 \
  libibverbs1 \
  libpmem1 \
  libdaxctl1 \
  libvdeplug2 \
  libvirglrenderer1 \
  libcacard0 \
  libusbredirparser1 \
  librbd1 \
  librados2

6.1 解决 libcapstone.so.3 找不到

如果运行 QEMU 时出现:

error while loading shared libraries: libcapstone.so.3: cannot open shared object file: No such file or directory

原因是 Ubuntu 22.04 里通常只有:

libcapstone.so.4

而玄铁 QEMU 需要:

libcapstone.so.3

解决方法:给 QEMU 单独建一个本地兼容库目录,不改系统库。

mkdir -p /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib
​
ln -sf /lib/x86_64-linux-gnu/libcapstone.so.4 \
  /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib/libcapstone.so.3

6.2 解决 libbrlapi.so.0.7 找不到

如果检查依赖时看到:

libbrlapi.so.0.7 => not found

Ubuntu 22.04 一般是:

libbrlapi.so.0.8

先确认系统里有这个库:

ldconfig -p | grep brlapi

然后创建本地兼容链接:

ln -sf /lib/x86_64-linux-gnu/libbrlapi.so.0.8 \
  /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib/libbrlapi.so.0.7

6.3 检查 QEMU 依赖是否都满足

执行:

LD_LIBRARY_PATH=/home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib \
ldd /home/wangwenwen/Xuantie/xuantie_sdk/qemu/bin/qemu-system-riscv64 | grep "not found"

如果没有任何输出,说明依赖已经满足。

如果还有输出,根据提示继续安装对应库。

7. 启动 C908X Linux

进入镜像包目录:

cd /home/wangwenwen/Xuantie/xuantie_sdk/archived

执行启动命令:

LD_LIBRARY_PATH=/home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib \
/home/wangwenwen/Xuantie/xuantie_sdk/qemu/bin/qemu-system-riscv64 \
  -nographic -smp 2 -M virt \
  -cpu c908x \
  -m 2G \
  -bios ./images/opensbi/fw_dynamic-v1.7-rv64.bin \
  -kernel ./images/u-boot/u-boot-qemu-rv64.bin \
  -device loader,file=./images/kernel/Image-6.6-rv64-kcdefault,addr=0x84000000 \
  -drive file=./images/rootfs/rootfs.xuantie-image-rv64-6.6-lite.ext4,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -netdev user,id=net0 \
  -device virtio-net-device,netdev=net0

参数解释:

参数 说明
-nographic 不启动图形窗口,直接在终端显示串口输出
-smp 2 模拟 2 个 CPU 核心
-M virt 使用 RISC-V virt 虚拟机平台
-cpu c908x 模拟 C908X CPU
-m 2G 分配 2GB 内存
-bios 指定 OpenSBI 镜像
-kernel 指定 U-Boot QEMU 镜像
-device loader 把 Linux kernel 加载到指定地址
-drive 指定 rootfs ext4 镜像
virtio-blk-device 把 rootfs 挂成 virtio 块设备
virtio-net-device 添加 virtio 网卡

8. 登录系统

启动过程中会看到 OpenSBI、U-Boot、Linux 内核日志。

看到登录提示后:

riscv64-xuantie login:

输入:

root

如果没有设置密码,一般可以直接进入 shell。

进入后类似:

root@riscv64-xuantie:~#

9. 验证是否启动成功

9.1 查看 CPU 信息

cat /proc/cpuinfo

正常能看到两个 processor:

processor       : 0
hart            : 0
​
processor       : 1
hart            : 1

并且可以看到 ISA:

rv64imafdcv
zicbom
zicbop
zicboz
zfh
zvfh
xtheadvdot

说明 C908X 相关扩展已经被识别。

9.2 查看内核版本

uname -a

本次成功结果类似:

Linux riscv64-xuantie 6.6.36-yocto-standard+ #1 SMP Thu Apr 9 15:40:26 CST 2026 riscv64 GNU/Linux

9.3 查看启动参数

cat /proc/cmdline

正常结果:

root=/dev/vda rw console=ttyS0 earlycon=sbi

9.4 查看 rootfs 挂载

mount

正常能看到:

/dev/vda on / type ext4 (rw,relatime)

说明 rootfs 已经从 virtio 磁盘 /dev/vda 挂载为根文件系统。

9.5 查看磁盘设备

ls /dev/vd*

正常结果:

/dev/vda

9.6 查看网卡

ip addr

正常能看到:

eth0

如果 eth0 没有 IP,可以尝试:

udhcpc -i eth0
ip addr

QEMU user 网络下,宿主机网关通常是:

10.0.2.2

可以尝试:

ping 10.0.2.2

10. 如何退出 QEMU

-nographic 模式下,退出 QEMU:

Ctrl + A
然后按 X

也就是先按住 Ctrl 再按 A,松开后再按 X

11. 常见问题

11.1 scp 提示目标路径失败

错误示例:

dest open "/home/wangwenwen/Xuantie/xuantie_sdk/qemu/": Failure

原因通常是远端目录不存在。

先创建目录:

ssh wangwenwen@192.168.6.153 "mkdir -p /home/wangwenwen/Xuantie/xuantie_sdk/qemu"

再重新传输:

scp .\xuantie-qemu-x86_64-Ubuntu-20.04-V5.4.1.tar.gz wangwenwen@192.168.6.153:/home/wangwenwen/Xuantie/xuantie_sdk/qemu/

11.2 找不到 qemu-system-riscv64

检查是否解压了 QEMU 包:

find /home/wangwenwen/Xuantie/xuantie_sdk/qemu -name qemu-system-riscv64

如果没有结果,说明 QEMU 包没有解压成功,或者下载错了包。

需要下载 Linux 版本:

xuantie-qemu-x86_64-Ubuntu-20.04-V5.4.1.tar.gz

不要下载 Windows 版本。

11.3 libcapstone.so.3 找不到

错误:

libcapstone.so.3: cannot open shared object file

解决:

sudo apt install -y libcapstone4
​
mkdir -p /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib
​
ln -sf /lib/x86_64-linux-gnu/libcapstone.so.4 \
  /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib/libcapstone.so.3

启动时要带上:

LD_LIBRARY_PATH=/home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib

11.4 libbrlapi.so.0.7 找不到

错误:

libbrlapi.so.0.7 => not found

解决:

ln -sf /lib/x86_64-linux-gnu/libbrlapi.so.0.8 \
  /home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib/libbrlapi.so.0.7

11.5 -cpu c908x 不认识

如果提示:

unable to find CPU model 'c908x'

说明你用的不是玄铁定制 QEMU,或者 QEMU 版本不对。

需要确认执行的是:

/home/wangwenwen/Xuantie/xuantie_sdk/qemu/bin/qemu-system-riscv64

而不是系统自带的:

/usr/bin/qemu-system-riscv64

12. 最终成功标志

只要能看到下面这些信息,就说明 C908X QEMU Linux 已经跑通:

riscv64-xuantie login: root
root@riscv64-xuantie:~#

并且:

cat /proc/cpuinfo
uname -a
mount
ip addr

能够看到:

2 个 processor
Linux 6.6.36-yocto-standard+
/dev/vda on / type ext4
eth0 网卡

本次实际验证结果:

CPU:2 核,hart 0 / hart 1
架构:riscv64
内核:Linux 6.6.36-yocto-standard+
rootfs:/dev/vda ext4,读写挂载
启动参数:root=/dev/vda rw console=ttyS0 earlycon=sbi
网卡:eth0 已识别

13. 总结

本次跑通 C908X QEMU 的核心步骤是:

1. 下载 XuanTie Linux SDK 镜像包
2. 下载 XuanTie QEMU 模拟器包
3. 传输到 Ubuntu
4. 解压 SDK 和 QEMU
5. 安装 QEMU 依赖库
6. 处理 Ubuntu 22.04 和 Ubuntu 20.04 库版本差异
7. 使用 c908x 参数启动 Linux 6.6
8. 登录 root 并验证系统信息

最关键的启动命令是:

LD_LIBRARY_PATH=/home/wangwenwen/Xuantie/xuantie_sdk/qemu/lib \
/home/wangwenwen/Xuantie/xuantie_sdk/qemu/bin/qemu-system-riscv64 \
  -nographic -smp 2 -M virt \
  -cpu c908x \
  -m 2G \
  -bios ./images/opensbi/fw_dynamic-v1.7-rv64.bin \
  -kernel ./images/u-boot/u-boot-qemu-rv64.bin \
  -device loader,file=./images/kernel/Image-6.6-rv64-kcdefault,addr=0x84000000 \
  -drive file=./images/rootfs/rootfs.xuantie-image-rv64-6.6-lite.ext4,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -netdev user,id=net0 \
  -device virtio-net-device,netdev=net0

以后如果经常使用,建议把这条命令保存成脚本,例如:

run_c908x_qemu.sh

这样每次只需要执行脚本即可启动系统。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐