arm - Gem5 ARM FS - 内核恐慌 - 不同步:VFS:无法在未知块上挂载根 fs (8,1)
问题描述
我正在尝试在 Gem5 中运行我的第一个全系统模拟,但出现以下错误
[ 5.703750] VFS: Cannot open root device "sda1" or unknown-block(8,1): error -6
[ 5.704398] Please append a correct "root=" boot option; here are the available partitions:
[ 5.706209] 0800 252 sda
[ 5.706370] driver: sd
[ 5.707223] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)
[ 5.708000] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0+ #1
[ 5.708570] Hardware name: V2P-CA15 (DT)
[ 5.709020] Call trace:
[ 5.709601] dump_backtrace+0x0/0x1c0
[ 5.710230] show_stack+0x14/0x20
[ 5.710844] dump_stack+0x8c/0xac
[ 5.711375] panic+0x130/0x288
[ 5.711980] mount_block_root+0x1a8/0x294
[ 5.712617] mount_root+0x140/0x174
[ 5.713243] prepare_namespace+0x138/0x180
[ 5.713891] kernel_init_freeable+0x1c0/0x1e0
[ 5.714489] kernel_init+0x10/0x108
[ 5.715069] ret_from_fork+0x10/0x18
[ 5.715584] Kernel Offset: disabled
[ 5.716051] CPU features: 0x21c0649a
[ 5.716509] Memory Limit: 512 MB
[ 5.717254] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1) ]---
gem5 命令的输出是
warn: Tried to write RVIO at offset 0xa8 (data 0) that doesn't exist
warn: Tried to read RealView I/O at offset 0x8 that doesn't exist
warn: Tried to read RealView I/O at offset 0x48 that doesn't exist
warn: EnergyCtrl: Disabled handler, ignoring read from reg 0
info: Dumping kernel dmesg buffer to system.workload.dmesg...
warn: Kernel panic in simulated kernel
我在用
- Gem5 20.1.0.2(稳定分支)
- 命令:
./build/ARM/gem5.opt configs/example/fs.py --cpu-type=TimingSimpleCPU --cpu-clock=1GHz --kernel=binaries/vmlinux.arm64 --disk-image=disks/m5_exit.squashfs.arm64 --bootloader=binaries/boot.arm64
内核和磁盘镜像取自 gem5 guest binary page,我取了第一个链接(Latest Linux Kernel Image / Bootloader)
我注意到这个问题,但错误略有不同,运行的命令行、内核、映像也不同。
我该如何解决这个问题?
解决方案
您提到的问题的答案指向:https ://askubuntu.com/questions/41930/kernel-panic-not-syncing-vfs-unable-to-mount-root-fs-on-unknown-block0-0/ 1048477#1048477包含此错误的详细诊断过程。
为此,从内核消息中,我们清楚地看到root=
内核 CLI 参数不正确:使用默认值sda1
而不是 required sda
。
在 fs.py 上,正确的root=
可以设置为:
--command-line 'earlyprintk=pl011,0x1c090000 lpj=19988480 rw loglevel=8 mem=256MB root=/dev/sda console_msg_format=syslog nokaslr norandmaps panic=-1 printk.devkmsg=on printk.time=y rw console=ttyAMA0 - lkmc_home=/lkmc'
我认为没有办法只root=
在 fs.py 中设置,所以所有其他选项都是从默认的 fs.py 内核 CLI 复制的,只是--root
被修改了。这也可以在这里看到。
推荐阅读
- c# - .NET Core 服务与旧版 WCF 客户端的兼容性
- rust - 在当前范围内没有为 struct `File` 找到名为 `read_to_string` 的方法
- ios - 在哪里为使用 SwiftUI 的用户初始化 sqlite 数据库?
- python - Pyflink:组窗口需要一个时间属性来在流环境中进行分组
- python - 键入参数时,您使用类型还是对象?
- java - 基于另一个 ArrayList 创建一个 ArrayList
- mediawiki-api - mediawiki api action=parse 在移动设备上返回不同的数据
- java - 简化N个相似对象的方法调用
- c++ - 为什么将`printf`作为模板函数参数传递成功但`cos`失败(msvc 19)?
- html - 如何将背景动画添加到完整的单滚动网站