一.背景

1.1 移植linux-4.14内核的过程中,此时使用的是ext4文件系统,并且将根文件系统存储在sd卡的第一个分区上

1.2 内核打印完Waiting for root device /dev/mmcblk0p1...这一句信息之后并没有panic,而且串口还可以回应

二.分析

既然处在一直等待根文件系统挂载,那么可以去扒一下内核代码,请看

/*
 * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
*/
void __init prepare_namespace(void)

{

...

/* wait for any asynchronous scanning to complete */
   if ((ROOT_DEV == 0) && root_wait) {
     printk(KERN_INFO "Waiting for root device %s...\n",
    saved_root_name);   这里是打印信息的地方
    while (driver_probe_done() != 0 ||
     (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0)  从此处可以看出程序会判断driver_probe_done(),这个与驱动的probe有关,还有ROOT_DEV = name_to_dev_t(saved_root_name)) == 0这个判断,saved_root_name当前等于/dev/mmcblk0p1,那么name_to_dev_t就去获取这个真实物理设备的设备号,然后将设备号复制给变量ROOT_DEV,再使用ROOT_DEV与0进行比较,如果驱动没有probe ok,driver_probe_done()执行的结果就为非0,当然使用name_to_dev_t获取到的内容也就为0,那么程序就会一直处在这个while循环中,每5毫秒判断一次,直到驱动probe OK
     msleep(5);
    async_synchronize_full();
  }

...

}

三.解决

从以上的分析可以总结如下:

/dev/mmcblk0p1这个物理设备对应的驱动没有被加载,因此驱动一直无法probe,因此加上CONFIG_MMC_SDHCI等与mmc有关的编译选项,然后重新编译内核即可

linux kernel 卡在提示信息Waiting for root device /dev/mmcblk0p1...处的更多相关文章

  1. [轉]Linux kernel <2.6.29 exit_notify() local root exploit分析(2009-1337)

    author : deep_pro目前网上的这个exploit(http://www.milw0rm.com/exploits/8369)的分析是有些问题的(http://forum.evilocta ...

  2. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】

    转自:http://www.cnblogs.com/pengdonglin137/p/5023342.html#_label2 阅读目录(Content) 环境介绍: 下载Linux内核 安装arm的 ...

  3. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境

    参考: http://blog.csdn.net/linyt/article/details/42504975 环境介绍: Win7 64 + Vmware 11 + ubuntu14.04 32 u ...

  4. linux kernel 提示VFS: Cannot open root device "mmcblk0p1" or unknown-block(179,1): error -19等信息后发生panic

    一.背景 文件系统安装在sd卡的第一个分区中,使用的是ext4文件系统,linux内核版本为4.14 二.思考 在内核启动之前,uboot给内核传递了参数root=/dev/mmcblk0p1,但是为 ...

  5. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  6. the Linux Kernel: Traffic Control, Shaping and QoS

    −Table of Contents Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS 1 Int ...

  7. Linux kernel中断子系统之(五):驱动申请中断API【转】

    转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...

  8. (十四)Linux kernel mmc 框架说明,包括mmc_test使用方法

    1.Linux 总线模型         Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用. 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有 ...

  9. linux内核可以接受的参数 | Linux kernel启动参数 | 通过grub给内核传递参数

    在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项. 2.当kernel启动之时,可以参数在kernel被GRUB ...

随机推荐

  1. Apache服务器最新版下载、安装及配置(win版)

    Apache服务器最新版下载.安装及配置(win版) Apache的下载: 登录http://httpd.apache.org/download.cgi 这个地址,找到2.4.10,如下图位置:   ...

  2. Sass-学习笔记【进阶篇】

    特别说明: 没有sass基础请移步:[Sass-学习笔记[基础篇]]http://www.cnblogs.com/padding1015/articles/7056323.html 最底部附结构图(实 ...

  3. PHP后门的eval类和system类 函数到底有哪些区别

    一. 一直以来对PHP的eval这一类函数和system这一类存在疑惑的地方,今天彻底研究了一下,写查PHP一句话的时候可以更有把握一些.其实都是一些满基础的知识,大佬别喷.干安全的基础很重要. 二. ...

  4. 安装php环境xampp

    1.下载xampp 安装 2.如果启动时发生端口占用错误, 是443和80端口被占用, 可以改成444,88端口, 在C:\xampp\apache\conf\extra\httpd-ssl.conf ...

  5. C#的命令行工具

    ​在最开始学java的时候我们一般用 记事本 + 命令行,在命令行里边进行编译和运行, C#也有类似的东西(csc工具),在学习C#语言的时候可以用 文本编辑器来编写代码,然后用C#的命令行工具来编译 ...

  6. UPDATE从左向右,变量优先,逐行更新.顺序执行的,可以交换两列之间的值

    CREATE TABLE tab_update (id TINYINT,n1 NVARCHAR(30),v1 NVARCHAR(30),s1 NVARCHAR(30)) INSERT INTO tab ...

  7. lnmp一键安装环境添加redis扩展及作为mysql的缓存

    lnmp一键安装环境添加redis扩展 Redis-benchmark      压力测试工具Redis-check-aof      检查redis持久化命令文件的完整性Redis-check-du ...

  8. sql 将一张表中的数据插入到另一张表

    将表T_wz_wz中的部分数据插入到表t_wz_kc: insert into t_wz_kc(wzid,jldwid,kcsl,yfpkcsl,cshwcbz) select wzid,jldwid ...

  9. ASP.NET的页面执行过程

    对于ASP.NET来说,用户访问的页面,都由服务器IIS处理,具体的处理过程如下图: 对于用户模块还是有很多的东西没有写,未完待续...

  10. Oracle Schema Objects——Index

    索引主要的作用是查询优化. Oracle Schema Objects 查看执行计划的权限:查看执行计划plustrace:set autotrace trace exp stat(SP2-0618. ...