修改u-boot分区的大小,以支持更大的内核

在uboot使用mtdparts 可以知道

device nand0 , # parts = 4
#: name                size                     offset         mask_flags
0: bootloader  0x00040000       0x00000000           0
1: params       0x00020000       0x00040000           0
2: kernel         0x00200000       0x00060000           0
3: root             0x0fda0000        0x00260000           0       

默认情况下uboot给内核分布的空间是2M,但是随着内核版本的递增,2M已经不够用,这时候我们需要更改成更大的空间才能启动内核,这里推荐改为4M,具体修改如下:

1:在你的配置文件下uboot/include/config/100ask24x0.h 里面有一个宏定义

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
                            "128k(params)," \
                            "2m(kernel)," \
                            "-(root)"

将里面的2m改为4m,重新编译一下uboot。

2:启动uboot,设置命令 mtdparts default,然后再save 保存环境变量,

      此时再用mtdparts查看可以发现已经分区好了,

device nand0 , # parts = 4
#: name              size                  offset              mask_flags
0: bootloader    0x00040000       0x00000000          0
1: params         0x00020000       0x00040000          0
2: kernel           0x00400000       0x00060000          0
3: root               0x0fba0000       0x00460000           0

因为在cmd_jffs2.c里面我们看到把默认的分区信息分配给了mtdparts_default
   

#if defined(MTDPARTS_DEFAULT)
static const char *const mtdparts_default = MTDPARTS_DEFAULT;
#else
#warning "MTDPARTS_DEFAULT not defined!"
static const char *const mtdparts_default = NULL;
#endif

     然后在cmd_jffs2.c的函数int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])中把mtdparts_default

给了环境变量setenv(“mtdparts”, (char *)mtdparts_default);

因此我们可以在uboot的中设置命令 mtdparts default,然后利用mtd查看。

3:修改内核的分区信息,\linux-3.4.2\arch\arm\mach-s3c24xx\common-smdk.c 这个文件中把分    区信息修改的和uboot一样               

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本简明手册提供了对安装 SUSE Linux Enterprise Server 的快速介绍。它是对应 用程序各个字段以及 SUSE Linux Enterprise Server 支持的每个平台的安装类型 的概述,以及对安装过程的简短的说明。 SUSE Linux Enterprise Server 10 www.novell.com 2006 6 02 入门指南 入门指南 作者列表: Jörg Arndt, Steve Bearnson, Stefan Behlert, Frank Bodammer, James Branam, Volker Buzek, Klara Cihlarova, Catherine Craft, Olaf Dabrunz, Stefan Dirsch, Olaf Donjak, Roman Drahtmüller, Thorsten Dubiel, Torsten Duwe, Thomas Fehr, Stefan Fent, Werner Fink, Jakub Friedl, Kurt Garloff, Joachim Gleißner, Todd Grant, Carsten Groß, Andreas Grünbacher, Berthold Gunreben, Franz Hassels, Andreas Jaeger, Jana Jaeger, Denise Jewkes, Klaus Kämpf, Andi Kleen, Hubert Mantel, Lars Marowsky-Bree, Chris Mason, Johannes Meixner, Lars Müller, Matthias Nagorni, Anas Nashif, Siegfried Olschner, Edith Parzefall, Peter Pöml, Thomas Renninger, Hannes Reinecke, Scott Rhoades, Thomas Rölz, Heiko Rommel, Tanja Roth, Marcus Schäfer, Thomas Schraitle, Kay Sievers, Klaus Singvogel, Frank Sundermeyer, Elisabeth Tobiasson, Hendrik Vogelsang, Klaus G. Wagner, Rebecca Walter, Christian Zoz 本出版物属 Novell Inc. 的知识产权。 可以全部或部分复制本出版物的内容,只要在所有副本的显著位置能够见到版权标志。 本指南力求涵盖所有细节,但这不能确保本指南准确无误。无论是 SUSE LINUX GmbH、作 者还是翻译人员都不对任何可能的错误或因错误造成的任何影响负责。 Novell、Novell 徽标、N 徽标和 SUSE 是 Novell, Inc. 在美国和其他国家/地区的注册商标。* Linux 是 Linus Torvalds 的注册商标。所有其他第三方商标是其各自所有者的财产。 目录 前言v 部分 1 在 x86、AMD64、Intel EM64T 和 Itanium 处理器系列上安装1 1 安装注意事项3 1.1 安装类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 引导方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 安装源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 安装目标. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 不同的安装方法. . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 安装过程7 2.1 从本地可交换驱动器引导. . . . . . . . . . . . . . . . . . . . . . 7 2.2 通过网络安装. . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 远程控制安装. . . . . . . . . . . . . . . . . . . . . . . . . . . 8 部分 2 在 IBM POWER 上安装9 3 安装注意事项11 3.1 安装类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 IPL 选项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3 安装源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4 安装目标. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.5 连接到安装系统. . . . . . . . . . . . . . . . . . . . . . . . . 13 4 安装过程15 4.1 在整个系统中安装. . . . . . . . . . . . . . . . . . . . . . . . 15 4.2 在 LPAR 中安装. . . . . . . . . . . . . . . . . . . . . . . . . . 16 部分 3 在 IBM System z 上安装19 5 安装注意事项21 5.1 安装类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.2 IPL 选项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.3 安装源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.4 启动到安装系统的连接. . . . . . . . . . . . . . . . . . . . . . 22 6 安装过程23 6.1 LPAR 安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6.2 z/VM 安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 前言 本简明手册提供了对安装 SUSE Linux Enterprise Server 的快速介绍。它是对应 用程序各个字段以及 SUSE Linux Enterprise Server 支持的每个平台的安装类型 的概述,以及对安装过程的简短的说明。 另外还提供优质服务。专家可以回答关于安装或配置的问题、提供可靠的安全 更新和支持开发项目。 1 反馈 我们欢迎您对本手册和产品包含的其它文档提出意见和建议。请使用每页联机 文档底部的用户意见功能并发表您的意见。 2 附加文档 有关本产品的附加文档,请参阅 http://www.novell.com/documentation/ sles10/index.html: Architecture-Specific Information 准备 SUSE Linux Enterprise Server 安装目标所需要的特定于架构的信息。 安装与管理 SUSE Linux Enterprise Server 安装与管理的详细信息。 有关 SUSE® Linux Enterprise Desktop 产品文档概述,请参阅 http://www .novell.com/documentation/sled10/index.html。 3 文档约定 以下是本手册中使用的版式约定: • /etc/passwd:文件名和目录名 • placeholder:将 placeholder 替换为实际值 • PATH:环境变量 PATH • ls,--help:命令、选项和参数 • user:用户或组 • Alt , Alt + F1 :按键或组合键;这些键以大写形式显示,如在键盘上一样。 • 文件,文件→ 另存为:菜单项、按钮 • ►amd64 em64t ipf: 本段只与指定的体系结构有关。箭头标记文本块的开始 位置和结束位置。◄ ►ipseries s390 zseries: 本段只与指定的体系结构有关。箭头标记文本块的开 始位置和结束位置。◄ • Dancing Penguins(“Penguins”一章,↑参考):这是另一本书中某章的参考。 vi 入门指南 部分 1. 在 x86、AMD64、Intel EM64T 和 Itanium 处理器系列上 安装 1 安装注意事项 本章包含在 x86、AMD64、Intel EM64T 和 Itanium 硬件上安装 SUSE® Linux Enterprise Server 之前需要做的所有决策。请在 Architecture-Specific Information 手册中查找用于在 x86、AMD64、Intel EM64T 和 Itanium 上安装 SUSE Linux Enterprise Server 的最新硬件和软件要求,该手册作为一个可打印的 PDF 包含在 第一张 CD 或 DVD 上的 /docu 目录中。 1.1 安装类型 SUSE Linux Enterprise Server 通常作为独立的操作系统安装。通过引入 Xen,也 可能在同一硬件上运行 SUSE Linux Enterprise Server 的多个实例。但是,对 Xen 的 Domain-0 安装的控制类似于使用一些额外的包进行典型安装。Installation and Administration 中说明了 Xen 客户机的安装,该文档在已安装系统中以及第一张 CD 或 DVD 上提供。 1.2 引导方法 根据所使用的硬件,在安装 SUSE Linux Enterprise Server 之前的第一个引导过 程中,以下引导方法可用: 安装注意事项3 表 1.1 引导选项 引导选项用途 最简单的引导方法。此选项要求系统有本地可用的 CDROM 或 DVD-ROM 驱动器。 CD 或 DVD 驱动 器 在第一张 CD 或 DVD 的 /boot 目录中查找创建引导磁盘 所需的映象。另请参见同一目录中的 README。只有在计 软盘或 USB 磁盘 算机的 BIOS 支持从 USB 记忆棒引导的情况下才可进行此 引导。 必须由 BIOS 或所用系统的固件支持。此选项需要在网络 中有一台引导服务器。可以用另一个 SUSE Linux Enterprise Server 来执行此任务。 PXE 或 bootp SUSE Linux Enterprise Server 也可以从硬盘来进行引导。 为此,请将内核 (linux) 和安装系统 (initrd) 从第一张 硬盘 CD 或 DVD 上的 /boot/loader 目录中复制到硬盘,并 向引导装载程序中添加相应的项。 1.3 安装源 当安装 SUSE Linux Enterprise Server 时,必须在网络、硬盘分区或本地 CD-ROM 或 DVD 中提供实际安装数据。要从网络安装,则需要一台安装服务器。要提供 安装数据,请将任何 Unix 或 Linux 环境中的计算机设置为 NFS、HTTP 或 FTP 服务器。要从 Windows 计算机上提供安装数据,请使用 SMB 发布该数据。 如果在本地网络中配置了 SLP 服务器,则安装源尤其易于选择。有关详细信息, 请参见第 4.2 节 “设置存放安装源的服务器” (第 4 章 远程安装, ↑安装与管理)。 1.4 安装目标 多数安装是安装到本地硬盘上。因此,硬盘控制器需要对安装系统可用。如果 特殊的控制器(如 RAID 控制器)需要额外的内核模块,请向安装系统提供一 个内核模块更新磁盘。 4 入门指南 其他安装目标可能是提供运行操作系统所需的足够磁盘空间和速度的所有种类 的块设备。这包括网络块设备,如 iSCSI 或 SAN。也可以在提供标准 Unix 许 可权限的网络文件系统上安装。但是,引导这些网络文件系统可能会有问题, 因为在实际系统可以启动之前,它们必须得到 initramfs 的支持。如果需要 在其他位置启动同一系统,或如果希望使用 Xen 功能(如域迁移),则此类安 装非常有用。 1.5 不同的安装方法 SUSE Linux Enterprise Server 提供了若干种用于控制安装的不同方法。 • 在控制台上安装 • 通过串行控制台安装 • 使用 AutoYaST 安装 • 通过 SSH 安装 • 通过 VNC 进行安装 默认情况下,使用控制台。如果要安装大量类似的计算机,则建议创建一个 AutoYaST 配置文件,并使其可用于安装过程。另请参见第 5 章 自动安装 (↑安 装与管理)中有关 autoyast2 的文档。 安装注意事项5 2 安装过程 本章提供了以所需模式完整安装 SUSE® Linux Enterprise Server 所需的步骤的概 述。请在 Architecture-Specific Information 手册中查找用于准备在 x86、AMD64、 Intel EM64T 和 Itanium 上安装 SUSE Linux Enterprise Server 的详细信息,该手 册作为一个可打印的 PDF 在第一张 CD 或 DVD 上的 /docu 目录中提供。参考 包含对如何使用 YaST 安装和配置系统的完整说明。 2.1 从本地可交换驱动器引导 CD-ROM、软盘驱动器和 USB 记忆棒可以用于安装。请按需要调整计算机: 1. 确保该驱动器在 BIOS 中输入为可引导驱动器。 2. 将引导媒体插入驱动器并开始引导过程。 3. CD、DVD、软盘或 USB 磁盘的引导菜单允许向安装系统传递不同的参 数。另请参见第 4.4.3 节 “使用自定义引导选项” (第 4 章 远程安装, ↑安装 与管理)。如果安装通过网络执行,则请在此处指定安装源。 4. 如果安装期间发生意外问题,请使用安全设置引导。 2.2 通过网络安装 使用网络源执行安装需要有一台安装服务器。安装此服务器的过程在第 4.2 节 “设置存放安装源的服务器” (第 4 章 远程安装, ↑安装与管理)中描述。 安装过程7 如果有 SLP 服务器,请在第一个引导屏幕中选择 SLP 作为安装源。在引导期 间,选择使用哪个可用安装源。 如果网络中有 CD 或 DVD,请使用它们作为安装源。在这种情况下,请在引导 提示符处以适当的值指定参数 install=<URL>。请在第 4.4.3 节 “使用自定义 引导选项” (第 4 章 远程安装, ↑安装与管理)中查找关于此参数的更多详细说明。 2.3 远程控制安装 从远程计算机控制安装有三个选项:通过 SSH 安装、通过串行控制台安装和通 过 VNC 安装。Architecture-Specific Information 手册中说明了这些可能的选项。 请在第一张 CD 或 DVD 的 /docu 目录中查找作为可打印 PDF 提供此手册。 8 入门指南 部分 2. 在 IBM POWER 上安装 3 安装注意事项 本章总结了开始在 IBM POWER 硬件上安装 SUSE® Linux Enterprise Server 之前 需要做的所有决策。用于在 IBM POWER 设备上安装 SUSE Linux Enterprise Server 的最新硬件和软件要求在第 1 章 要求 (↑Architecture-Specific Information) 中列出,在第一张 CD 的目录 /docu 中提供为一个可打印的 PDF 文档。 3.1 安装类型 SUSE Linux Enterprise Server 提供了在 IBM POWER 上进行两种不同类型的安 装:在整个系统上安装和在逻辑分区 (LPAR) 中安装。 iSeries Linux 只可以安装在此类计算机的 LPAR 中。在 iSeries 上安装需要一个允许 全程控制安装过程的 telnet 连接。网络中的安装服务器应是好的安装源。 pSeries 此处 Linux 可以安装在整个系统上。在 IBM pSeries p630、p655、p670 和 p690 上,也可能在 LPAR 中安装 Linux。也可以在不分区的情况下启动这两 个系统,并在整个系统上(全系统分区)安装。CD-ROM 驱动器、DVD 驱 动器或网络中的安装服务器可以用作安装源。 eServer i5/p5、System i5/p5、OpenPower Linux 可以安装在整个系统(未管理模式)或 LPAR 上。CD-ROM 驱动器、 DVD 驱动器或网络中的安装服务器可以用作安装源。 安装注意事项11 JS20 Blade、JS21 Blade 在此类计算机上,Linux 只可以安装在整个系统(一个刀片)上。CD-ROM 驱动器、DVD 驱动器或网络中的安装服务器可以用作安装源。 IntelliStation、ATX 工作站和服务器 Linux 只可以安装在整个系统上。CD-ROM 驱动器、DVD 驱动器或网络中 的安装服务器可以用作安装源。 3.2 IPL 选项 根据使用的硬件和选择的安装类型,初始 IPL 的以下选项可用于安装 SUSE Linux Enterprise Server: 表 3.1 IPL 选项 IPL 选项用途 最简单的引导过程。此选项要求系统有本地可用的 CDROM 或 DVD 驱动器。 CD 或 DVD 驱动器 SUSE Linux Enterprise Server 也可以从网络来引导。这要 求将相应的内核(suseboot/inst64 或 ISERIES64) 网络 从第一张 CD 复制到引导服务器上。从网络引导可以在 固件中或使用 i5/OS 选择。 3.3 安装源 为了安装 SUSE Linux Enterprise Server,在本地网络中或本地提供的 CD-ROM 或 DVD 中必须提供安装文件。通过将一个 Linux 或 Unix 系统设置为 HTTP、 NFS 或 FTP 服务器而提供一个网络源。也可能从一个运行 Windows 的计算机通 过 SMB 共享安装文件。 在本地网络中配置 SLP 服务器可以简化安装源的选择。第 4.2.1 节 “使用 YaST 设置安装服务器” (第 4 章 远程安装, ↑安装与管理)中对此进行了描述。 12 入门指南 3.4 安装目标 SUSE Linux Enterprise Server 可以在 IBM Power 的不同类型的大容量储存媒体上 安装。 iSeries • DASD(硬盘) • IBM iSeries 虚拟磁盘 pSeries • DASD(硬盘) • 通过光纤通道的 SAN eServer i5/p5、System i5/p5、OpenPower • DASD(硬盘) • 虚拟 SCSI • 通过光纤通道的 SAN JS20 Blade、JS21 Blade • 本地硬盘 IntelliStation、ATX 工作站和服务器 • 本地硬盘 3.5 连接到安装系统 SUSE Linux Enterprise Server 使您可以从连接到安装系统的四种不同的方式中选 择:SSH、VNC、串行控制台和屏幕控制台。SSH、VNC 或终端软件的版本因 启动到安装系统的连接的工作站上运行的操作系统而异。 安装注意事项13 建议如果需要安装许多相同的分区或计算机,则创建一个 AutoYaST 配置文件。 然后它可以驱动安装过程。请参见第 5.2 节 “基于规则的自动安装” (第 5 章 自动 安装, ↑安装与管理)中 AutoYaST 的文档。 14 入门指南 4 安装过程 本章提供了以所选模式安装 SUSE® Linux Enterprise Server 所需步骤的概述。关 于准备在 IBM POWER 上安装 SUSE Linux Enterprise Server 的详细信息可以在 手册 Architecture-Specific Information 中找到,该手册作为可打印 PDF 文档在第 一张 CD 上的目录 /docu 中提供。关于使用 YaST 安装和配置的详细描述在 第 3 章 使用 YaST 进行安装 (↑安装与管理)和第 7 章 使用 YaST 进行系统配置 (↑ 安装与管理)中提供。 4.1 在整个系统中安装 当在整个系统中安装时,应完成以下步骤。在此上下文中,刀片中心的单个刀 片也算作整个系统。 1 验证硬件要求(另请参见第 1.1 节 “硬件要求” (第 1 章 要求, ↑Architecture- Specific Information))。 2 验证软件要求(另请参见第 1.2 节 “软件要求” (第 1 章 要求, ↑Architecture- Specific Information))。 3 正确设置系统以启用从 CD-ROM、DVD 或网络引导。 • 对于 pSeries,另请参见第 2.2 节 “Preparing for Installation on an IBM pSeries Models” (第 2 章 准备, ↑Architecture-Specific Information)。这也 适用于 ATX 工作站和 ATX 服务器(仅对于在整个系统上安装)。 安装过程15 • 对于 eServer i5/p5、System i5/p5 和 OpenPower,另请参见第 2.1 节 “Preparing for Installation on IBM eServer i5/p5, System i5/p5, and OpenPower Models” (第 2 章 准备, ↑Architecture-Specific Information)。 • 对于 JS20/JS21 Blade,另请参见第 2.3 节 “在 IBM JS20/JS21 刀片机上 准备安装” (第 2 章 准备, ↑Architecture-Specific Information)。 4 从 CD-ROM、DVD 或网络开始安装。另请参见第 2.2.3 节 “Setting Up the Installation Source” (第 2 章 准备, ↑Architecture-Specific Information)。 5 安装软件并执行基本网络配置。另请参见第 3 章 使用 YaST 进行安装 (↑安 装与管理)。 4.2 在 LPAR 中安装 1 验证硬件要求。另请参见第 1.1 节 “硬件要求” (第 1 章 要求, ↑Architecture- Specific Information)。 2 验证软件要求。另请参见第 1.2 节 “软件要求” (第 1 章 要求, ↑Architecture- Specific Information)。 3 准备一个用于安装过程的 VNC 客户机。另请参见第 4.1.1 节 “通过 VNC 进行简单远程安装 - 静态网络配置” (第 4 章 远程安装, ↑安装与管理)。 4 在系统固件或在 i5/OS 端准备系统: • 对于 iSeries,另请参见第 2.4 节 “Preparing an Installation on IBM iSeries Models” (第 2 章 准备, ↑Architecture-Specific Information) • 对于 pSeries p630、p655、p670 和 p690,另请参见第 2.2 节 “Preparing for Installation on an IBM pSeries Models” (第 2 章 准备, ↑Architecture- Specific Information) • 对于 eServer i5/p5、System i5/p5 和 OpenPower,另请参见第 2.1 节 “Preparing for Installation on IBM eServer i5/p5, System i5/p5, and OpenPower Models” (第 2 章 准备, ↑Architecture-Specific Information) 16 入门指南 5 配置一个用于在安装期间访问系统的客户机。另请参见第 2.4.3 节 “操作安 装软件的客户程序” (第 2 章 准备, ↑Architecture-Specific Information)。 6 对于 iSeries,在 i5/OS 端设置 IPL 源,另请参见第 2.4.5 节 “IPL:启动 NWSD(WRKCFGSTS *NWS)” (第 2 章 准备, ↑Architecture-Specific Information)。 7 安装软件并执行基本网络配置。另请参见第 3 章 使用 YaST 进行安装 (↑安 装与管理)。 安装过程17 部分 3. 在 IBM System z 上安装 5 安装注意事项 本章汇总了计划在 IBM System z 硬件上安装 SUSE® Linux Enterprise Server 时 必须做出的所有决策。手册 Architecture-Specific Information 中列出了在 IBM System z 上安装 SUSE Linux Enterprise Server 的最新硬件和软件要求,该手册作 为可打印的 PDF 文档包含在第一张 CD 上的目录 /docu 中。 5.1 安装类型 SUSE Linux Enterprise Server 允许在 IBM POWER 上进行两种不同类型的安装: LPAR 安装 在独立的逻辑分区 (LPAR) 上为 IBM System z 安装 SUSE Linux Enterprise Server 允许 SUSE Linux Enterprise Server 使用物理内存的特定部分。而且还 可以指定应使用多少处理器。这种方式允许在一个系统上并行运行多个操作 系统。 在 z/VM 中安装 z/VM 方式将 IBM System z 的 SUSE Linux Enterprise Server 作为 z/VM(虚 拟机)中的托管系统运行。这种类型的优势是 z/VM 提供对 SUSE Linux Enterprise Server 的完全控制。这种安装经证明对于内核开发和基于内核的 调试非常有帮助。不仅如此,修改托管 Linux 系统的硬件配置也非常容易。 创建托管 SUSE Linux Enterprise Server 系统也非常容易,因为可以并行运行 几百个 Linux 实例。 安装注意事项21 从带有 FCP 功能的 CD-ROM 安装 带有 FCP 功能的 CD-ROM 可以用于以 LPAR 或 VM 方式的 IPL。安装数据 直接从 CD-ROM 读取。 5.2 IPL 选项 根据使用的硬件和选择的安装类型,在安装 SUSE Linux Enterprise Server 之前 以下 IPL 选项可用于初始 IPL: 表 5.1 IPL 选项 IPL 选项作用域 可以用于任何类型的安装。唯一的要求是磁带库单 元可用。 ESCON/FICON 挂接磁带 可以用于 VM 方式。必要的数据必须先前已传送到 z/VM 系统(例如,使用 FTP)。 VM 阅读器 可以用于在 LPAR 中 IPL。安装数据可以直接从 CD-ROM 读取或使用 FTP 装入安装系统。 CD-ROM 或服务器 5.3 安装源 如果是带有 FCP 功能的 CD-ROM,安装数据会从 CD-ROM 读取。对于所有其 他 IPL 选项,安装数据必须在内部网络中提供。在 Unix 或 Linux 环境中,安装 数据可以在设置为 NFS 或 FTP 服务器的工作站上提供。要从 Windows 工作站 上提供安装数据,请在 SMB 共享中发布该数据。有若干 Windows 版的 FTP 软 件包可作为备选,但是使用它们有时会有问题。 5.4 启动到安装系统的连接 SUSE Linux Enterprise Server 提供了三种用于启动到安装系统的连接的不同方 法。选择 SSH、X 或 VNC。根据在启动到安装系统的连接的工作站上运行的操 作系统,这些应用程序的版本有所不同。 22 入门指南 6 安装过程 本章提供了以所需方式完整安装 SUSE® Linux Enterprise Server 所需的各个步骤 的概述。关于准备在 IBM System z 上安装 SUSE Linux Enterprise Server 的详细 信息在手册 Architecture-Specific Information 中提供,该手册作为可打印 PDF 文 档在第一张 CD 上的目录 /docu 中提供。使用 YaST 安装和配置系统的详细说 明可以在参考中找到。 6.1 LPAR 安装 1 安装之前,请选择用于初始 IPL 的适当 IPL 选项。如果是 LPAR 安装,请 从 CD-ROM 或服务器或磁带中选择。 2 使用 FTP 或 SMB 在网络中提供安装媒体或其数据,并确保这些路径可以 由 YaST 访问。 3 选择下列操作之一: • 使用 HMC,从 CD-ROM 或服务器准备 IPL。 • 将磁带 IPL 内核、parmfile 和初始 RAM 磁盘使用 FTP 传送到磁带, 并通过 IOCDS 使磁带机可用。 4 执行安装系统的 IPL。 5 配置网络。 安装过程23 6 选择到安装系统的连接类型(SSH、X 或 VNC)并建立连接。 7 使用 YaST 开始基本安装。 8 执行已安装系统的第一次 IPL。 9 重新连接到安装系统,并启动 YaST 以继续安装过程和配置 SUSE Linux Enterprise Server。 6.2 z/VM 安装 1 安装之前,请选择用于初始 IPL 的适当 IPL 选项。对于在 z/VM 中安 装,请选择 VM 阅读器或磁带。 2 使用 FTP 或 SMB 在网络中提供安装媒体或其数据,并确保这些路径可 以由 YaST 访问。 3 在 z/VM 中创建一个 Linux 客户机,指派其内存限额和定义所需的网络 连接。 4 选择下列操作之一: • 将 VM 阅读器内核、parmfile 和初始 RAM 磁盘使用 FTP 传送到 z/VM 中的客户机可以访问的小型磁盘,并为该 VM 阅读器的 IPL 创建一个 REXX 启动脚本。 • 将磁带 IPL 内核、parmfile 和初始 RAM 磁盘使用 FTP 传送到 z/VM 中的客户机可以访问的小型磁盘,并将这些文件使用 REXX 脚本 (举例而言)传送到磁带。 5 执行安装系统的 IPL。 6 配置网络。 7 选择到安装系统的连接类型(SSH 或 VNC)并建立连接。 8 使用 YaST 开始基本安装。 24 入门指南 9 执行已安装系统的第一次 IPL。 10 重新连接到安装系统,并启动 YaST 以继续安装过程和配置 SUSE Linux Enterprise Server。 安装过程25
目录树 下面再给个样例 ├─Makefile │ ├─boot │ bootsect.s │ head.s │ setup.s │ ├─fs │ bitmap.c │ block_dev.c │ buffer.c │ char_dev.c │ exec.c │ fcntl.c │ file_dev.c │ file_table.c │ inode.c │ ioctl.c │ Makefile │ namei.c │ open.c │ pipe.c │ read_write.c │ stat.c │ super.c │ truncate.c │ ├─include │ │ a.out.h │ │ const.h │ │ ctype.h │ │ errno.h │ │ fcntl.h │ │ signal.h │ │ stdarg.h │ │ stddef.h │ │ string.h │ │ termios.h │ │ time.h │ │ unistd.h │ │ utime.h │ │ │ ├─asm │ │ io.h │ │ memory.h │ │ segment.h │ │ system.h │ │ │ ├─linux │ │ config.h │ │ fs.h │ │ hdreg.h │ │ head.h │ │ kernel.h │ │ mm.h │ │ sched.h │ │ sys.h │ │ tty.h │ │ │ └─sys │ stat.h │ times.h │ types.h │ utsname.h │ wait.h │ ├─init │ main.c │ ├─kernel │ │ asm.s │ │ exit.c │ │ fork.c │ │ mktime.c │ │ panic.c │ │ printk.c │ │ sched.c │ │ signal.c │ │ sys.c │ │ system_call.s │ │ vsprintf.c │ │ │ ├─blk_drv │ │ blk.h │ │ floppy.c │ │ hd.c │ │ ll_rw_blk.c │ │ Makefile │ │ ramdisk.c │ │ │ ├─chr_drv │ │ console.c │ │ keyboard.S │ │ Makefile │ │ rs_io.s │ │ serial.c │ │ tty_io.c │ │ tty_ioctl.c │ │ │ └─math │ Makefile │ math_emulate. │ ├─lib │ close.c │ ctype.c │ dup.c │ errno.c │ execve.c │ Makefile │ malloc.c │ open.c │ setsid.c │ string.c │ wait.c │ write.c │ _exit.c │ ├─mm │ Makefile │ memory.c │ page.s │ └─tools build.c 样例 main。c 用sourceinsight软件阅读 很方便 /* * linux/init/main.c * * (C) 1991 Linus Torvalds */ #define __LIBRARY__ // 定义该变量是为了包括定义在unistd.h 中的内嵌汇编代码等信息。 #include // *.h 头文件所在的默认目录是include/,则在代码中就不用明确指明位置。 // 如果不是UNIX 的标准头文件,则需要指明所在的目录,并用双引号括住。 // 标准符号常数与类型文件。定义了各种符号常数和类型,并申明了各种函数。 // 如果定义了__LIBRARY__,则还包括系统调用号和内嵌汇编代码_syscall0()等。 #include // 时间类型头文件。其中最主要定义了tm 结构和一些有关时间的函数原形。 /* * we need this inline - forking from kernel space will result * in NO COPY ON WRITE (!!!), until an execve is executed. This * is no problem, but for the stack. This is handled by not letting * main() use the stack at all after fork(). Thus, no function * calls - which means inline code for fork too, as otherwise we * would use the stack upon exit from 'fork()'. * * Actually only pause and fork are needed inline, so that there * won't be any messing with the stack from main(), but we define * some others too. */ /* * 我们需要下面这些内嵌语句 - 从内核空间创建进程(forking)将导致没有写时复制(COPY ON WRITE)!!! * 直到一个执行execve 调用。这对堆栈可能带来问题。处理的方法是在fork()调用之后不让main()使用 * 任何堆栈。因此就不能有函数调用 - 这意味着fork 也要使用内嵌的代码,否则我们在从fork()退出 * 时就要使用堆栈了。 * 实际上只有pause 和fork 需要使用内嵌方式,以保证从main()中不会弄乱堆栈,但是我们同时还 * 定义了其它一些函数。 */ static inline _syscall0 (int, fork) // 是unistd.h 中的内嵌宏代码。以嵌入汇编的形式调用 // Linux 的系统调用中断0x80。该中断是所有系统调用的 // 入口。该条语句实际上是int fork()创建进程系统调用。 // syscall0 名称中最后的0 表示无参数,1 表示1 个参数。 static inline _syscall0 (int, pause) // int pause()系统调用:暂停进程的执行,直到 // 收到一个信号。 static inline _syscall1 (int, setup, void *, BIOS) // int setup(void * BIOS)系统调用,仅用于 // linux 初始化(仅在这个程序中被调用)。 static inline _syscall0 (int, sync) // int sync()系统调用:更新文件系统。 #include // tty 头文件,定义了有关tty_io,串行通信方面的参数、常数。 #include // 调度程序头文件,定义了任务结构task_struct、第1 个初始任务 // 的数据。还有一些以宏的形式定义的有关描述符参数设置和获取的 // 嵌入式汇编函数程序。 #include // head 头文件,定义了段描述符的简单结构,和几个选择符常量。 #include // 系统头文件。以宏的形式定义了许多有关设置或修改 // 描述符/中断门等的嵌入式汇编子程序。 #include // io 头文件。以宏的嵌入汇编程序形式定义对io 端口操作的函数。 #include // 标准定义头文件。定义了NULL, offsetof(TYPE, MEMBER)。 #include // 标准参数头文件。以宏的形式定义变量参数列表。主要说明了-个 // 类型(va_list)和三个宏(va_start, va_arg 和va_end),vsprintf、 // vprintf、vfprintf。 #include #include // 文件控制头文件。用于文件及其描述符的操作控制常数符号的定义。 #include // 类型头文件。定义了基本的系统数据类型。 #include // 文件系统头文件。定义文件表结构(file,buffer_head,m_inode 等)。 static char printbuf[1024]; // 静态字符串数组。 extern int vsprintf (); // 送格式化输出到一字符串中(在kernel/vsprintf.c,92 行)。 extern void init (void); // 函数原形,初始化(在168 行)。 extern void blk_dev_init (void); // 块设备初始化子程序(kernel/blk_drv/ll_rw_blk.c,157 行) extern void chr_dev_init (void); // 字符设备初始化(kernel/chr_drv/tty_io.c, 347 行) extern void hd_init (void); // 硬盘初始化程序(kernel/blk_drv/hd.c, 343 行) extern void floppy_init (void); // 软驱初始化程序(kernel/blk_drv/floppy.c, 457 行) extern void mem_init (long start, long end); // 内存管理初始化(mm/memory.c, 399 行) extern long rd_init (long mem_start, int length); //虚拟盘初始化(kernel/blk_drv/ramdisk.c,52) extern long kernel_mktime (struct tm *tm); // 建立内核时间(秒)。 extern long startup_time; // 内核启动时间(开机时间)(秒)。 /* * This is set up by the setup-routine at boot-time */ /* * 以下这些数据是由setup.s 程序在引导时间设置的(参见第2 章2.3.1 节中的表2.1)。 */ #define EXT_MEM_K (*(unsigned short *)0x90002) // 1M 以后的扩展内存大小(KB)。 #define DRIVE_INFO (*(struct drive_info *)0x90080) // 硬盘参数表基址。 #define ORIG_ROOT_DEV (*(unsigned short *)0x901FC) // 根文件系统所在设备号。 /* * Yeah, yeah, it's ugly, but I cannot find how to do this correctly * and this seems to work. I anybody has more info on the real-time * clock I'd be interested. Most of this was trial and error, and some * bios-listing reading. Urghh. */ /* * 是啊,是啊,下面这段程序很差劲,但我不知道如何正确地实现,而且好象它还能运行。如果有 * 关于实时时钟更多的资料,那我很感兴趣。这些都是试探出来的,以及看了一些bios 程序,呵! */ #define CMOS_READ(addr) ({ \ // 这段宏读取CMOS 实时时钟信息。 outb_p (0x80 | addr, 0x70); \ // 0x70 是写端口号,0x80|addr 是要读取的CMOS 内存地址。 inb_p (0x71); \ // 0x71 是读端口号。 } ) #define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) // 将BCD 码转换成数字。 static void time_init (void) // 该子程序取CMOS 时钟,并设置开机时间??startup_time(秒)。 { struct tm time; do { time.tm_sec = CMOS_READ (0); // 参见后面CMOS 内存列表。 time.tm_min = CMOS_READ (2); time.tm_hour = CMOS_READ (4); time.tm_mday = CMOS_READ (7); time.tm_mon = CMOS_READ (8); time.tm_year = CMOS_READ (9); } while (time.tm_sec != CMOS_READ (0)); BCD_TO_BIN (time.tm_sec); BCD_TO_BIN (time.tm_min); BCD_TO_BIN (time.tm_hour); BCD_TO_BIN (time.tm_mday); BCD_TO_BIN (time.tm_mon); BCD_TO_BIN (time.tm_year); time.tm_mon--; startup_time = kernel_mktime (&time); } static long memory_end = 0; // 机器具有的内存(字节数)。 static long buffer_memory_end = 0; // 高速缓冲区末端地址。 static long main_memory_start = 0; // 主内存(将用于分页)开始的位置。 struct drive_info { char dummy[32]; } drive_info; // 用于存放硬盘参数表信息。 void main (void) /* This really IS void, no error here. */ { /* The startup routine assumes (well, ...) this */ /* 这里确实是void,并没错。在startup 程序(head.s)中就是这样假设的。 */ // 参见head.s 程序第136 行开始的几行代码。 /* * Interrupts are still disabled. Do necessary setups, then * enable them */ /* * 此时中断仍被禁止着,做完必要的设置后就将其开启。 */ // 下面这段代码用于保存: // 根设备号 ??ROOT_DEV; 高速缓存末端地址??buffer_memory_end; // 机器内存数??memory_end;主内存开始地址 ??main_memory_start; ROOT_DEV = ORIG_ROOT_DEV; drive_info = DRIVE_INFO; memory_end = (1 << 20) + (EXT_MEM_K < 16 * 1024 * 1024) // 如果内存超过16Mb,则按16Mb 计。 memory_end = 16 * 1024 * 1024; if (memory_end > 12 * 1024 * 1024) // 如果内存>12Mb,则设置缓冲区末端=4Mb buffer_memory_end = 4 * 1024 * 1024; else if (memory_end > 6 * 1024 * 1024) // 否则如果内存>6Mb,则设置缓冲区末端=2Mb buffer_memory_end = 2 * 1024 * 1024; else buffer_memory_end = 1 * 1024 * 1024; // 否则则设置缓冲区末端=1Mb main_memory_start = buffer_memory_end; // 主内存起始位置=缓冲区末端; #ifdef RAMDISK // 如果定义了虚拟盘,则主内存将减少。 main_memory_start += rd_init (main_memory_start, RAMDISK * 1024); #endif // 以下是内核进行所有方面的初始化工作。阅读时最好跟着调用的程序深入进去看,实在看 // 不下去了,就先放一放,看下一个初始化调用 -- 这是经验之谈?。 mem_init (main_memory_start, memory_end); trap_init (); // 陷阱门(硬件中断向量)初始化。(kernel/traps.c,181 行) blk_dev_init (); // 块设备初始化。 (kernel/blk_dev/ll_rw_blk.c,157 行) chr_dev_init (); // 字符设备初始化。 (kernel/chr_dev/tty_io.c,347 行) tty_init (); // tty 初始化。 (kernel/chr_dev/tty_io.c,105 行) time_init (); // 设置开机启动时间??startup_time(见76 行)。 sched_init (); // 调度程序初始化(加载了任务0 的tr, ldtr) (kernel/sched.c,385) buffer_init (buffer_memory_end); // 缓冲管理初始化,建内存链表等。(fs/buffer.c,348) hd_init (); // 硬盘初始化。 (kernel/blk_dev/hd.c,343 行) floppy_init (); // 软驱初始化。 (kernel/blk_dev/floppy.c,457 行) sti (); // 所有初始化工作都做完了,开启中断。 // 下面过程通过在堆栈中设置的参数,利用中断返回指令切换到任务0。 move_to_user_mode (); // 移到用户模式。 (include/asm/system.h,第1 行) if (!fork ()) { /* we count on this going ok */ init (); } /* * NOTE!! For any other task 'pause()' would mean we have to get a * signal to awaken, but task0 is the sole exception (see 'schedule()') * as task 0 gets activated at every idle moment (when no other tasks * can run). For task0 'pause()' just means we go check if some other * task can run, and if not we return here. */ /* 注意!! 对于任何其它的任务,'pause()'将意味着我们必须等待收到一个信号才会返 * 回就绪运行态,但任务0(task0)是唯一的意外情况(参见'schedule()'),因为任务0 在 * 任何空闲时间里都会被激活(当没有其它任务在运行时),因此对于任务0'pause()'仅意味着 * 我们返回来查看是否有其它任务可以运行,如果没有的话我们就回到这里,一直循环执行'pause()'。 */ for (;;) pause (); } static int printf (const char *fmt, ...) // 产生格式化信息并输出到标准输出设备stdout(1),这里是指屏幕上显示。参数'*fmt'指定输出将 // 采用的格式,参见各种标准C 语言书籍。该子程序正好是vsprintf 如何使用的一个例子。 // 该程序使用vsprintf()将格式化的字符串放入printbuf 缓冲区,然后用write()将缓冲区的内容 // 输出到标准设备(1--stdout)。 { va_list args; int i; va_start (args, fmt); write (1, printbuf, i = vsprintf (printbuf, fmt, args)); va_end (args); return i; } static char *argv_rc[] = { "/bin/sh", NULL}; // 调用执行程序时参数的字符串数组。 static char *envp_rc[] = { "HOME=/", NULL}; // 调用执行程序时的环境字符串数组。 static char *argv[] = { "-/bin/sh", NULL}; // 同上。 static char *envp[] = { "HOME=/usr/root", NULL}; void init (void) { int pid, i; // 读取硬盘参数包括分区表信息并建立虚拟盘和安装根文件系统设备。 // 该函数是在25 行上的宏定义的,对应函数是sys_setup(),在kernel/blk_drv/hd.c,71 行。 setup ((void *) &drive_info); (void) open ("/dev/tty0", O_RDWR, 0); // 用读写访问方式打开设备“/dev/tty0”, // 这里对应终端控制台。 // 返回的句柄号0 -- stdin 标准输入设备。 (void) dup (0); // 复制句柄,产生句柄1 号 -- stdout 标准输出设备。 (void) dup (0); // 复制句柄,产生句柄2 号 -- stderr 标准出错输出设备。 printf ("%d buffers = %d bytes buffer space\n\r", NR_BUFFERS, NR_BUFFERS * BLOCK_SIZE); // 打印缓冲区块数和总字节数,每块1024 字节。 printf ("Free mem: %d bytes\n\r", memory_end - main_memory_start); //空闲内存字节数。 // 下面fork()用于创建一个子进程(子任务)。对于被创建的子进程,fork()将返回0 值, // 对于原(父进程)将返回子进程的进程号。所以180-184 句是子进程执行的内容。该子进程 // 关闭了句柄0(stdin),以只读方式打开/etc/rc 文件,并执行/bin/sh 程序,所带参数和 // 环境变量分别由argv_rc 和envp_rc 数组给出。参见后面的描述。 if (!(pid = fork ())) { close (0); if (open ("/etc/rc", O_RDONLY, 0)) _exit (1); // 如果打开文件失败,则退出(/lib/_exit.c,10)。 execve ("/bin/sh", argv_rc, envp_rc); // 装入/bin/sh 程序并执行。 _exit (2); // 若execve()执行失败则退出(出错码2,“文件或目录不存在”)。 } // 下面是父进程执行的语句。wait()是等待子进程停止或终止,其返回值应是子进程的进程号(pid)。 // 这三句的作用是父进程等待子进程的结束。&i 是存放返回状态信息的位置。如果wait()返回值不 // 等于子进程号,则继续等待。 if (pid > 0) while (pid != wait (&i)) /* nothing */ ; // 如果执行到这里,说明刚创建的子进程的执行已停止或终止了。下面循环中首先再创建一个子进程, // 如果出错,则显示“初始化程序创建子进程失败”的信息并继续执行。对于所创建的子进程关闭所有 // 以前还遗留的句柄(stdin, stdout, stderr),新创建一个会话并设置进程组号,然后重新打开 // /dev/tty0 作为stdin,并复制成stdout 和stderr。再次执行系统解释程序/bin/sh。但这次执行所 // 选用的参数和环境数组另选了一套(见上面165-167 行)。然后父进程再次运行wait()等待。如果 // 子进程又停止了执行,则在标准输出上显示出错信息“子进程pid 停止了运行,返回码是i”,然后 // 继续重试下去…,形成“大”死循环。 while (1) { if ((pid = fork ()) < 0) { printf ("Fork failed in init\r\n"); continue; } if (!pid) { close (0); close (1); close (2); setsid (); (void) open ("/dev/tty0", O_RDWR, 0); (void) dup (0); (void) dup (0); _exit (execve ("/bin/sh", argv, envp)); } while (1) if (pid == wait (&i)) break; printf ("\n\rchild %d died with code %04x\n\r", pid, i); sync (); } _exit (0); /* NOTE! _exit, not exit() */ }
什么是MBR和主引导引导扇区?什么是主分区、扩展分区、逻辑分区?什么是活动分区、引导分区、系统分区、启动分区?一下子罗列这么多概念,恐怕很多人都搞不清它们的区别和联系吧。网上虽然不少解释,但很多是模棱两可甚至是错误的,反而越弄越糊涂。猫猫煞费苦心的把这一大串概念研究了很长时间,试图搞明白,为了以后查阅方便,于是把对这些概念的理解总结了一下。而要想分清这些概念,真要费一点脑筋啊! 一、MBR和主引导扇区 首先简要介绍MBR和主引导扇区的关系。 主引导扇区是硬盘0号柱面,0号磁头的第一个扇区,大小为512字节。(注:硬盘可以用柱面、磁头和扇区定位) MBR,占用主引导扇区的前446字节,紧随其后的64字节是分区表DPT,最后还剩两个字节则恒为55AA,表示结束符号。(下图,演示了它们的位置关系) 然后,具体说一说MBR和分区表。 MBR,全称为Master Boot Record,即硬盘的主引导记录。MBR,共446字节,一般在操作系统安装时写入,但它并不属于操作系统。MBR就是一段引导程序,用于检测磁盘的分区合法性和加载操作系统,它的重要作用就是识别活动分区,并引导操作系统。 分区表DPT,共64字节,记录了硬盘有多少分区以及分区的各种属性。由于一个分区的信息要占用16字节,所以分区表只能定义4个分区,这就是为什么我们说硬盘一般最多只能分为4个主分区(这里说“一般”是对基本磁盘而言,而对于动态磁盘则无此限制,但大部分都在使用基本磁盘,可以暂不考虑 )。 计算机开机后BIOS加电自检,一切正常后,找到第一个启动设备(一般就是硬盘),然后从这个启动设备的主引导扇区读取MBR。MBR这段引导程序识别活动分区,引导操作系统。 二、主分区、扩展分区、逻辑分区 正如前面所讲,主分区是由主引导扇区中64字节的分区表所定义的,最多只能有4个。但为了满足更多分区的需求,变产生了扩展分区。形式上,如果拥有扩展分区,就必须牺牲一个主分区,而且最多有一个扩展分区,也就是说:主分区+扩展分区<=4 and 扩展分区<=1。因此扩展分区也可以看成一种特殊的主分区。 但扩展分区并不可以直接使用,扩展分区又必须以逻辑分区的形式出现,可以这样认为:扩展分区包含着若干逻辑分区,而且至少包含一个。 扩展分区中的逻辑分区是以链式存在的。即每一个逻辑分区都记录着下一个逻辑分区的位置信息,依次串联。事实上每一个逻辑分区都有一个和主引导扇区类似的引导扇区,引导扇区里有类似的分区表。该分区表记录了该分区的信息和一个指针,指向下一个逻辑分区的引导扇区。 因此,逻辑分区是借鉴了主分区的方法,相当于在一个主分区下面建立了若干级“主分区”。从上面的描述,猫猫推测,逻辑分区是建立在操作系统级别,由操作系统识别的。另一个可以预测的现象是:一旦某一个逻辑分区损害,跟在它后面的所有逻辑分区都将丢失,而前面的逻辑分区去可以保留。这也是链式结果的特点。 三、活动分区、系统分区、启动分区、引导分区 这四个术语和前面三个不同,前面三个是讲述分区的“物理”形成。而这四个术语描述了分区的功能,并且更易混淆。 首先,根据Windows XP随机帮助文档看,引导分区就是启动分区,两者是同一概念,所以下面就只讨论活动分区、系统分区和启动分区。 系统分区和启动分区比较。 这是两个极易混淆的概念,因为两者的含义似乎和它们的名字正好颠倒了。Windows帮助文件的术语表里是这样解释他们的:”系统分区,包含加载 Windows(例如,Ntldr、Osloader、Boot.ini、Ntdetect.com)所需的硬件特定文件的分区。系统分区可以(但不是必须)与启动分区相同。启动分区,包含 Windows 操作系统及其支持文件的分区。启动分区可以(但不是必须)与系统分区相同。“ 看起来是很糊涂,但说的简单些就是:系统分区包含Ntldr、Osloader、Boot.ini、Ntdetect.com等文件,而启动分区包含Windows和system32文件。所以,真正包含操作系统内核文件的分区是启动分区,包含操作系统引导文件的确实系统分区,这是要特别注意的一点。 有些人就疑问了,我的Ntldr、Osloader、Boot.ini、Ntdetect.com和Windows、system32文件都在C盘,那是怎么回事?这很容易解释,你的C盘既是系统分区也是启动分区,只安装一个操作系统的计算机大都属于这种情况 ,所以微软在括号里说“但不是必须”。 其实系统分区时针对引导来说的,而启动分区时针对操作系统来说的。像我的电脑C盘先安装了Vista,后来D盘安装了XP,现在C盘是系统分区;至于哪个是启动分区,就要看我用那个系统了,进Vista,C盘就是启动分区,进XP,D盘就是启动分区。(再强调,启动分区包含Windows内核文件,而系统分区才包含操作系统引导文件,不然会越看越糊涂的。) 最后要搞明白的是活动分区,这一点,比较麻烦。 Windows帮助文档里的定义是:”活动分区,基于 x86 计算机的启动分区。活动分区必须是基本磁盘上的主要分区。如果只使用 Windows,则活动分区可以与系统卷相同。“补充说明有:活动分区必须是主分区,一块硬盘上只可以有一个活动分区。其他主分区可以被标记为活动分区。 而从主引导扇区处看,活动分区仅仅是在分区表中,16个字节的最前面含有80标志的分区信息所定义的分区。 但猫猫对Windows帮助文档的定义不敢苟同(也许是我错了,但是我思来想去,只有这样可以解释通)。首先,我们知道活动分区是通过主引导扇区的分区表标记的,所以理论上,每个主分区都可以被标记为活动(只是不当的标记会导致系统无法启动)。Windows帮助文档说活动分区,是基于x86的计算机的启动分区,那不就是说是Windows文件所在分区。可是对于双系统来说,这种说法显然不对,因为双系统的启动分区是依据被启动的系统而定的。所以,我假定微软也把系统分区和启动分区的概念搞混淆了。 所以,结果变为,活动分区是基于x86计算机的系统分区。换句话说,活动分区是一种系统分区。在这种情况下,一个主分区是不是系统分区似乎并不具有价值,只有被标记为活动的主分区才有价值。因为,只有标记为活动分区,这个系统分区的Windows启动支持文件才会被加载,然后通过这些引导存储在启动分区的Windows内核文件,完全Windows的启动。 所以,Windows可以被安装在逻辑分区内(我发现我的电脑就是这样的),但必须在活动分区的启动支持文件里加上对这个逻辑分区里Windows的引导信息。具体到XP,就是boot.ini文件添加上对双系统的引导,而这个boot,ini文件必须在启动分区。而我了一个实验,在XP下面通过启动和故障恢复对话框修改boot.ini文件,发现修改的并非XP所在的分区的boot.ini,而是Vista所在分区的boot.ini。(我在主分区C盘安装了Vista,逻辑分区D盘安装了XP)。同时,我通过软件废除Vista的新式引导方式,恢复xp的boot.ini式引导方式(此时,C盘Vista已无法引导),发现分别修改C盘和D盘的boot.ini,只有C盘的boot.ini才有效。再次印证了我的假设。 另外,如果两个系统都安装在主分区,则可以通过标记各自的安装分区为活动分区,而启动不同的操作系统。 参考资料: Linux引导过程内幕:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/ 维基百科-主引导扇区:http://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E6%89%87%E5%8C%BA 硬盘主引导记录详解(汇编代码详解):http://www.cnblogs.com/woodfish1988/archive/2007/11/25/971482.html Windows XP随机帮助文档(Windows帮助文档是一个很好的东西,有些人优化系统竟然把它删了,真是太不应该了。 呵呵,本文地址,猫猫的园地:http://blog.mm-share.cn/post/Partition-Comparison.html 写了这么多,希望对大家有所帮助。若有不足之处,望方家指正!另外,还有基本磁盘、动态磁盘,卷和分区的区别等待问题,还要进一步研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值