QEMU搭配BusyBox启动最小Linux内核出现Kernel Panic求助
问题根因定位
你的panic日志里明确给出了错误信息:Failed to execute /init (error -13),错误码-13对应Linux标准错误EACCES(权限被拒绝),可按以下顺序排查解决:
- 优先检查init文件的可执行权限:打包initramfs之前,必须给根目录下的init文件赋予执行权限,执行命令
chmod 755 init即可,不管是shell脚本还是二进制程序都需要执行权限才能被内核启动,这是这类场景下最常见的疏漏,和你描述的报错完全匹配。 - 确认BusyBox编译配置正确:BusyBox 1.34.1编译时需要在menuconfig中勾选
Settings -> Build static binary (no shared libs),编译出纯静态的二进制文件,避免动态链接依赖缺失导致的执行失败;同时busybox本体也需要赋予755执行权限。 - 检查initramfs打包参数:必须使用newc格式打包initramfs,参考命令如下:
find . | cpio -o -H newc | gzip > ../initramfs.cpio.gz
其他cpio格式内核无法正确识别,会导致解压后文件属性异常,出现权限不足的错误。
- 确认内核配置开启必要选项:确保你的内核编译时开启了
CONFIG_DEVTMPFS、CONFIG_TMPFS、CONFIG_BINFMT_ELF、CONFIG_BINFMT_SCRIPT,这几个是initramfs运行、ELF二进制执行、shell脚本执行的必要依赖。 - 如果使用shell脚本作为init,必须在文件开头添加正确的shebang行
#!/bin/sh,同时确认initramfs内/bin/sh是指向busybox的有效软链接。
内容的提问来源于stack exchange,提问作者Michael Hoefler
相关产品推荐
相关产品推荐

