[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 UbuntuResolute内核版本Linux 7.0.0目标架构RISC-V 64 位模拟器qemu-system-riscv64Rust1.95.0stable一、安装依赖# 基础编译工具sudoaptinstall-ybuild-essentialbcbison flex libncurses-dev\libssl-dev libelf-dev cpio# LLVM/Clang关键RISC-V 上 Rust 内核强制要求 Clangsudoaptinstall-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用 GCCCC_IS_CLANGn会导致CONFIG_RUST在 menuconfig 中永远灰掉。二、配置 Rust 工具链# 安装 rust-src内核编译需要rustup componentaddrust-src# 安装 bindgen生成 C 绑定cargoinstall--lockedbindgen-cli# 添加到 PATHexportPATH$HOME/.cargo/bin:$PATHechoexport PATH$HOME/.cargo/bin:$PATH~/.zshrc三、处理 WSL PATH 问题WSL 默认把 Windows 路径含空格如/mnt/c/Program primecode.注入到PATH这会导致内核 Makefile 直接报错退出。永久修复需重启 WSLsudotee-a/etc/wsl.confEOF [interop] appendWindowsPath false EOF在 Windows PowerShell 执行wsl--shutdown重新打开 WSL 后生效。在此之前每次make前用干净的 PATHexportCLEAN_PATH$HOME/.cargo/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin四、验证 Rust 支持cd/path/to/linux# Linux 7.0 源码目录envPATH$CLEAN_PATHmakeARCHriscvLLVM1rustavailable无任何输出、无报错才算通过。常见报错及解决报错原因解决rustc could not be foundrustc 不在 PATHexport PATH$HOME/.cargo/bin:$PATHbindgen failed, libclang not found缺少 libclangsudo apt install libclang-devRust version too oldrustc 版本过低rustup update stable五、配置内核# 生成 RISC-V 默认配置envPATH$CLEAN_PATHmakeARCHriscvLLVM1defconfig# 启用 Rust 支持scripts/config--enableCONFIG_RUST# 可选启用后可在启动的内核中读取配置scripts/config--enableCONFIG_IKCONFIG scripts/config--enableCONFIG_IKCONFIG_PROC# 同步配置接受所有新增选项的默认值envPATH$CLEAN_PATHmakeARCHriscvLLVM1olddefconfig# 确认 Rust 已启用grepCONFIG_RUST.config# 应输出CONFIG_RUSTy想用图形界面调整配置sudoaptinstalllibncurses-dev# 如果没装envPATH$CLEAN_PATHmakeARCHriscvLLVM1menuconfig# 路径General setup → Rust support六、编译内核envPATH$CLEAN_PATHmakeARCHriscvLLVM1-j$(nproc)编译时间约 20-40 分钟取决于机器配置。完成后产物arch/riscv/boot/Image ← 内核镜像七、准备根文件系统用 buildroot 生成最小 rootfsgitclone https://github.com/buildroot/buildroot.gitcdbuildroot# 配置为 RISC-V QEMU 目标makeqemu_riscv64_virt_defconfig# 编译同样需要干净的 PATHenvPATH$CLEAN_PATHmake-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,formatraw,ifnone,idhd0\-devicevirtio-blk-device,drivehd0\-appendroot/dev/vda rw consolettyS0\-m512M踩坑-drive必须加ifnone否则报Drive hd0 is already in use。九、验证 Rust 已启用登录后在 QEMU 内执行# 查看内核版本cat/proc/version# 确认 Rust 编译进内核zcat /proc/config.gz|grepCONFIG_RUST# 应输出CONFIG_RUSTy退出 QEMUCtrlA然后按X完整踩坑记录错误原因解决方案HAVE_RUSTn无法启用 RustRISC-V Rust 需要 Clang改用LLVM1bindgen failed: libclang not found缺少 libclangsudo apt install libclang-devPATH contains spacesWSL 注入 Windows 路径env PATH...或appendWindowsPathfalseDrive hd0 is already in useQEMU drive 选项缺少ifnone加上ifnonemissing MODULE_LICENSEin Rust 模块单独make foo.ko绕过 modpost必须跑完整makencurses/openssl/libelf 报错缺少头文件对应apt install经验证可以正常boot。本文总写作时间为5分钟主要工作为copy-paste 添加文章头。验证时间为1小时30分钟左右文章经过两次撤掉重构。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2548726.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!