news 2026/4/24 6:29:02

[AI] [Linux] 教我编一个启用rust的riscv kernel用于qemu启动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[AI] [Linux] 教我编一个启用rust的riscv kernel用于qemu启动

本文是博主在博客写作中的一次全新尝试,本次尝试通过输入给Claude Sonnet 4.6的prompt来自动生成一篇技术性博客。


Prompt为:
linux 7.0 kernel在/home/projects/linux/linux,教我编一个启用rust的riscv kernel用于qemu启动


Output如下(未作任何修改):


在 QEMU 上运行启用 Rust 的 RISC-V Linux 7.0 内核

本文记录从零开始,在 WSL2 Ubuntu 环境下交叉编译一个启用 Rust 支持的 RISC-V Linux 7.0 内核,并用 QEMU 启动的完整过程,包括所有踩过的坑。


环境说明

  • 宿主机:WSL2 Ubuntu(Resolute)
  • 内核版本:Linux 7.0.0
  • 目标架构:RISC-V 64 位
  • 模拟器:qemu-system-riscv64
  • Rust:1.95.0(stable)

一、安装依赖

# 基础编译工具sudoaptinstall-ybuild-essentialbcbison flex libncurses-dev\libssl-dev libelf-dev cpio# LLVM/Clang(关键:RISC-V 上 Rust 内核强制要求 Clang)sudoaptinstall-yclang lld llvm libclang-dev# RISC-V 交叉编译器(编译内核 C 部分仍需要)sudoaptinstall-ygcc-riscv64-linux-gnu# QEMUsudoaptinstall-yqemu-system-riscv64

踩坑:不要只装 GCC。Linux 7.0 的 RISC-V Rust 支持有如下依赖链:

CONFIG_RUST 依赖 HAVE_RUST HAVE_RUST 依赖 RISCV && RUSTC_SUPPORTS_RISCV && CC_IS_CLANG

用 GCC(CC_IS_CLANG=n)会导致CONFIG_RUST在 menuconfig 中永远灰掉。


二、配置 Rust 工具链

# 安装 rust-src(内核编译需要)rustup componentaddrust-src# 安装 bindgen(生成 C 绑定)cargoinstall--lockedbindgen-cli# 添加到 PATHexportPATH="$HOME/.cargo/bin:$PATH"echo'export PATH="$HOME/.cargo/bin:$PATH"'>>~/.zshrc

三、处理 WSL PATH 问题

WSL 默认把 Windows 路径(含空格,如/mnt/c/Program primecode.)注入到PATH,这会导致内核 Makefile 直接报错退出。

永久修复(需重启 WSL):

sudotee-a/etc/wsl.conf<<'EOF' [interop] appendWindowsPath = false EOF

在 Windows PowerShell 执行:

wsl--shutdown

重新打开 WSL 后生效。在此之前,每次make前用干净的 PATH:

exportCLEAN_PATH="$HOME/.cargo/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

四、验证 Rust 支持

cd/path/to/linux# Linux 7.0 源码目录envPATH="$CLEAN_PATH"makeARCH=riscvLLVM=1rustavailable

无任何输出、无报错才算通过。常见报错及解决:

报错原因解决
rustc could not be foundrustc 不在 PATHexport PATH="$HOME/.cargo/bin:$PATH"
bindgen failed, libclang not found缺少 libclangsudo apt install libclang-dev
Rust version too oldrustc 版本过低rustup update stable

五、配置内核

# 生成 RISC-V 默认配置envPATH="$CLEAN_PATH"makeARCH=riscvLLVM=1defconfig# 启用 Rust 支持scripts/config--enableCONFIG_RUST# 可选:启用后可在启动的内核中读取配置scripts/config--enableCONFIG_IKCONFIG scripts/config--enableCONFIG_IKCONFIG_PROC# 同步配置(接受所有新增选项的默认值)envPATH="$CLEAN_PATH"makeARCH=riscvLLVM=1olddefconfig# 确认 Rust 已启用grep"CONFIG_RUST=".config# 应输出:CONFIG_RUST=y

想用图形界面调整配置:

sudoaptinstalllibncurses-dev# 如果没装envPATH="$CLEAN_PATH"makeARCH=riscvLLVM=1menuconfig# 路径:General setup → Rust support

六、编译内核

envPATH="$CLEAN_PATH"makeARCH=riscvLLVM=1-j$(nproc)

编译时间约 20-40 分钟(取决于机器配置)。完成后产物:

arch/riscv/boot/Image ← 内核镜像

七、准备根文件系统

用 buildroot 生成最小 rootfs:

gitclone https://github.com/buildroot/buildroot.gitcdbuildroot# 配置为 RISC-V QEMU 目标makeqemu_riscv64_virt_defconfig# 编译(同样需要干净的 PATH)envPATH="$CLEAN_PATH"make-j$(nproc)

生成的 rootfs 位于:output/images/rootfs.ext2

踩坑:buildroot 编译同样受 WSL PATH 空格问题影响,务必用env PATH=...或修复 wsl.conf。


八、QEMU 启动

qemu-system-riscv64\-machinevirt\-nographic\-kernel/path/to/linux/arch/riscv/boot/Image\-drivefile=/path/to/buildroot/output/images/rootfs.ext2,format=raw,if=none,id=hd0\-devicevirtio-blk-device,drive=hd0\-append"root=/dev/vda rw console=ttyS0"\-m512M

踩坑-drive必须加if=none,否则报Drive 'hd0' is already in use


九、验证 Rust 已启用

登录后在 QEMU 内执行:

# 查看内核版本cat/proc/version# 确认 Rust 编译进内核zcat /proc/config.gz|grepCONFIG_RUST# 应输出:CONFIG_RUST=y

退出 QEMU:Ctrl+A然后按X


完整踩坑记录

错误原因解决方案
HAVE_RUST=n,无法启用 RustRISC-V Rust 需要 Clang改用LLVM=1
bindgen failed: libclang not found缺少 libclangsudo apt install libclang-dev
PATH contains spacesWSL 注入 Windows 路径env PATH=...appendWindowsPath=false
Drive 'hd0' is already in useQEMU drive 选项缺少if=none加上if=none
missing MODULE_LICENSEin Rust 模块单独make foo.ko绕过 modpost必须跑完整make
ncurses/openssl/libelf 报错缺少头文件对应apt install

经验证,可以正常boot。
本文总写作时间为5分钟,主要工作为copy-paste + 添加文章头。
验证时间为1小时30分钟左右,文章经过两次撤掉重构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 6:27:41

颠覆传统巡检模式:AI技术如何重塑安全生产新格局

作为"我ai去巡检"小程序的技术研发团队&#xff0c;我们亲眼见证了人工智能如何从实验室概念转变为守护安全生产的核心力量。今天&#xff0c;我们将深入剖析AI技术在安全生产领域的前沿应用&#xff0c;揭秘我们如何攻克技术难题&#xff0c;打造这款重新定义行业标…

作者头像 李华
网站建设 2026/4/24 6:21:47

【仅限持牌机构内部流通】:Docker 27金融隔离黄金配置矩阵(含Kubernetes 1.30+PodSecurity Admission适配表、FIPS 140-3认证路径)

第一章&#xff1a;Docker 27金融交易数据容器隔离概览在高并发、低延迟的金融交易系统中&#xff0c;数据隔离不仅是安全合规的核心要求&#xff0c;更是防止跨业务线干扰、保障交易一致性与审计可追溯性的基础设施能力。Docker 27&#xff08;即 Docker Engine v27.x&#xf…

作者头像 李华
网站建设 2026/4/24 6:19:43

广州海珠智能体案例中的“咨询+干预+随访”多智能体协作:医疗AI从“单点工具”到“执行系统”的范式转移

引言&#xff1a;从“工具”到“系统”的范式转移在过去的几年中&#xff0c;人工智能在医疗领域的应用取得了显著进展。从辅助医生识别肺结节的影像系统&#xff0c;到自动生成电子病历的自然语言处理工具&#xff0c;AI技术正逐步渗透到诊疗的各个环节。然而&#xff0c;这些…

作者头像 李华
网站建设 2026/4/24 6:17:50

2026公考培训机构综合实力对比:多家机构实测,谁更适合不同备考人群?

本文为第三方调研整理&#xff0c;旨在为考生提供选课参考&#xff0c;不构成任何购买建议。当下公职类考试报考人数持续攀升&#xff0c;竞争日趋激烈。面对市场上众多培训机构&#xff0c;考生往往难以抉择。我们从师资稳定性、线下教研投入、课程服务体系、学员真实反馈及退…

作者头像 李华