出现这个错误的原因是相应的驱动程序没有编译进内核,所以在内核启动时,不认识分区。

一、磁盘驱动没编译进内核

VMware5.5.3 的磁盘有两种,一种是IDE的,一种是SCSI的;VMware 你在新建 linux 虚拟机时默认的是SCSI 。

在5.5.3的版本中使用的是SCSI类型设备中的LSI Logic设备(据网上资料,4.0以前的版本用的是BusLogic设备)。

所以我们在编译内核的时候应该把LSI Logic设备驱动程序编译进去。

现在分别介绍模块选择路径:

  这个是SCSI磁盘设备模块,必须选择。

  Linux Kernel Configuration
    -> Device Drivers
       -> SCSI device support
          - > SCSI disk support

  这个是BusLogic设备驱动模块。使用这个设备的的朋友需要选取。

  Linux Kernel Configuration
    -> Device Drivers
       -> SCSI device support
        -> SCSI low-level drivers
          -> BusLogic SCSI support

  这个是LSI Logic设备驱动模块。使用这个设备的的朋友需要选取。

  Linux Kernel Configuration
    -> Device Drivers
      -> Fusion MPT device support
          -> Fusion MPT (base + ScsiHost) drivers

2、文件系统驱动没编译进内核

linux下有ext2 和 ext3 两种文件系统,看你当前的文件系统是哪种(mount命令可以查看),并把相应的驱动编译进内核。

3、分区加载错误

编译完成后,一般来说就可以成功引导了。如果还提示这个错误的话,就把配置文件中的 root=LABEL=/ 改成你的 "/" 分区位置(比如: root=/dev/sda3 见下面示例)这样就可以了。新的版本是可以用 root=LABEL=/ 来自动查找引导分区的,但这个也要在内核中打开。

  在下面的位置

     filesystem   -->   
            Partition Types--->     
                  Advanced partition selection--->

PC BIOS(MSDOS partition tables)support--->

BSD disklabel(FreeBSD partition tables) support

示例:磁盘分区:

#mount

/dev/sda1    on  /boot type ext3

/dev/sda3    on / type ext3

grub.conf:

root (hd0,6)                                            <——这里的启动(/boot)分区,也就是内核(vmlinuz)所在的位置
 kernel /vmlinuz-2.4.20 root=/dev/sda3 <——这里是根(/)分区的位置

因为内核初始化完成后,就要启动init程序,但要启动init就要知道init的位置(默认为 /sbin/init)如果你 root=/dev/sda3 没的指对,内核当然就无法找到 init 了。

关于LABEL的说明:

/dev/hdc2这种属于绝对硬盘定位,hda-d分别代表两个IDE通道的4个接口,hdc2就是第二个IDE接口主盘的第二分区,这是linux最早采用的标示硬盘分区的方法,优点是简单直观。 
缺点就是不灵活,比如如果我把硬盘接到另外的ide口或者调换主从盘,则分区表示方法就会变掉,grub和fstab还按照老的标示挂盘的话就会造成无法引导。

所以Redhat从9(好像8也有,记不清了)开始使用了新的硬盘分区表示方式-----分区Label。简单说就是给每个分区一个类似于windows磁盘卷标的特殊Label信息,grub和fstab通过查找这个Label来定位磁盘分区。即使因为某些原因hdc变成hdd或者其他hdX,但分区的label没变的话,grub还是可以通过label找到这个分区。Redhat的分区工具一般会把分区的挂接点作为分区的label,例如根分区的label就是“/”usr分区的label就是“/usr”,依次类推。 
采用了label的标示方式后就不用担心设备名字换掉的问题了,同时grub.conf和fstab都要采用label的方式来定位磁盘分区,大家可以对照自己机器的grub.conf和fstab来看就知道了。 
察看和修改分区label的工具为e2label。

另一个问题是关于网卡的:

  这个设备和内核版本没有关系,下面是系统信息参考:

02:00.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
  
  Linux Kernel Configuration
  -> Device Drivers
    -> Networking support
       -> Ethernet (10 or 100Mbit)

             -> [*] EISA, VLB, PCI and on board controllers 
              ->   <*> AMD PCnet32 PCI support

              ->   <*> AMD 8111 (new PCI lance) support 

VMWare 所支持的网卡类型
它默认是虚拟的AMD PCNet AM79C970A网卡,但也可以改变网卡配置,虚拟出Intel(R) PRO/1000和VMware PCI Ethernet Adapter网卡。

如果在.vmx文件中用如下语句指定:

ethernet0.virtualDev = "e1000"

其值为e1000指定网卡类型为Intel(R) PRO/1000

其值为vlance指定网卡类型为AMD PCNet AM79C970A(默认为此项)

其值为vmxnet指定网卡类型为VMware PCI Ethernet Adapter

总结:

  1. 没有相应的驱动
    1. 磁盘驱动(IDE,SCSI,SATA……)
    2. 文件系统驱动(EXT2、EXT3……)
  2. 分区加载错误
    这里现在可以用LABEL来自动查找,但前提是要LABEL功能编译进内核

insmod used greatest stack depth: 5904 bytes left

Trying to resume from LABEL=SWAP-sda2

Unable to access resume device (LABEL=SWAP-sda2)

Creating root device.

Mounting root filesystem.

mount: could not find filesystem '/dev/root'

Setting up other filesystems.

Setting up new root fs

setuproot: moving /dev failed: No such file or directory

no fstab.sys, mounting internal defaults

setuproot: error mounting /proc: No such file or directory

setuproot: error mounting /sys: No such file or directory

Switching to new root and running init.

unmounting old /dev

unmounting old /proc

unmounting old /sys

switchroot: mount failed: No such file or directory

Kernel panic - not syncing: Attempted to kill init!

Pid: 1, comm: init Not tainted 2.6.32.8 #2

解决方法:

把下面选上,

general setup

-- > enable deprecated sysfs features which may confuse old userspace tools

这个选项是有关内存中的sysfs文件系统的两种不同的机制,文中提到最新的linux发行版几乎已经都用了最新的那个机制!而且文中强调了这个选项的作用非常,新旧系统对于两种sysfs机制并不能完美的兼容——等于就是说新旧对于这个选项非常的不兼容。

内核编译选配(VMware篇)的更多相关文章

  1. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  2. 最全最详细:ubuntu16.04下内核编译以及设备驱动程序的编写(针对新手而写)

    写在前面:本博客为本人原创,转载请注明出处!同时,本博客严禁任何下载站随意抓取!!! 本博客唯一合法URL: 总体考虑 要去写设备驱动程序,说白了就三大步骤:下载内核源码构建内核源码树(也就是下载你的 ...

  3. 最全最详细:ubuntu16.04下linux内核编译以及设备驱动程序的编写(针对新手而写)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  4. linux 驱动模块 内核编译环境

    目录(?)[+] Linux设备驱动Hello World程序介绍 如何编写一个简单的linux内核模块和设备驱动程序.我将学习到如何在内核模式下以三种不同的方式来打印hello world,这三种方 ...

  5. 图解linux内核编译框架

    内核是如何编译成的 -知其然而不知其所以然 (第一篇) 转载:http://blog.chinaunix.net/uid-28236237-id-3840137.html Linux内核有分门别类的目 ...

  6. CentOS6-Linux内核编译 详细步骤

    CentOS6-Linux内核编译 详细步骤 背景 Win10用VMwareWorkstation搭的虚拟机 CentOS6.5,内核版本2.6.32-431.el6.x86_64 在该环境下升级至4 ...

  7. v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码

    子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...

  8. 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程

    实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...

  9. zju(3)内核编译与运行

    1.实验目的 学习和掌握Linux配置和编译的基本步骤. 二.实验内容 1. 对Linux内核及用户程序进行配置: 2. 编译生成内核映像文件: 3. 把编译的映像文件烧写到FLASH中,查看运行结果 ...

随机推荐

  1. classmethod一个用处是创建可选类构造器

    Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...

  2. HTML中禁用表单控件的两种方法readonly与disabled

    时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...

  3. A trip through the Graphics Pipeline 2011_10_Geometry Shaders

    Welcome back.     Last time, we dove into bottom end of the pixel pipeline. This time, we’ll switch ...

  4. phpcmsv9的评论分表策略

    comment_table表 comment表 comment_data_x表 我们留意到: comment_table表统计每个comment_data_x表里面有多少条记录, comment表只是 ...

  5. Git 实战教程

    CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而大家工作的时候,用的都是自己的 ...

  6. UIWebView如何获取内容高度

    iOS UIWebView如何获取到内容的高度呢?我们经常会遇到项目中需要使用UIWebView来加载H5页面,但是页面的高度并不确定,而我们前端需要根据内容的高度呈现出来,且不允许webview滚动 ...

  7. Node.js 使用 soap 模块请求 WebService 服务接口

    项目开发中需要请求webservice服务,前端主要使用node.js 作为运行环境,因此可以使用soap进行请求. 使用SOAP请求webservice服务的流程如下: 1.进入项目目录,安装 so ...

  8. partition-list

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  9. CoreAnimation--CALayer的动画

    CoreAnimation--CALayer的动画 核心动画中所有类都遵守CAMediaTiming CAAnaimation和CAPropertyAnimation都是抽象类,本身不具备动画效果,必 ...

  10. MVC中的Controller

    Controller是MVC模式中的三个核心元素之一. MVC模式中的Controller主要负责响应用户的输入, 并在响应时修改Model. MVC提供的是方法调用的结果, 而不是动态生成的页面. ...