肯德德 2018-05-11 15:12 采纳率: 100%
浏览 1846
已采纳

No init found:嵌入式Linux文件系统加载失败

问题描述

文件系统加载不成功,报错:No init found,如图(其中包含调试打印)
图片说明

制作材料及过程

硬件:s3c2440芯片,256M Nand Flash

软件:用了现成的boot,内核是2.6.32,busybox是1.13.3,编译器是arm-linux-gcc 4.4.3,文件映像制作工具为mkyaffs2image-128M(由于FLASH使用的是256M)
制作过程:编译内核、busybox,制作/dev/console和/dev/null的node,制作/lib库,编写/etc/inittab

初步分析

编译均成功,从打印来看,boot成功引导内核,内核也已经起来了,且进入了kernel_init的init_post

图片说明

也就是说,几个run_init_process函数都没跑成功,但文件系统中/sbin/init是存在的

图片说明

跟踪run_init_process函数:run_init_process-->kernel_execve-->do_execve-->count,是在count处出错了,我把argc打出来是-14

图片说明

进入count函数,发现时get_user出错了,EFAULT就是14

图片说明

get_user是内核态用来从用户态读数据的函数,但里面已经是嵌入汇编代码了,实在分析不了了……

哪位高手可以帮忙分析一下,或者以前碰到类似情况,知道如何解决的,谢谢!

  • 写回答

3条回答 默认 最新

  • sunxq008 2018-05-12 07:30
    关注

    没有必要深入内核去分析这个过程,只要检查以下几点就行了:
    1> 文件系统的根目录下存在linuxrc文件, 可以是脚本,也可以是可执行文件,还可以是符号链接(但不能跨文件系统)
    2> /linuxrc具有可执行属性,且真正可执行
    3> 如果/linuxrc是脚本文件,确认它的解释器也位于根目录下,并且可以正常使用

    另外,如果是脚本的话,它的最后一行应当是:
    exec /sbin/init

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。