buildroot编译内核启动报错:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)问题解决

本文详细阐述了如何解决buildroot编译内核过程中遇到的Kernelpanic问题,涉及内核编译选项、RAMFS配置、firmware加载失败及grub启动设置。关键步骤包括选择bzImage格式、启用RAMFS、配置内核初始文件系统,以及调整grub启动参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

buildroot编译内核启动报错:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

[drm:i915_firmware_load_error_print] *ERROR* failed to load firmware i915/skl_dmc_ver1.bin (0)
[    0.313887] [drm:i915_firmware_load_error_print] *ERROR* The driver is built-in, so to load the firmware you need to
[    0.313887] include it either in the kernel (see CONFIG_EXTRA_FIRMWARE) or
[    0.313887] in your initrd/initramfs image.
[    0.618978] [drm:intel_guc_ucode_init] *ERROR* Failed to fetch GuC firmware from i915/skl_guc_ver4.bin (error -2)
[    0.743019] [drm:i915_gem_init_hw] *ERROR* Failed to initialize GuC, error -5 (ignored)
[    0.888525] hdaudio hdaudioC0D2: Unable to bind the codec
[    1.004739] usb usb1-port5: over-current condition
[    1.183738] usb usb1-port6: over-current condition
[    1.242124] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.341052] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.4.283 #1
[    1.412915] Hardware name: 360WS Default string/RT5140, BIOS 360WS-LY236-5140-20180130 01/30/2018
[    1.519094]  0000000000000000 ffff880264287de0 ffffffff818d7847 ffff880263495000
[    1.608012]  ffffffff81b94590 ffff880264287e58 ffffffff818ca0dd ffffffff00000010
[    1.696931]  ffff880264287e68 ffff880264287e08 0000000400000001 ffff880264287e78
[    1.785847] Call Trace:
[    1.815075]  [<ffffffff818d7847>] dump_stack+0x57/0x6d
[    1.876534]  [<ffffffff818ca0dd>] panic+0xbb/0x1ff
[    1.933838]  [<ffffffff81f3d2da>] mount_block_root+0x174/0x1ee
[    2.003625]  [<ffffffff81f3d443>] mount_root+0xef/0xf8
[    2.065082]  [<ffffffff81f3d586>] prepare_namespace+0x13a/0x172
[    2.135903]  [<ffffffff81f3cfa7>] kernel_init_freeable+0x1c4/0x1d9
[    2.209846]  [<ffffffff818f2532>] ? rest_init+0x79/0x79
[    2.272348]  [<ffffffff818f253b>] kernel_init+0x9/0xde
[    2.333810]  [<ffffffff818f7d15>] ret_from_fork+0x55/0x80
[    2.398392]  [<ffffffff818f2532>] ? rest_init+0x79/0x79
[    2.460942] Kernel Offset: disabled
[    2.502701] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

解决办法:
1)内核编译“Kernel binary format”选择bzImage镜像:
在这里插入图片描述
2)使能buildroot文件系统的RAM FS编译到内核bzImage;“initial RAM filesystem…”选择开启后,“cpio the root filesystem…”会被自动强制选中开启:
在这里插入图片描述
3)关联的,内核代码的General setup里“Initial RAM filesystem…”也会被自动强制选中开启,路径设置的是buildroot的/output/images/rootfs.cpio,被buildroot编译cpio归档的文件系统镜像:
在这里插入图片描述
4)grub启动bzImage项设置大致如下:

[shell /root]$cat /boot/grub/grub.conf
default 0
timeout 3
title buildroot
root (hd0,0)
kernel /bzImage root=/dev/sda1 ro quiet console=ttyS0,9600

ram filesystem内存文件系统编译进了bzImage内核镜像,启动分区为第一分区,其中“root=/dev/sda1”可有可无,不影响启动;

### 回答1: 这个错误是一个Linux内核恐慌(kernel panic)错误,意味着Linux无法继续执行,并需要重新启动。在这种情况下,内核已经尝试杀死初始化进程(init),这是Linux系统启动的第一个进程。导致内核恐慌的原因可能是由于硬件故障、内存错误或驱动程序问题等多种原因引起的。在使用buildroot构建嵌入式Linux系统时,这种错误通常可能是由于不兼容的驱动程序或未正确配置系统而引起的。为了解决这种问题,首先需要重新启动系统,并尝试对系统进行诊断以确定错误的具体原因。可以通过检查系统日志和内存转储文件等手段来诊断内核恐慌错误。如果问题是由于不兼容的驱动程序引起的,需要更新驱动程序或更改构建设置以使用兼容的驱动程序。如果问题是由于配置错误引起的,需要重新检查系统配置以确保正确配置。另外,建议在构建Linux系统之前了解Linux内核的基础知识,以便更好地理解内核恐慌错误的特征和原因,并能够快速解决此类问题。 ### 回答2: Buildroot是一个用于构建嵌入式Linux系统的工具。当出现"kernel panic - not syncing: attempted to kill init!"时,意味着引导过程中发生了严重错误,导致系统无法继续运行。 最常见的原因是内核与硬件不兼容,这意味着内核无法正确识别或配置硬件设备。可能需要调整内核配置以支持特定硬件设备,或者使用更适合的内核版本。 另一种可能的原因是文件系统损坏或不正确挂载。这可能是由于文件系统镜像文件被损坏或不正确生成而引起的。解决方法是重新生成文件系统镜像或更换正确的文件系统镜像文件。 此外,在构建rootfs时如果不小心将一些错误的配置选项或文件添加到文件系统中,也可能导致kernel panic。需要审查构建rootfs时使用的配置选项和文件以确保它们是正确的。 最后,系统内存问题也可能导致此错误。确保系统具有足够的可用内存以运行所需的软件包和驱动程序。 综上所述,出现kernel panic - not syncing: attempted to kill init!时,最好的方法是仔细检查内核配置、文件系统镜像文件和rootfs中的配置选项和文件,并确保系统具有足够的可用内存以支持运行所需的软件包和驱动程序。 ### 回答3: buildroot是一个开源的嵌入式Linux构建工具,我们可以使用它来制作自定义嵌入式系统的镜像。在使用buildroot构建嵌入式系统的过程中,可能会出现一些问题,比如“kernel panic - not syncing: attempted to kill init!”这个错误。 这个错误通常是由于内核在尝试杀死init进程时发生的问题触发的。init进程是Linux系统中的第一个进程,是由内核启动的,它负责初始化系统并启动其他所有进程。如果init进程在启动或执行期间出现问题,整个系统将停止工作并且引发kernel panic。 当出现这种错误时,应该按照以下步骤来解决: 1. 检查构建脚本:检查buildroot构建脚本中的配置选项是否正确,确保所有必需的选项都被正确配置。 2. 查看系统日志:在出现此错误时,系统日志应该记录相关错误信息。查看系统日志以确定导致问题的原因。 3. 检查root文件系统:确保root文件系统已正确构建并已正确挂载。如果root文件系统中可能缺少文件或存在损坏的文件,则可能会引发该错误。 4. 更新内核:更新内核可以解决一些与内核相关的问题。使用buildroot提供的选项更新内核。 5. 检查硬件:该错误也可能由硬件问题引起。请检查硬件是否正常运行,例如RAM是否存在问题。 总之,出现kernel panic - not syncing: attempted to kill init!错误时,应该先检查构建脚本、系统日志、root文件系统、内核和硬件,以找出导致错误的原因并进行相应的修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值