编写一个可以用GRUB来引导的简单x86内核
- 格式:doc
- 大小:29.00 KB
- 文档页数:6
使⽤Ubuntu原⽣的Grub2作为主引导,引导六个系统⽅法下⾯是Grub2引导各种系统的⽰例。
其实,⼤家有经验的话,光看⽰例,⾃⼰应该就懂怎么改了(注意:所引导的Mac系统是PC⿊苹果)。
我的Grub2配置⽂件列表(/boot/grub/grub.cfg):set default=0set timeout=3# Windows本地系统启动menuentry "Windows NT, XP/2003/Vista/Win7/Win8.1" {set root='(hd0,msdos1)'drivemap -s (hd0) ${root}chainloader +1# 对于NT6系统,也可以⽤:ntldr /bootmgr}# ⿊苹果本地系统启动menuentry "Mac OS X 10.8.5, Mountain Lion" {drivemap -s (hd0) (hd0,msdos7)linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos7)/wowpc.iso}# Ubuntu本地系统启动menuentry "Ubuntu Mate x86_64 3.11.0-12 generic" {search --no-floppy --set --label matebuntulinux /boot/vmlinuz root=LABEL=matebuntu rw quietinitrd /boot/initrd.img}# WindowsPE应急启动menuentry "Windows PE Boot" {linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos5)/SysBackup/win2k3pe.iso}# UbuntuLiveCD应急启动menuentry "Ubuntu LiveCD Boot" {loopback lo (hd0,msdos5)/SysBackup/flashback7e.isolinux (lo)/casper/vmlinuz boot=casper iso-scan/filename=/SysBackup/flashback7e.isoinitrd (lo)/casper/initrd.lz}# Mac变⾊龙应急启动menuentry "Mac Chameleon Boot" {drivemap -s (hd0) (hd0,msdos5)linux16 (hd0,msdos5)/SysBackup/memdisk iso rawinitrd16 (hd0,msdos5)/SysBackup/mac-wowpc.iso}# 内存颗粒损换检测menuentry "Memory test (memtest86+)" {linux16 /boot/memtest86+.bin}# 标准⼆进制可引导⽂件引导# menuentry "Grub for Dos" {# ntldr (hd0,msdos1)/grldr # }。
GRUB简要教程GNU GRUB 是一个多重操作系统启动管理器。
用来引导不同系统,如windows ,Linux。
一、了解一下x86的引导过程由硬盘启动时,BIOS通常是转向第一块硬盘最初的几个扇区,即主引导记录。
装载GRUB和操作系统的过程,包括以下几个操作步骤:1、装载主引导记录。
基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。
2、装载Grub。
这第二引导装载程序实际上是引出更高级的功能,以允许用户装载入一个特定的操作系统。
3、装载在一个特定分区上的操作系统,如Linux内核。
GRUB把机器的控制权移交给操作系统。
不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。
二、grub下的设备名称硬盘都是用hd开始,软盘用fd开头,命名和Linux不大一样,是从0算起。
(hd0,0)表示C 盘。
(hd0,4)表示D 盘。
系统的第一个硬盘驱动器表示成(hd0),其上的第一个分区表示为(hd0,0),也就是说对于硬盘,采用(hdx,y)的形式来表示,x、y都是从0开始计数的,x表示硬盘号,y表示分区号。
由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。
一般机器的硬盘都是一个主分区,其余是逻辑分区,因此C盘用(hd0,0),D盘用(hd0,4)来表示,光盘用(cd)表示,第一软驱用(fd0)表示。
文件的表示为( , ) /path/to/file三、GRUB的根文件系统一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。
GRUB的根文件系统与Linux的根文件系统是没有关系的。
四.grub 的接口当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件(menu.lst)。
编译内核详解(linux-2.6.34)2010-06-20by李阳mail:kmalloc@ 1.下载源代码1.1下载到内核源码官方网站/下载或,$wget /pub/linux/kernel/v2.6/linux-2.6.34.tar.bz21.2解压源码$cd~/src$tar xjvf linux-2.6.34.tar.bz22.编译软件准备(ubuntu)2.1在ubuntu系统安装编译内核需要的软件包$sudo apt-get install build-essential kernel-packagelibncurses5-dev2.2清理以前编译时留下的临时文件如果是刚刚解开的包,不需要执行这步。
如果是第二次或者是第n次编译,那么一定要执行。
$cd linux-2.6.34$make mrproper2.3拷贝已有的配置文件$cp/boot/config-`uname-r`./.config2.4自动精简内核配置(将你需要用的所用硬件都插在电脑上,这样会根据现在电脑链接的硬件进行自动配置一下,也可以省略此步)make localmodconfig3.配置内核3.1配置内核的工具方法一:$make menuconfig方法二:xconfig.安装xconfig$sudo apt-get install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt.使用xconfig配置内核$sudo make xconfig.xconfig选项意义:圆中点是编译成可以随时加人的模块(以下简称M),方块中一勾是编译进入内核(以下简称Y),空就是不要(简称N)3.2内核配置及优化General setup--->[*]Prompt for development and/or incomplete code/drivers<===显示尚在开发中或尚未完成的代码和驱动.我不是内核或驱动开发人员。
grub2 的cfg写法-回复Grub2的CFG写法Grub2是一个广泛被使用的引导加载程序,它被用来在计算机启动时选择操作系统或内核。
Grub2的配置文件(通常被称为grub.cfg)是一个重要的组成部分,它决定了引导后面的操作系统或内核。
本文将为您详细介绍Grub2的CFG写法,通过一步一步的解释,帮助读者理解和创建一个有效的grub.cfg文件。
第一步:了解grub.cfg的结构在我们开始编写grub.cfg之前,我们需要了解其基本结构。
grub.cfg是一个文本文件,其中包含一系列的菜单条目。
每个菜单条目对应于一个操作系统或内核,包括该操作系统的启动选项。
每个菜单条目的基本结构如下:menuentry '菜单标题' {操作系统启动选项}'菜单标题'是我们为特定操作系统或内核定义的名称,可以根据需求更改。
而“操作系统启动选项”则包括指导Grub2引导该操作系统所需的命令。
第二步:创建一个基本的菜单条目让我们创建一个基本的菜单条目,以便了解如何编写grub.cfg。
menuentry 'Ubuntu' {search file no-floppy set=root /vmlinuzlinux /vmlinuz root=/dev/sda1initrd /initrd.img}在这个例子中,我们为操作系统Ubuntu创建了一个菜单条目。
首先,我们使用search命令来查找指定的内核文件(/vmlinuz),set=root将其设置为根文件系统。
然后,我们使用linux命令指定内核的位置(/vmlinuz),并通过root=/dev/sda1参数将根文件系统设为/dev/sda1。
最后,我们使用initrd命令指定初始内存映像文件(/initrd.img)。
第三步:添加更多的菜单条目和选项现在我们已经创建了一个基本的菜单条目,让我们继续添加更多的菜单条目和选项。
手动通过grub命令行启动Linux或者win系统前些天fedora的启动菜单grub.conf丢失,无法进入系统。
不过,grub启动管理器还好好的,只好通过grub命令行来手动引导启动系统了。
在“从硬盘安装fedora 8 ”中曾经稍微提到过,grub是一个多系统的启动管理器,不但有linux版本的grub,也有windows版本的grub。
上次从硬盘安装系统用的就是windows版本的grub。
可以说,grub是一个非常强大的多系统启动管理器,具有多重系统引导,交互式操作,可设置grub启动密码,可映射硬盘,可以定制开机画面等等特点。
通过命令行启动系统就是交互式操作的一个应用,至于其它应用,这里就不再一一列出。
想要深入了解它的话,可以看一下grub的手册:/main/doc/grub/grubmanual/index.html 。
说来惭愧,我还没完全看过。
哈哈。
闲话少说,先把通过命令行启动系统的过程列出来。
为了解释方便,特标上行号:1root (hd0,2)2kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet 3initrd /initrd-2.6.26.5-28.fc8.img4boot怎么样?linux的启动命令行是不是很简洁啊?下面就一一解释这几命令。
第1行命令:指定/boot所在的分区。
要是不知道自己的/boot分区在哪里,没关系,先输入root (hd0,然后按Tab键,它会显示可能的分区,然后根据分区类型判断/boot分区。
我就是这么做的......所以Tab键是linux里很好用的一个键。
这里指定/boot分区并不是必须的,在这里省略的话要在kernel 以及initrd中指定,即:kernel (hd0,2)/vmlinuz-2.6......和initrd (hd0,2)/initrd-2.6......关于"hd0,2”,是指第一块硬盘的第三个分区,这是一个主分区。
GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
Windows下用wingrub引导安装linux写在前面的话:我用的是Red Hat Enterprise Linux Server5-4,本人不才有错误之处,还请多多指教,在此表示感谢!!!!!!!一.安装wingrub1.双击wingrub的安装程序,如下图所示:单击Next2.选择安装的位置,如下图所示单击Install安装完成二.Wingrub的配置A.选择Tools--àInstall Grub如下图所示:在弹出的窗口中做如下配置,最后单击Istall完成安装。
注:当在Partition右边的下拉列表中看到(hd0,1),说明硬盘的第一个分区(hd0,0)(C盘)是NTFS分区,(hd0,1)就是我们的D盘,即存放Linux镜像文件的分区,(hd0,2)是我们的E盘,即要安装linux操作系统的分区。
B.在Stem Drive右边的下拉框中选择C,再选择BOOT.INI并在title中写入一个名称,这里写grub,在TimeOut中写入10如下图所示。
注意:A和B还是有点小小的区别,A的方法是开机就能看到所有在menul.lst中系统;而B则必须选择刚才我们所填写的grub选项,然后才能看到在menul.lst中的系统。
这里我们用A这中方法。
三.把Redhat Enterprise Linux5-4.iso镜像文件放到D盘(FAT32),把Redhat Enterprise Linux5-4.iso的镜像文件中的isolinux解压到D盘中注:这里我们只需要两个文件vmlinuz和initrd.img四.重启计算机1.在如下图所示的界面下,按C键进入grub的命令行状态。
此时会出现grub>2.在grub>下输入kernel (hd0,1)/isolinux/vmlinuz然后按回车。
再输入ininrd (hd0,1)/isolinux/initrd.img然后按回车。
第29卷第6期2009年12月惠州学院学报(自然科学版)JOURNAL OF HU I Z HOU UN I V ERSI TY Vol 1291No 16Dec 12009收稿日期:2009-08-12作者简介:陈泽恩(1976-),男,广东惠东人,实验师,研究方向为操作系统,网络信息处理。
计算机实验室多系统实验考试环境构建陈泽恩(惠州学院 教育技术中心,广东 惠州 516000) 摘 要:由于计算机应用技术的快速普及,越来越多不同类型的专业实验和专业考试都已经无纸化,对于高校公共计算机试验室多样性的要求日渐提高。
然而要同时使各类的专业实验和无纸化考试的正常进行,多重操作系统并存势在必行。
但由于多个操作系统之间可以互相访问,这样对实验测试和无纸化考试都存在一定的影响,现提出利用L inux 下的Grub 多重操作系统启动管理器实现多个操作系统同时并存但又不互相影响的方法。
关键词:系统启动;多重操作系统启动管理器;Grub中图分类号:TP393 文献标识码:A 文章编号:1671-5934(2009)06-0082-05近年来,随着计算机应用技术在各行业的普及,学生迫切需要获得相应的证书来证明自身的能力,以寻找合适的工作机会。
因此目前在许多高校,计算机等级考试已经与大学英语四、六级一样成为学生必参加的考试之一,由于报名参加考试的人数逐年增加,大部分高校作为考点主要都把考试地点安排在设备相对集中的公共计算机实验室。
然而普通高校中的公共计算机实验室在承担各种教学任务的同时还承担各种不同类型的上机考试,普片的做法都是多种操作系统并存。
不过一般方式安装的多系统有很多不足:一是对硬盘的分区要求比较苛刻,其中第一个系统分区必须是主分区,多个系统都会在此分区保存一些系统文件,容易引起系统冲突,比如控制文件Boot .ini 很容易丢失或被修改,从而导致系统无法正常启动;二是并存的多系统是相互可见的,不同分区文件的误删除等都会造成其他系统无法正常启动;另外,如果其中一个系统被病毒感染,另外的系统也很难幸免。
编写一个可以用GRUB来引导的简单x86内核
在这篇文章中,我们将从零开始,动手编写一个可以用GRUB来引导的简单x86内核,该内核会在屏幕上打印一条信息,然后——挂起!
one-does-not-kernel
一个人写一个内核是一件简单的事情
X86机器是怎样启动的?
在我们思考怎样写一个内核之前,让我们先看一下x86机器从启动到把控制权交给内核的过程是怎样的:
x86 CPU在机器启动之后就会从地址 [0xFFFFFFF0]处开始执行,这个地址就是在32位寻址空间中的最后16个字节处,这里存放了一条跳转指令,会跳转到内存中BIOS代码起始处。
接着,cpu就开始开始执行BIOS代码块了,BIOS首先会在我们配置好的启动设备序列中,通过检查一个特定的魔数,找到第一个可以引导的设备。
一旦BIOS找到一个可以引导的设备后,它就会把该设备第一个扇区的代码复制到物理内存的[0x7c00]的位置,然后跳转到这个地址开始执行这一段代码,我们习惯把这一段代码叫作bootloader。
Bootloader会将内核代码加载到物理内存[0x100000]的位置,[0x100000]这个地址是所有x86机器宏内核代码的起始地址。
我们需要哪一些工具?
* 一个x86构架的计算机
* Linux
* NASM 汇编器
* GCC
* LD(GNU 连接器)
* GRUB。