700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux开发 | nfs挂载根文件系统失败 处理过程

linux开发 | nfs挂载根文件系统失败 处理过程

时间:2023-09-10 13:34:05

相关推荐

linux开发 | nfs挂载根文件系统失败 处理过程

NFS挂载根文件系统失败

[ 5.552903] s5p-tvout s5p-tvout: hpd status is cable removed[ 5.563919] DBUG_PORT must not use AFC![ 5.566436] VFS: Cannot open root device "nfs" or unknown-block(0,0)[ 5.572622] Please append a correct "root=" boot option; here are the available partitions:[ 5.580959] b300 3817472 mmcblk0 driver: mmcblk[ 5.586118] b301264759 mmcblk0p1[ 5.590363] b302264759 mmcblk0p2[ 5.594609] b303104412 mmcblk0p3[ 5.598855] b304 3158463 mmcblk0p4[ 5.603103] b308 7761920 mmcblk1 driver: mmcblk[ 5.608314] b309 7726620 mmcblk1p1[ 5.612547] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)[ 5.620924] Backtrace:[ 5.623235] [<c0034fb8>] (dump_backtrace+0x0/0x110) from [<c0501498>] (dump_stack+0x18/0x1c)[ 5.631629] r6:00008000 r5:dfecc000 r4:c06f5b6c r3:00000002[ 5.637247] [<c0501480>] (dump_stack+0x0/0x1c) from [<c0501514>] (panic+0x78/0xf8)[ 5.644808] [<c050149c>] (panic+0x0/0xf8) from [<c0008f6c>] (mount_block_root+0x25c/0x2ac)[ 5.653034] r3:00000002 r2:00000001 r1:dfc37f60 r0:c06464fa[ 5.658651] [<c0008d10>] (mount_block_root+0x0/0x2ac) from [<c0009010>] (mount_root+0x54/0x68)[ 5.667248] [<c0008fbc>] (mount_root+0x0/0x68) from [<c0009188>] (prepare_namespace+0x164/0x1bc)[ 5.675999] r5:c00290c8 r4:c0731740[ 5.679535] [<c0009024>] (prepare_namespace+0x0/0x1bc) from [<c00084fc>] (kernel_init+0x128/0x170)[ 5.688474] r5:c00083d4 r4:c0731500[ 5.69] [<c00083d4>] (kernel_init+0x0/0x170) from [<c0058894>] (do_exit+0x0/0x5f0)[ 5.699915] r4:00000000 r3:00000000[ 5.703452] Rebooting in 5 seconds..[ 10.743116] Restarting Linux version 2.6.35.7+ (fly@fly-vm) (gcc version 4.4.1 (Sourcery G++ Lite q3-67) ) #1 PREEMPT Mon Aug 9 08:31:45 CST [ 10.743127][ 10.758279] arch_reset: attempting watchdog reOK

uboot的启动参数及环境变量

处理思路:

uboot和系统移植课程中讲了制作文件夹格式的rootfs,然后通过设置bootargs让内核启动后直接通过nfs去挂载ubuntu中文件夹形式的rootfs。做这个实验出错,可能的原因有以下几个,大家要仔细检查分析,看你的问题出在哪里。

(1)首先要确保你的开发板和ubuntu是通的。办法是在开发板中先进入uboot命令行,设置合理的IP地址后,从uboot端能ping通虚拟机ubuntu。其次还要确保ubuntu的nfs服务器搭建是ok的,并且有本地测试过可以成功挂载,测试方法在搭建nfs服务器的文档中有讲的。最后,如果还是害怕这里远端挂载有问题,可以先给开发板完整刷机,在开发板端启动linux挂载烧录的rootfs,启动进入linux命令行,再用mount -t nfs去挂载虚拟机ubuntu中的文件夹形式rootfs,确保能挂载。这时候肯定就排除了虚拟机不通或者nfs server不对的情况了。

(2)开发板端运行的kernel zImage必须使能了nfs格式的rootfs选项,这个是在make menuconfig中去配置使能的,我们在课程中专门讲过这个,而且课件里还提供了使能配置的路径。仔细看课程,跟着课程配置使能即可。

(3)我们讲课时用的ubuntu14.04,现在很多同学是用更新版本的ubuntu。这里可能会有一个问题,就是ubuntu16.04(也可能是17.04)后默认支持的nfs版本号更新了,和我们开发板使用的内核中的nfs版本号对不上,会导致挂载失败。如果你用的是新版本ubuntu,参考这篇文章来解决即可:/sean_8180/article/details/81112520

(4)bootargs中ip=xxx这一段里的网卡名称应该设置为eth0,而不是ubuntu里的ens33这类名称。网上有些解读说这里是主机的网卡名,但是实际测试发现还是写成开发板端侧的网卡名eth0才可以成功dhcp分配到IP,才能nfs挂载成功,设置成ens33反而不行。

最终解决办法:

nfs挂载根文件系统,最终定位到是编译的内核没有支持nfs方面的支持。

出现这个问题的原因是,使用make menuconfig配置了内核支持nfs功能,但最终编译配置文件没有支持。

在实际编译中,我使用./mk脚本运行帮助编译。

脚本主要的内容:1.配置内核;2.编译内核;3.将编译好的内核拷贝到指定目录。

配置内核时,脚本调用命令如下:

QT_KERNEL_CONFIG=x210ii_qt_defconfigmake ${QT_KERNEL_CONFIG} || return 1

也就是x210ii_qt_defconfig这个配置覆盖掉我自己配置的.config文件,导致我自己配置的内核是不成功的。

所以,这个操作的每一个流程、细节,需要熟悉,知其所以然,才能避免此类问题。

拓展:

嵌入式Linux启动过程中的问题积累

Linux通过nfs挂载根文件系统失败

编译busybox

如何使用busybox编译和生成最简linux根文件系统(rootfs)

如何使用BUSYBOX编译和生成最简LINUX根文件系统(ROOTFS)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。