编写一个可以用GRUB来引导的简单x86内核

合集下载

grub2-efi 制作

grub2-efi 制作

mkisofs -U -V "GRUB-efi-x86" -J -R -v -b boot/isocore.img -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/efi.img -o grubcore.iso grub-iso/
当前目录下生成了grub.efi文件。
制作一个软盘做为非光盘非模拟文件
dd if=/dev/zero of=efi.img bs=512 count=2880
mkfs.msdos efi.img
mkdir /mnt/fd0 && mount -o loop efi.img /mnt/fd0
cp efi.img /tmp/grub-iso/boot
mkisofs -U -v -J -R -e boot/efi.img -no-emul-boot -o grub-efi.iso grub-iso/
如果要做efi和bios两启动的光盘:
注:mkisofs for win32的版本没有-e (efi引导) 参数,所以要用oscdimg制作。。
如果要改变默认值可以生成grub.efi嵌入一个内置菜单文件来指定这些值。
内置菜单:
vim bootconfig.cfg
search -f -n --set=root /boot/x86_64-efi/grub.cfg
prefix=($root)/boot/x86_64-efi
configfile /boot/x86_64-efi/grub.cfg
make && make intall

使用Ubuntu原生的Grub2作为主引导,引导六个系统方法

使用Ubuntu原生的Grub2作为主引导,引导六个系统方法

使⽤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简要教程

grub简要教程

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)。

Gentoo-linux-2.6.34内核-手动编译详细教程

Gentoo-linux-2.6.34内核-手动编译详细教程

编译内核详解(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 的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系统

手动通过grub命令行启动Linux或者win系统

手动通过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”,是指第一块硬盘的第三个分区,这是一个主分区。

Grub命令详解

Grub命令详解
Grub命令详解
从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程式。相信LILO对于大家来说都是非常熟悉的。这次Red Hat Linux用GRUB代替LILO,可见GRUB大有过人之处。不过,相对于LILO来说,大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、术语、接口、命令及设置文件做个介绍,希望对大家有所帮助。
考虑下面的块列表:
0+50,100+25,200+1
上面这个块列表告诉GRUB使用一个文件,这个文件起始于分区的第一块,使用了第0块到第49块,第99块到124块,及第199块。
当使用GRUB装载诸如微软视窗系统这样采用链式装载方式的操作系统时,知道怎么写块列表是相当有用的。如果从第0块开始,那么能省略块的偏移量。作为一个例子,当链式装载文件在第一硬盘的第一个分区时,能使用下面的命名:
关于根和内核命令的更多信息,能参考后面的命令部分。
三、GRUB的接口
GRUB主要有三个强大的接口,他们提供了不同级别的功能。每个接口都允许用户引导操作系统,甚至能在处于GRUB环境下的接口之间移动。
菜单接口
如果GRUB是由Red Hat Linux的安装程式自动设置的,那么他默认的显示接口是菜单接口。在系统第一次启动后,一个操作系统或内核的菜单(事先已用他们各自的引导命令设置好)将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项,然后按回车键来引导他。如果不是这样,一个记时器可能已被设置,那么GRUB将启动装载那个默认的选项。
注意:
当GRUB的设置文件发生改动时,没有必要重新启动GRUB。所有的改动都能被自动地检测到。如果GRUB被重新启动,那么用户将退回到命令行方式的GRUB外壳下。

GRUB2及启动过程详解

GRUB2及启动过程详解

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的原理是很重要。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编写一个可以用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。

相关文档
最新文档