文档库 最新最全的文档下载
当前位置:文档库 › grub命令详解

grub命令详解

grub命令详解
grub命令详解

Grub命令详解

blocklist

用法: blocklist FILE

描述:

输出文件的块清单标记。

boot

用法: boot

描述:

引导已加载的操作系统或扇区链式加载器。

bootp

用法: bootp [--with-configfile]

描述:

通过BOOTP初试化网络设备。如果使用了`--with-configfile'参数,此命令将会试图去加载一个特定的配置文件。

cat

用法: cat FILE

描述:

显示指定文件的内容。

chainloader

用法: chainloader [--force] FILE

描述:

加载扇区链式加载器。若使用了--force参数, 则忽略该扇区的启动标识的有效性。

cmp

用法: cmp FILE1 FILE2

描述:

比较两个文件, 并且报告两者之间的不同的信息。

color

用法: color NORMAL [HIGHLIGHT]

描述:

改变菜单的颜色。Normal 用于指定菜单项的未选中时的颜色,HIGHLIGHT 则用于指定菜单项的被选中时的颜色。如果你未指定HIGHLIGHT 色,那么我们将使用NORMAL 的反色值。颜色值的格式是"FG/BG"。FG 和BG 是颜色的名称,如下:black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红), brown(棕), light-gray(亮灰),dark-gray(暗灰), light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红), light-magenta(浅红), yellow(黄) 和white(白)。注意,BG 的值只能是前八个。另外,若想使用闪烁的前景色,你在FG 前使用前缀"blink-" 即可。

configfile

用法: configfile FILE

描述:

将指定文件作为配置文件予以加载。

debug

用法: debug

描述:

打开/关闭除错模式。

default

用法: default [NUM | `saved']

描述:

把NUM 项菜单设为缺省值。

device

用法: device DRIVE DEVICE

描述:

声明BIOS驱动器对应的实际物理设备。这条命令只用于grub命令行。

portmap

用法: portmap prog_number vers_number

描述:

进行端口映射。

dhcp

用法: dhcp

描述:

通过DHCP初试化网络设备。

splashimage

用法: splashimage FILE

描述:

图形模式下载入背景图片文件。

foreground

用法: foreground RRGGBB

描述:

设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。

background

用法: background RRGGBB

描述:

设置图形模式下的背景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。注意他们都使用十六进制的值。

clear

用法: clear

描述:

清屏幕。

displayapm

用法: displayapm

描述:

显示APM BIOS 的相关信息。

displaymem

用法: displaymem

描述:

显示GRUB 所判断到的当前系统的内存分布,包括所有物理内存区域。

dump

用法: dump FROM TO

描述:

显示诸多文件的内容。注意,FROM 所指定的必须是一个GRUB 文件,TO 所指定的必须是一个OS 文件。

embed

用法: embed STAGE1_5 DEVICE

描述:

如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。如果是个FFS分区, 则可嵌入到该设备饿`引导代码'区中。并输出Stage 1.5所占的扇区数。

fallback

用法: fallback NUM

描述:

如果调用当前的菜单项时出现错误,则转移到NUM 项后重试

find

用法: find [--set-root] FILENAME

描述:

在所有分区上查找文件名, 并显示包含该文件的设备。如果设置了参数--set-root,则在找到第一个匹配后马上停止,并且把该设备设为根。

fstest

用法: fstest

描述:

切换文件系统的试验模式。

gfxmenu

用法: gfxmenu FILE

描述:

使用FILE 中的图形菜单。

geometry

用法: geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]

描述:

输出驱动器的相关信息。在grub壳程序中, 你可以用这条命令设置驱动器参数为任意值。如果你省略了总扇区数, 则该值缺省有其它参数决定。

halt

用法: halt [--no-apm]

描述:

关闭系统。如果APM(高级电源管理)功能存在,将使用APM BIOS 关闭系统,除非指定了`--no-apm' 选项。

help

用法: help [--all] [PATTERN ...]

描述:

显示内部命令的帮助信息。要查看所有命令的帮助,请使用`--all' 参数。

hiddenmenu

用法: hiddenmenu

描述:

隐藏菜单。

hide

用法: hide PARTITION

描述:

通过在分区类型上置隐藏标志,隐藏指定分区。

ifconfig

用法: ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]

描述:

指定IP 地址, 子网掩码, 网关和服务器地址。不带参数时,将显示当前的网络配置。

impsprobe

用法: impsprobe

描述:

通过一些循环操作,侦测出符合Intel 多处理器规范1.1/1.4 的CPUs,以便于发挥其更好的效能。

initrd

用法: initrd FILE [ARG ...]

描述:

加载Linux格式的初始化虚拟盘, 并设置必要的参数。

install

用法: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]

描述:

安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。如果使用了选项'd', STAGE1总是试图使用安装STAGE2的驱动器, 而不是启动盘。STAGE2将加载在指定地址上, 如果未声明地址, 则自动检测。如果使用了选项'p' 或给出了配置文件, 将修改STAGE2的第一个数据块, 修正实际Stage2启动时使用的配置文件位置。对于Stage 1.5, 该值为Stage 2的路径。如果安装的是Stage 1.5, 且指定了实际配置文件, 则将该配置文件路径写入Stage2中。

ioprobe

用法: ioprobe DRIVE

描述:

侦测指定设备的I/O 端口号。

kernel

用法: kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]

描述:

尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。使用此命令以前,内核所用到的模块应该被重新载入。参数--type 用于说明内核的类型,包括"netbsd", "freebsd", "openbsd", "linux", "biglinux" 和"multiboot"。参数--no-mem-option 用于说明不必自动传递Linux 的内存参数。

lock

用法: lock

描述:

如果用户未被认证,则终止命令的执行。

makeactive

用法: makeactive

描述:

将root 设备置为活动分区。当然,此命令只对PC 的硬盘主分区有效。

map

用法: map [--status] [--hook] [--unhook] [--rehook] [[--read-only] [--fake-write]

[--unsafe-boot] [--disable-chs-mode] [--disable-lba-mode] [--heads-per-cylinder=H]

[--sectors-per-track=S] TO_DRIVE FROM_DRIVE]

描述:

对设备进行映射。这对于扇区链式引导是很有用的功能,比如DOS。这里,目的驱动器(TO_DRIVE)可以是一个磁盘文件,即使用磁盘虚拟功能。注意,这要求磁盘文件是连续存放于分区中的。另外,若使用了--read-only 参数,该功能将使`磁盘'处于只读;若使用了--fake-write 参数,该功能将使`磁盘'处于假写,即可以"写入"数据,但是却并未记录到真实磁盘上; 若使用了--unsafe-boot 参数,该功能将使`磁盘'处于真实可写; 若使用了

--disable-chs-mode 参数,CHS 访问功能将被禁用; 若使用了--disable-lba-mode 参数,LBA访问功能将被禁用; H 和S 指定了虚拟磁盘的物理参数。若使用了--status, --hook, --unhook,--rehook 诸参数之一, 那么其它的命令行参数将被忽略。

md5crypt

用法: md5crypt

描述:

产生一个MD5 格式的密码。

module

用法: module FILE [ARG ...]

描述:

对多重启动影像, 加载启动模块文件(不处理该文件的内容, 用户必须自己确定核心的要求)。剩余参数作为`模快命令行`传递, 象`kernel'命令一样。

modulenounzip

用法: modulenounzip FILE [ARG ...]

描述:

与'module' 类似, 但是自动禁用了解压缩。

pager

用法: pager [FLAG]

描述:

没有参数时,切换页模式。如果使用了FLAG 参数,那么它为`on' 时为开启, 为`off' 时为关闭。

用法: partnew PART TYPE START LEN

描述:

创建一个新的主分区。START 为起始扇区号,LEN 为其包含的扇区数,TYPE 为其分区类型。

parttype

用法: parttype PART TYPE

描述:

改变指定分区(PART)的分区类型(TYPE)。

password

用法: password [--md5] PASSWD [FILE]

描述:

设置密码。当其处于菜单文件的首项时,将禁用所有的交互式菜单编辑功能,包括编辑菜单项(`e`)/进入命令行(`c`)。当正确输入密码(由PASSWD指定)后,载入新的菜单文件(由FILE 指定)。如果你没有指定FILE 项,那么上述被禁用的功能将被启用了。当然,你也可以将此命令用到某个菜单项里,用以提高系统安全性。参数--md5 说明密码(PASSWD)是使用md5crypt 加密的。

pause

用法: pause [MESSAGE ...]

描述:

终止命令的运行,并给出一段信息。任意键按下后,将继续。

quit

用法: quit

描述:

从GRUB 命令行中退出。

rarp

用法: rarp

描述:

用RARP 初始化网络设备。

read

用法: read ADDR

描述:

从内存的指定位置读取一个32-bit 的值,并以十六进制形式显示出来。

reboot

用法: reboot

重启系统。

fontfile

用法: fontfile FILE

描述:

指定中文字体文件,并切换到简体中文显示方式。

scdrom

用法: scdrom [--install], [--bootcd]

描述:

寻找系统的第一个CD-ROM 驱动器,然后为其分配一个驱动器号以备后续使用(--install)。或者,用该驱动器中的可引导光盘启动系统。(--boot)。

run

用法: run FILE

描述:

运行一个为光盘启动而设计的引导文件(非模拟方式的)

root

用法: root [DEVICE [HDBIAS]]

描述:

设置根分区。设置根分区为指定设备(DEVICE), 然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递, 扇区链式启动方式要求这样)。BSD 驱动类型用于启动BSD 的核心启动), 和确定BSD 子分区所在的PC 分区。可选的磁盘偏移参数, 用于BSD 核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在SCSI盘上, 那么磁盘偏移就为1。

rootnoverify

用法: rootnoverify [DEVICE [HDBIAS]]

描述:

类似`root'指令, 但不测试安装该分区。这用于有些系统装在GRUB 能访问的磁盘区之外, 但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。

savedefault

用法: savedefault

描述:

将当前项设置为默认的引导项。

serial

用法: serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD]

[--parity=PARITY] [--stop=STOP] [--device=DEV]

初始化一个串口设备。UNIT 用于指定要使用的串口设备(如,0 == COM1); PORT 用于指定端口号; SPEED 用于指定通讯的数率; WORD 为字长; PARITY 为奇偶类型(取`no',

`odd' 和`even' 之一的值。); STOP 是停止位的长度值; 选项--device 仅用于命令行模式,用以指定tty 设备的文件名。默认值是这样的,COM1, 9600, 8N1。

setkey

用法: setkey [TO_KEY FROM_KEY]

描述:

改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键: escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) , caret(^), ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_), equal(=), parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({), bracketright(]), braceright(}), enter(回车), control(控制), semicolon(;), colon(, quote('), doublequote("), slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,), less(<), period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写), Fx(功能键) 和delete(删除)。

setup

用法: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]

描述:

自动安装GRUB. 这条命令使用更灵活的install命令将GRUB安装到指定设备上。如果给出了映象设备,将在该设备寻找GRUB,否则使用缺省的根设备。根设备可用root指令指定。如果你确认系统的BIOS 应该支持LBA 模式, 但是GRUB 却没有工作于该模式, 则请

指定`--force-lba' 参数。如若你在命令行中已安装了一次GRUB 可是,你却无法卸载GRUB 程序所在的分区,请指定`--stage2' 参数。

terminal

用法: terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]

描述:

选择一个终端。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了, 那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 参数--dumb 用以指定一个哑终端, 否则即为vt100 兼容型; 若使用了--no-echo 参数, 屏幕上将不会回显输入的字符; 若使用了--no-edit 参数, the BASH-like 的编辑功能将被禁用; 若使用了--timeout 参数, 该命令将等待数秒钟(由SECS指定); 可使用--lines 指定最大的行数; 可使用--silent 选项关闭消息显示。

terminfo

用法: terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]

[--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]

指定终端的功能。如果此终端为vt100 兼容型的,则可指定换码顺序(即使用\e 代表ESC, ^X 代表控制码); 在未给任何参数的情况下,将给出当前配置信息。

testload

用法: testload FILE

描述:

以多种不同的方式读取文件(由FILE指定)的整个内容,并予以比较,以测试文件系统的代码。输出看起来会有点儿混乱,但是,如果没有错误的话,`i=X, filepos=Y' 里的X 和Y 最后必得相等。如果测试即告成功,下一步即可试图载入内核了。

testvbe

用法: testvbe MODE

描述:

测试所指定(MODE)的VBE 模式。

tftpserver

用法: tftpserver IPADDR

描述:

指定TFTP 服务器的IP 地址。

timeout

用法: timeout SEC

描述:

设置在自动启动缺省菜单前所等待的秒数。

title

用法: title [NAME ...]

描述:

命名菜单项。

unhide

用法: unhide PARTITION

描述:

通过清除隐藏标志,解除指定分区(PARTITION)的隐藏。

uppermem

用法: uppermem KBYTES

描述:

强制指定仅有(KBYTES) KB 的上位内存。任何系统的地址变换将被取消。

vbeprobe

用法: vbeprobe [MODE]

描述:

侦测VBE 的信息。如果指定了一个模式(MODE 不为空),则仅显示其信息。

**********************************************************

ubuntu下我经常

find /grub/stage1 (查找grub安那个分区了)

root (hdX ,Y )引导第x硬盘y分区

setup (hdx)安grub到x硬盘

quit

安装redhat linux时会提示安装引导程序,如果选择grub为引导程序,建议把grub

安装到硬盘的引导扇区MBR.grub 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT、2000、XP。

(二)grub的配置

一旦选择了grub为引导程序,下面我们来了解一下它的配置。/boot/grub/grub.conf 是grub产生一个引导选择菜单以及设置一些选项。下面是我的grub.conf:

#==========例子开始========== # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,6) # kernel /v mlinuz-version ro root=/dev/hda10 # initr d

/initrd-version.img #boot=/dev/hda default=0 timeout=10 splashimage=(hd0,6)/grub/splash.xpm.gz # --> Redhat Linux 8.0 <-- title Red Hat Linux (2.4.18-14) root (hd0,6) kernel /v mlinuz-2.4.18-14 ro root=LABEL=/ initr d /initrd-2.4.18-14.img # --> Microsoft Window s XP <-- title Microsoft Window s XP rootnoverify (hd0,0) chainloader +1 #===========例子结束==========

配置选项解释:

以"#"开头的是注释行。我这里有两个操作系统,分别是Red Hat Linux和Microsoft Windows XP。其中,timeout标识默认等待时间,我这设置为10秒,超过10秒用户还没作出选择的话,将自动选择默认的操作系统(我这里默认的是Redhat linux 8.0)

默认的操作系统是由default一项来控制的,default后的数字表明第几个是默认的,

这里0表示第一个,1表示第二个。

所以如果你想修改默认的操作系统,就修改default后的数字。title一项是设置操作系统的名称,grub不支持中文(有点遗憾)。splashimage一项指定grub界面的背景图片,有兴趣的朋友可以修改grub的背景。

root (hd0,6)标识从第一个硬盘,第7个分区来启动搜索引导内核。注意这儿的root 与linux的root分区不同,此root非彼root也!grub的硬盘标识方法与linux的有点不同。在linux中第一个主分区为hda1,第二个主分区为hda1,第一个逻辑分区为hda5,而在grub中是以(hdx,y)来标识的,如第一个主分区为(hd0,0)第一个逻辑分区为(hd0,1)依此类推。

所以这儿root后面的是你的/boot所在分区标识。知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是ke

rnel的工作。kernel /vmlinuz-2.2.18-14 ro

root=LABEL=/。说明/boot/vmlinuz-2.2.18-14就是要载入的内核。后面的都是传递给内核的参数。

ro是以readonly的意思。注意我这里内核前面的路径是"/",因为我的boot单独分了一个区,如果你没有为boot单独分区,那么内核前面的路径就是"/boot"。initrd用来初始的linux image,并设置相应的参数。

再来看一看windows的定义段吧。这里,我添加了一项来引导 WindowsXP。要完成此操作,GRUB使用了"链式装入器"(chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 winXP 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。

这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。如果你在计算机中装有win98,winme,win2k,winxp的话,chainloader会把引导权交与win的NTLoader来引导。

(三)Grub启动盘的制作

要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB 文件复制到该文件系统,最后运行 "grub" 程序,它将负责设置软盘的引导扇区。

将一张空盘插入 1.44MB 软驱,输入:

# mke2fs /dev/fd0 创建了ext2 文件系统后,需要安装该文件系统:# mount /dev/fd0 /mnt/floppy 现在,需要创建一些目录,并将一些关键文件(原先安装GRUB 时已安装了这些文件)复制到软盘:# mkdir /mnt/floppy/boot # mkdir/mnt/floppy/boot/grub # cp /boot/grub/stage1 /mnt/floppy/boot/grub # cp /boot/grub/stage2 /mnt/floppy/boot/grub

再有一个步骤,就能得到可用的引导盘。

在linux bash中,从root用户运行"grub",该程序非常有趣并值得注意,因为它实际上是GRUB引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行,您仍可以运行GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。在 grub> 提示符处,输入:

grub> r oot (fd0) grub> setup (fd0) grub> quit

现在,引导盘完成了。

(四)恢复被windows破坏的grub

如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR 中的grub,这时需要恢复grub。

1.把linux安装光盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。

2.等安装界面出来后,按F4键,也就是linux rescue模式。

3.一系列键盘以及几项简单的配制,过后就“继续”了这个过程,这里不说了,比较简单。

4.然后会出现这样的提示符:

sh#

5.我们就可以操作GRUB了。输入grub:

sh#grub

会出现这样的提示符:

grub>

我们就可以在这样的字符后面,输入:

grub>root (hdX,Y) grub>setup (hd0)

如果成功会有一个successful......

这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。

(五)用NTLoader来引导linux

如果你在安装linux时没有选择安装grub,不必着急,现在我们来看看如何在安装linux后安装grub。并用windows的NTLoader来引导linux。

1. 安装grub

我用的grub是Redhat8.0带的grub安装包: grub-0.92-7.rpm

安装: rpm -ivh grub-0.92-7.rpm

其他安装方式也一样,只要你安装上grub就行了。RH8缺省用的grub, 1、2步骤可以省了。

2. 建立grub的环境

cp /usr/share/grub/i386-pc/* /boot/grub

3. 生成grub的配置文件/boot/grub/menu.conf

按照上面所讲的grub.conf来生成一个配置文件。

注意了,这里我的linux在/dev/hda4,所以menu.conf那些分区位置为(hd0,3),

你的可能不一样了,不能完全照着"画瓢"噢! 下面第3步install的中的分区位置也应该和你的系统一致。

安装grub至Linux分区boot

将grub的stage1安装到/dev/hda4的boot扇区(hd0,3)。过程如下:

/sbin/grub (运行grub) grub> install (hd0,3)/boot/grub/stage1 d (hd0,3) (hd0,3)/boot/gr ub/stage2 p (hd0,3)/boot/grub/menu.conf

(注意,上面"grub>"为grub的提示符,其后内容写在一行上。)

4. 取得grub的boot信息

过程如下:

dd if=/dev/hda4 of=/grub.lnx bs=512 count=1

这样得到grub的引导信息,只要用NT Loader来加载它就行了。

5. 将上面得到的grub.lnx弄到Windows的C盘根目录下,可以先把grub.lnx弄得软盘上,然后启动windows,拷贝到C:\; 情况允许也可以直接在Linux下拷贝到C:了。我的C盘(即设备/dev/hda1)为FAT32,可以直接从Linux下弄过去了。如下:

mount -t vfat /dev/hda1 /mnt/c cp /grub.lnx /mnt/c umount /mnt/c

6. 修改NT Loader的boot.ini

在其中加入一行: C:\grub.lnx="Redhat Linux - GRUB"

加入后boot.ini的内容如下:

[boot loader] timeout=15 default=C:\boot.lnx [operating systems] multi(0)disk(0)rdisk(0)partition(1)\

WINDOWS="Microsoft Window s XP P rofessional" /fastdetect [VGA mode]" /basevideo /sos

C:\grub.lnx="Redhat Linux - GRUB"

可以用NT Loader加载Linux了,其实上面过程基本上和用NT Loader加载LILO一样。其基本思想就是用NT Loader来加载LILO或grub的引导区(grub.lnx),其中的关键就是LILO或grub的引导区的获取。

(六)活用grub的交互功能

grub具有强大的交互功能。学会了将会使你受益非浅!

1.grub没有显示菜单怎么办?

当开机后进入grub界面但没了菜单,只剩下一个grub>提示符,怎么启动呢?别急,看下面:

grub>cat (hd0,6)/boot/grub/grub.conf (为了看参数) grub>root (hd0,6) grub>kernel (hd0,6) /v mlinuz-2.4.18-14 ro root=LABEL=/ grub>initr d (hd0,6) /initrd-2.4.18-14.img grub>boot

启动了吧!以上有些数字要根据你的实际情况更改。以上这个方法也可以用于测试新编译的内核。

2.进入单用户模式。

有时不小心把root用户密码忘了,只能进入单用户模式来重新设置root密码。方法如下:开机进入grub界面,按C进入命令行模式,然后按照上面的方法进行,只是在第三步要在后面加入single参数。

本人从硬盘用GRUB启动iso是成功的。也可从U盘启动iso(非量产)。

最新grub4dos 支持ISO 的仿真。无论是no-emulation 可启动模式,还是floppy or hard disk emulation 可启动模式的ISO 文件,都支持。这说明,grub启动iso还是有条件的。用法示例:

title 启动myiso.iso

map (hd0,0)/myiso.iso (hd32)

map --hook

chainloader (hd32)

boot

说明,(hd32) 就等于(128 + 32),也就是(0xA0),当用map 仿真时,如果用户指定的磁盘号码大于或者等于0xA0,那么map 命令就认定这是ISO 仿真。也就是说,此时虚拟磁盘的扇区大小是2048 字节(只有这样才能作为光盘使用,这是“可启动光盘规范”所规定的),而不是通常软盘和硬盘中的512 字节扇区大小.

STM32启动文件详解

STM32启动文件详解 (2012-07-28 11:22:34) 转载▼ 分类:STM32 标签: stm32 启动 在<>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器。比如,如果你用的 STM32F103ZET6,而启动文件用的是STM32F10x.s的话,你可以正常使用串口1~3的中断,而串口4和5的中断,则无**常使用。又比如,你TIM1~4的中断可以正常使用,而5~8的,则无法使用。 而在固件库里出现3个文件 startup_stm32f10x_ld.s startup_stm32f10x_md.s startup_stm32f10x_hd.s 其中,ld.s适用于小容量产品;md.s适用于中等容量产品;hd适用于大容量产品; 这里的容量是指FLASH的大小.判断方法如下: 小容量:FLASH≤32K 中容量:64K≤FLASH≤128K 大容量:256K≤FLASH ;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x High Density Devices vector table for MDK-ARM ;* toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system and also configure the external ;* SRAM mounted on STM3210E-EVAL board to be used as data ;* memory (optional, to be enabled by user) ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM3 processor is in Thread mode,

修复更新grub2系统引导

修复更新grub2系统引导 一.修复 如果重装系统或者引导系统崩溃无法进入系统开机引导项从而无法进入以装系统,以Ubuntu Grub2引导为例,详细写一下如何修复之前的系统引导。 (以下说明均以Ubuntu系统为例,其他系统大同小异) 1.放入系统安装盘或这插入刻录好的系统安装U盘,进入系统安装选项,选择试用选项! 2.选择适用之后,进入Ubuntu图形界面,打开终端。 3.选择Ubuntu安装磁盘,如果不确定具体在哪个磁盘,可以用命令查看一下 [plain] sudo fdisk -l 4.挂载Ubuntu系统安装磁盘(我的是在第8磁盘,故为sda8) [plain] sudo mount /dev/sda8 /mnt 5.开始恢复grub2系统引导 [plain] sudo grub-install --root-directory=/mnt/dev/sda 6.执行命令之后,如果没有报错,则恢复成功,重启即可。 二.更新 恢复之后是之前的系统引导界面,如果新安装的系统没有在界面上显示,那么可以进入Ubuntu系统,进行grub2更新。

打开终端,输入 [plain] sudo update-grub2 成功的话,将会出现更新后找到的磁盘上所有系统引导的记录。(以我自己的为例) [plain] hugo@hugo-HP:~$ sudo update-grub2 [sudo] password for hugo: Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.5.0-26-generic Found initrd image: /boot/initrd.img-3.5.0-26-generic Found linux image: /boot/vmlinuz-3.5.0-25-generic Found initrd image: /boot/initrd.img-3.5.0-25-generic Found linux image: /boot/vmlinuz-3.5.0-17-generic Found initrd image: /boot/initrd.img-3.5.0-17-generic Found memtest86+ image: /boot/memtest86+.bin Found Windows 8 (loader) on /dev/sda1 Found CentOS release 6.4 (Final) on /dev/sda3 Found Mac OS X on /dev/sda9 done 之后重启即可。 update-grub这个是Ubuntu专用的吧,其它发行版不一定有,通用的是:sudo grub-mkconfig -o /boot/grub/grub.cfg

电脑启动过程详解!!!

电脑启动过程详解 1.当按下电源开关时,电源就开始向主板和其它设备供电,这时电压还不太稳定,主板上的控制芯片组会向CPU发生并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在些刻不会马上执行指令,当芯片组检查到电源已经开始稳定供电了(当然从不稳定,到稳定的过程只是一瞬间的事情)它便撤去RESET信号(如果是手工按下电脑面板上的RESET按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号)CPU马上从地址FFFF0H处开始执行指令,这个地址实际在系统BIOS的地址范围内, 无论是Award BIOS,还是AMI BIOS,在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。 2.系统BIOS的启动代码首先要做的事情就进行POST(Power-On Self Test,加电后自检),POST的主要任务是检查系统中一些关键设备是否存在和是否正常工作,例如内存和显卡等设备.由于POST是最早进行的检查过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了些致命错误,例如没有找到内存或内存有问题 (此时只会检查640KB常规内存),那么系统BIOS就会直接控制嗽叭发生声音来报告错误,声音的长短和次数代表了错误的类型.在正常情况下,POST过程进行的非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。 3.接下来系统BIOS将查找显卡的BIOS,前面说过,存放显卡BIOS的ROM芯片的超始地址通常设在 C0000H,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码来初始化显卡,此时多数显卡都在屏幕上显示出一些初始化信息,介绍生产厂商,图形芯片类型等内容,不过这个画面几乎是一闪而过,系统BIOS接着会查找其它设备的BIOS程序,找到之后同样会调用这些BIOS内部的初始化代码来初始化相关的设备。 4.查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BISO的类型,序列号和版本号等内容. 5.接着系统BIOS将检查和显示CPU的类型和工作频率,然后开始测试所有RAM,并同时在屏莫显示内存测试的速度,用户可以在CMOS设置中自行决定使用简单耗时少或详细耗时多的测试方式. 6.内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘,CD-ROM,串口,并口,软驱等设备,另外绝大数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数,硬盘参数和访问模式等. 7.标准设备检查完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断,DMA通道和I/O端口等资源。 8.到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其它概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。 9.接下来系统BIOS会更新ESCD(Extended system configuration data,扩展系统配置数据.)ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS之中,通常ESCD数据只在系统配置发生改变后才会更新,所以不是每次启动电脑时都能够看到"updata ESCD … Success"这样的信息, 不过某些主板的系统BIOS在保存ESCD数据时使用了与widnwos 9x不相同的数据格式,于是widnwos 9x在启动过程中会把ESCD数据修改成自己的格式,但在下一次启动时,既使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式修改回来,如此循环,将会导致在每次启动电脑时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。 10.ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软件,硬件或光驱启动,以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的引导记录,而分区引导记录将负责读取并执行 IO.SYS这是DOS和widnows 9x的IO.SYS(或NT的NTLDR)首先要初始化一些重要的系统数据,然后将显示出我们熟悉的蓝天白云,在这幅画面之下,widnwos 将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作. 上面介绍的便是电脑在打开电源开关(或按RESET)进行冷启动时所要完成的各种初始化工作,如果在DOS 下按Ctrl Alt DEL组合键,(或从windows中选择重新启动电脑)来进行热启动,那么POST过程将被跳过去,

grub2引导光盘镜像的制作

grub2引导光盘镜像的制作 这个东东很简单,但差不多还是花了一两天时间。关键是引导不起来,最后找出了原因,在制作ISO的时候出错了。制作前最好su得到管理员权限。 一般我们都是有win系统的,那么可以vmware虚拟机安装ubuntu,再用它制作即可,至于导出方法,自己百度 首先用ubuntu1404的版本为例,只是与ubuntu1204的目录有点区别ubuntu1404的grub2已经是2.02的版本的,ubuntu1204还是1.99 1,复制模块文件等 su 输入管理员密码 cp -a /usr/lib/grub/ ./ 制作文件夹到当前目录 mv grub grub2 改名为grub2 grub2/grub.cfg这个是配置文件,可以根据需要更改,最好是改一下

2,制作一个bootcfg的文件 可用vi bootcfg search -f -n --set=root /grub2/grub.cfg configfile /grub2/grub.cfg set color_normal=light-gray/black set pager=1 按ESC :wq 也可用gedit bootcfg,最后记得保存就行了 3,定制启动内核 grub-mkimage -d /usr/lib/grub/i386-pc/ -p /grub2/ -c bootcfg -o core.img -O i386-pc biosdisk iso9660 search configfile part_msdos fat ntfs ext2 -d 指定定制内核时的要用的目录 -p 指定在引导时要用到的目录,包含模块点 -c 指定一些简单配置的文件 -o 输出路径及文件名 -O 指定格式i386-pc biosdisk iso9660指光盘文件系统一定要 4,制作光盘引导文件

keil下C51启动代码详解

由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下: ;--------------------------------------------------- ;startup.A51: 用户上电初始化程序 ;---------------------------------------------------- ; ;使用以下EQU命令可定义在CPU复位时需要用0进行初始化的内存空间 ; ;IDA TA存储器的空间的绝对起始地址总是零 IDA TALEN EQU 80H ;需用0进行初始化的IDA TA存储器空间的字节数 ; XDA TASTART EQU 0H ;XDA TA存储器空间的绝对起始地址 XDA TALEN EQU 0H ;需用0进行初始化的XDA TA存储器的空间字节数 ; PDA TASTART EQU 0H ;PDA TA存储器的空间的绝对起始地址 PDA TALEN EQU 0H ;需用0进行初始化的PDA TA存储器的空间字节数 ;注意:IDA TA存储器的空间在物理上包括了8051单片机的DA TA和BIT存储空间 ;至少要保证与C51编译器运行库有关的存储器的空间进行0初始化 ; ;再入函数模拟初始化 ;----------------------------------------------------------- ;以下用EQU指令定义了再入函数模拟堆栈指针的初始化 ; ;使用SMALL存储器模式时再入函数的堆栈空间 IBPSACK EQU 0 ;使用SMALL存储器模式再入函数时将其设置成1 IBPSTACKTOP EQU 0FFH+1 ;将堆栈顶设置为最高地址加1 ; ;使用LARGE存储器模式时再入函数的堆栈空间 XBPSTACK EQU 0 ;使用LARGE存储器模式再入函数时将其设置成1 XBPSTACKTOP WQU 0FFFFH+1 ;将堆栈顶设置为最高地址加1 ; ;使用COMPACT存储器模式时再入函数的堆栈空间 PBPSTACK EQU 0 ; 使用COMPACT存储器模式再入函数时将其设置成1 PBPSTACKTOP WQU 0FFFFH+1 ;将堆栈顶设置为最高地址加1 ;;---------------------------------------------------- ;使用COMPACT存储器模式时,64KB X DA TA存储器空间的分页定义 ; ;以下用EQU指令定义PDA TA类型变量在XDA TA存储器空间的页地址 ;使用EQU指令定义PFAGE时必须与L51连接定位器PDA TA指令的控制参数一致 ; PPAGEENABLE EQU 0 ;使用PDA TA类型变量时将其设置成1 PPAGE EQU 0 ;定义页号 ; ;------------------------------------------------ NAME ? C_STARTUP ;模块名为? C_STARTUP ? C_51STARTUP SEGMENT CODE ;代码段 ? STACK SEGMENT IDA TA;堆栈段 RSEG ? STACK ;堆栈 DS 1 EXTRN COE(? C_START) ;程序开始地址

grub2基础教程-修订版

grub2基础教程-修订版 smallapple 目录 一、grub2新特性 二、grub2安装与启动 三、grub2配置文件详解 四、脚本修改 五、使用grub2常见错误及修复方法 一、grub2新特性 1、grub2和grub有很多不同的地方: a)图形接口 b)使用了模块机制,通过动态加载需要的模块来扩展功能 c)支持脚本语言,例如条件判断,循环、变量和函数 d)支持rescue模式,可用于系统无法引导的情况 e)国际化语言。包括支持非ASCII的字符集和类似gettext的消息分类,字体,图形控制台等等 f)有一个灵活的命令行接口。如果没有配置文件存在,GRUB会自动进入命令模式 g)针对文件系统、文件、设备、驱动、终端、命令、分区表、os loder的模块化、层次化、基于对象的框架 h)支持多种文件系统格式 i)可访问已经安装的设备上的数据 j)支持自动解压 2、设备的命名 grub2同样以fd表示软盘,hd表示硬盘(包含IDE和SCSI硬盘)。设备是从0开始编号,分区则是从1开始,主分区从1-4,逻辑分区从5开始,而grub分区编号是从0开始的。下面给出几个例子 : (fd0):表示整个软盘 (hd0,1):表示BIOS中的第一个硬盘的第1个分区 (hd0,5)/boot/vmlinuz:表示BIOS中的第一个硬盘的第一个逻辑分区下的boot目录下的vmlinuz文件 二、grub2安装与启动 1、安装ubuntu9.10时,grub默认安装在第一硬盘(hd0)的mbr,其实就是把引导文件boot.img写入硬盘的mbr,当然,用户也可以选择不写入硬盘mbr而是写入linux分区的引导扇区。启动时根据mbr所提供信息找到启动分区后,加载分区内的grub核心文件core.img和配置文件grub.cfg,进入选择菜单画面,在菜单画面,按上下箭号选择需要系统菜单项,按Enter进入选项。

grub2最新全面学习资料

Grub 2 使用简介 Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能: 1、模块化设计: 不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除 2、支持多体系结构 Grub 2可支持PC(i386), MAC(powerpc)等不同的体系机构,而且支持最新的EFI 架构 3、国际化的支持 Grub 2 可以支持非英语的语言 4、内存管理 Grub 2 有真正的内存管理系统。 5、脚本语言 Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。 当然,Grub 2正处在开发阶段,因此以上的某些功能可能现阶段还不是很完善。安装和使用 Grub 2的内核是符合multiboot标准的,因此可以在Grub中引导。 1、下载 https://www.wendangku.net/doc/cd15108673.html,/grub2.zip 解压到某个FAT分区的根目录,会生成/boot/grub目录,Grub 2的文件便在该目录下。 2、修改 /boot/grub/grub.cfg 这是Grub 2的配置文件,它的格式不同于menu.lst,以下是一个例子: set timeout=20 set default=0 menuentry "Chainload First Part" { set root=(hd0,1) chainloader +1 } menuentry "Load Linux at Second Part" { set root=(hd0,2) linux /vmlinuz root=/dev/hda2 initrd /initrd } 如果你熟悉Grub,应该可以看明白里面的内容。要注意的是:

电脑启动过程详解

电脑从按完开关加电开始直到进入到系统桌面的整个过程详解本文以Windows2000/xp和Windows Vista/7两个内核做讲解 电脑从加电到进桌面可以分为两大部分: 无论是Windows2000/XP还是Windows Vista/7,在硬件自检方面都是想同的,不同的是在系统加截。 硬件部分: 在讲解前,我们先来了解几个概念: BIOS:即“Basic Input/Output System”(基本输入输出系统),它是一组被“固化”在计算机主板上的一块 ROM 中直接关联硬件的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括系统 BIOS(主板 BIOS).其它设备 BIOS(例如 IDE 控制器 BIOS、显卡 BIOS 等)其中系统 BIOS 占据了主导地位.计算机启动过程中各个 BIOS 的启动都是在它的控制下进行的。 CMOS:即“Complementary Metal-Oxide-Semiconductor”(互补金属氧化物半导体),它本是计算机系统内一种重要的芯片,保存了系统引导最基本的资料。 内存地址:我们知道,内存空间的最基本单位是位,8 位视为一个字节,即我们常用的单位 B,内存中的每一个字节都占有一个地址(地址是为了让 CPU 识别这些空间,是按照 16 进制表示的),而最早的 8086 处理器只能识别 1MB(2 的 20 次方 B)的空间,这 1MB 内存中低端(即最后面)的 640KB 就被称为基本内存,而剩下的内存(所有的)则是扩展内存。这 640KB 的空间分别由显存和各 BIOS 所得。 我们来看一下硬件部分的流程图:

GRUB2启动代码详解

GRUB2的介绍 目前Grub1已经停止开发了,不再增加新的功能,所有的开发都转移到Grub2上了,Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能:1.模块化设计 不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除。 2.支持多体系结构Grub 2可支持PC(i386), MAC(powerpc)等不同的体系结构,而且支持最新的EFI架构。 3.国际化的支持Grub 2 可以支持非英语的语言。 4.内存管理Grub 2 有真正的内存管理系统。 5.脚本语言Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。 当然,Grub 2正处在开发阶段,因此以上的某些功能可能现阶段还不是很完善。 如果你熟悉Grub2,应该可以看明白里面的内容。要注意的是: a、timeout, default等参数用变量来储存 b、菜单项由menuentry定义 c、第1个分区是(hd0,1)而不是(hd0,0) 理论的东西说多了大家估计也晕,举个简单的例子:在grub1中,要改变启动背景的时候只能选择支持640X480分辨率并且格式也只能是.xpm的图片,分辨率稍微大点的图就显示不出来了,但grub2不存在这个问题,它有更绚丽的菜单界面,grub2默认.png .tga .jpeg等很多种格式的图片都支持,而且支持的图片分辨率也更大。

GRUB2启动代码分析 # # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then #如果“$prefix/grubenv”目录不为空 load_env #从grubenv文件中加载环境变量 fi set default="0" #启动第1项# if [ ${prev_saved_entry} ]; then #如果prev_saved_entry的值不为空 set saved_entry=${prev_saved_entry} #将saved_entry的值设置成变量prev_saved_entry的值。 save_env saved_entry #将变量saved_entry保存到grubenv文件中。 set prev_saved_entry= #将prev_saved_entry的值设置为空 save_env prev_saved_entry #将prev_saved_entry保存到grubenv文件中 set boot_once=true #将boot_once的值设置为真(貌似是为了标志已经设置过启动的相关环境变量了)fi function savedefault {

-Linux操作系统基础教学大纲

Linux操作系统基础 Foundation of Linux Operation System 适用范围:2013本科人才培养方案 课程编号: 学分:2 学时:32(其中:讲课学时:20 实验学时:12) 先修课程:计算机文化概论 适用专业:网络工程 建议教材:《Linux实用教程》陈博等人民邮电出版社2008年10月 开课单位:软件学院 一、课程的性质与任务 课程性质:本课程是网络工程专业网络安全与攻防方向的一门专业方向任选课,Linux及应用是计算机科学专业的一门专业课程。 课程任务:本课程的目的和任务是使学生全面地了解和掌握Linux系统的基本概念、原理及应用技术、以及适应社会对Linux操作与管理人员的需求。通过本门课程的学习,能够为以后从事软件编程、分布式处理及系统服务部署等不同应用领域的研究打下深厚的理论基础。 二、课程的基本内容及要求 (一)认识Linux系统 1. 课程教学内容: (1)Linux系统简介 (2)Linux系统的特点和组成 (3)Linux版本介绍 (4)Fedora Core系统概述 2. 课程重点、难点 重点:了解Linux操作系统的发展历程,改系统的特点和组成。 难点:Linux操作系统与Window操作系统的异同。 3. 课程教学要求: (1)了解计算机计算机操作系统的发展过程; (2)理解Linux操作系统与UNIX系统的区别,理解GUN计划的内容; (3)掌握Linux各个系统的版本及其优劣等。

(二)Fedora 系统的安装和删除 1. 课程教学内容: (1)准备安装Linux操作系统 (2)分区的概念和分区的类型。 (3)硬盘的类型。 (4)安装Linux的步骤及安装后的初始化工作。 (5)删除MBR中GRUB引导程序。 (6)删除Linux分区。 2. 课程重点、难点 重点:如何对硬盘分区,如何命名分区,分区的格式化等。 难点:如何理解分区的编号及文件系统的建立等。 3. 课程教学要求: (1)本章的学习目的是使学生能够自己安装一个操作系统,合理分区,并了解Linux下分区的概念。了解如何建立交换分区。 (2)理解分区文件的命名描述; (3)掌握安装Linux的步骤及安装后的初始化工作,掌握如何删除MBR中的GRUB分区程序。 (三)Linux图形化界面 1. 课程教学内容: (1)登录、注销和关闭系统 (2)GNOME基本使用 (3)系统设置 (4)Fedora系统的应用软件使用 2. 课程重点、难点: 重点:掌握如何正常登录、注销和关闭系统的几个命令。 难点:了解在如何在GNOME图形界面中如何复制、黏贴、删除文件等。 3. 课程教学要求: (1)了解GNOME的初步使用,系统的各种基本设置; (2)理解硬盘分析器、系统日志等内容。 (3)掌握在GNOME的操作使用。 (四)Linux字符界面操作 1. 课程教学内容:

uboot启动代码详解

·1 引言 在专用的嵌入式板子运行GNU/Linux 系统已经变得越来越流行。一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。固化在固件(firmware)中的boot 代码,也就是Boot Loader,它的启动通常分为两个阶段。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统,root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI 有:MicroWindows 和MiniGUI 等。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC 的体系结构我们可以知道,PC 机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR 中的OS Boot Loader(比如,LILO 和GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘MBR 中的Boot Loader 读到系统的RAM 中,然后将控制权交给OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注,有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader 来完成。比如在一个基于ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader 程序。·2 bootloader简介 简单地说,Boot Loader (引导加载程序)就是在操作系统内核运行之前运行的一段小程序,它的作用就是加载操作系统, 实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。如上图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootloader实现。 2.1 Boot Loader 所支持的CPU 和嵌入式板 每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。除了依赖于CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。 2.2 Boot Loader 的安装媒介(Installation Medium)

stm32启动文件详解

STM32启动文件详解 一、启动文件的作用 1.初始化堆栈指针SP; 2.初始化程序计数器指针PC; 3.设置堆、栈的大小; 4.设置异常向量表的入口地址; 5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM); 6.设置C库的分支入口__main(最终用来调用main函数); 7.在版的启动文件还调用了在文件中的SystemIni()函数配置系统时钟。

二、汇编指令

三、启动代码 ----- 栈 Stack_Size EQU 0x00000400 ; 栈的大小 AREA STACK, NOINIT, READWRITE,ALIGN=3 Stack_Mem SPACE Stack_Size ; 分配栈空间 __initial_sp ; 栈的结束地址(栈顶地址) 分配名为STACK,不初始化,可读可写,8(2^3)字节对齐的1KB空间。 栈:局部变量,函数形参等。栈的大小不能超过内部SRAM大小。 AREA:汇编一个新的代码段或者数据段。STACK段名,任意命名;NOINIT表示不初始化;READWRITE可读可写;ALIGN=3(2^3= 8字节对齐)。 __initial_sp紧挨了SPACE放置,表示栈的结束地址,栈是从高往低生长,结束地址就是栈顶地址。

----- 堆 Heap_Size EQU 0x00000200 ; 堆的大小(512Bytes) AREA HEAP, NOINIT, READWRITE,ALIGN=3 __heap_base ; 堆的起始地址 Heap_Mem SPACE Heap_Size ; 分配堆空间 __heap_limit ; 堆的结束地址 分配名为HEAP,不初始化,可读可写,8(2^3)字节对齐的512字节空间。__heap_base堆的起始地址,__heap_limit堆的结束地址。堆由低向高生长。动态分配内存用到堆。 PRESERVE8 -- 指定当前文件的堆/栈按照8 字节对齐。 THUMB-- 表示后面指令兼容THUMB 指令。THUBM 是ARM 以前的指令集,16bit;现在Cortex-M 系列的都使用THUMB-2 指令集,THUMB-2 是32 位的,兼容16 位和32 位的指令,是THUMB 的超级。 3.向量表 AREA RESET, DATA, READONLY EXPORT __Vectors E XPORT __Vectors_End E XPORT __Vectors_Size 定义一个名为RESET,可读的数据段。并声明__Vectors、__Vectors_End 和__Vectors_Size 这三个标号可被外部的文件使用。 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler

关于Grub2启动菜单的注释问题(个人经验)

关于Grub2启动菜单的注释问题(个人经验) 特别说明:此文只是我个人经验,尚不知道是否会引起其他问题。故,你若要使用此文之做法,请务必慎重考虑。建议先在虚拟机测试。 用命令sudo gedit /boot/grub/grub.cfg即可打开grub.cfg文件,如下: 其中,#号表示注释该段。我这是在虚拟机下的ubuntu,grub.cfg文件跟你的可能不尽相同。 # # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi set default="0" if [ ${prev_saved_entry} ]; then set saved_entry=${prev_saved_entry} save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true

function savedefault { if [ -z ${boot_once} ]; then saved_entry=${chosen} save_env saved_entry fi } function recordfail { set recordfail=1 if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi } insmod ext2 set root='(hd1,2)' search --no-floppy --fs-uuid --set 44765bf4-8d6f-4d5a-8341-0d6d2f14e241 if loadfont /usr/share/grub/unicode.pf2 ; then set gfxmode=640x400 insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else # For backward compatibility with versions of terminal.mod that don't

Android系统启动过程详解

Android系统启动过程详解 Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)

下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。

一Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 启动过程就是代码init.c中main函数执行过程:system\core\init\init. c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析 .rc文件是Android使用的初始化脚本文件(System/Core/Init/readm e.txt中有描述: four broad classes of statements which are Actions, Commands, Services, and Options.) 其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是linux 命令, 还有一些是android 添加的,如:class_start :启动服务,class_stop :关闭服务,等等。 其中Options是针对Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:\system\core\rootdir\init.rc 在解析rc脚本文件时,将相应的类型放入各自的List中: \system\core\init\Init_parser.c :init_parse_config_file( )存入到 action_queue、action_list、service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。 这其中包含了服务:adbd、servicemanager、vold、ril-daemon、deb uggerd、surfaceflinger、zygote、media…… 2 服务启动 文件解析完成之后将service放入到service_list中。 文件解析完成之后将service放入到service_list中。 \system\core\init\builtins.c

云主机添加Grub2引导WinPE ISO(Windows系统)-V1

云主机添加Grub2引导WinPE ISO (Windows系统) 导读 云主机安装的系统是Windows 2008 R2,BIOS+MBR,想利用Grub2引导发位于磁盘上Windows PE ISO 或其他系统,可以采用在Windows 系统中安装grub2实现。 安装配置步骤 第一步、Grub2下载,文件准备 到Grub2官网ftp://https://www.wendangku.net/doc/cd15108673.html,/gnu/grub/ 下载文件 grub-2.02-for-windows.zip,将其解压至任意路径下,比如D:\。这样Grub2的主程序目录将位于D:\grub-2.02-for-windows 第二步,Grub2安装 以管理员身份运行CMD,输入命令wmic diskdrive list brief,记录下安装目标磁盘DeviceID,本教程将安装至\\.\PHYSICALDRIVE0 ============================================== ==================================== Microsoft Windows [Version 10.0.10586]

(c) 2015 Microsoft Corporation. All rights reserved. C:\Windows\system32>wmic diskdrive list brief Caption DeviceID Model Partitions Size WDC WD5000AAKX-001CA0 \\.\PHYSICALDRIVE0 WDC WD5000AAKX-001CA0 3 500105249280 C:\Windows\system32> ===================================================== ============================= 将当前路径切换至Grub2主程序所在路径,输入cd /d d:\grub-2.02-for-windows ===================================================== ============================= C:\Windows\system32>cd /d d:\grub-2.02-for-windows d:\grub-2.02-for-windows> ===================================================== ============================= 查看grub-install.exe的帮助文件,可以输入grub-install.exe --help或grub-install.exe -?,显示如下内容: ===================================================== ============================= Usage: grub-install [OPTION...] [OPTION] [INSTALL_DEVICE] Install GRUB on your drive.

相关文档