设为首页 加入收藏

TOP

Linux Boot Process 分析与研究
2014-11-24 07:51:31 来源: 作者: 【 】 浏览:1
Tags:Linux Boot Process 分析 研究

对于linux的研究正在紧锣密鼓的进行着,源于对系统启动的兴趣,开始对其启动过程全面的分析,建立在以前玩过Linux的基础上,知道Linux启动时有GRUB可以选择想要启动的系统,开始进行启动深入剖析。大家不要担心,即使您对计算机的启动过程一无所知也可以看下面的文章。


当我们按下开机电源按钮的时候,系统就在启动的过程中了,相信使用过Windows的人或多或少的都对其启动速度有些意见,但是对它的启动过程却一无所知,这就让人很郁闷,呵呵,不急,下面进入正文。所有的计算机开机时都会有BIOS(Basic Input and Output System)对计算机进行自检,如内存测试等,并对本地设备进行枚举和初始化工作,接下来搜索BIOS中设置的处于活动状态并且可以引导的启动设备。通常情况下,Linux系统是从硬盘(也可以从CD,DVD,USB等)引导的,硬盘的引导扇区在每个分区中都存在,但是主引导扇区只有一个并位于第一个物理扇区。主引导扇区包含主引导记录(MBR)和硬盘分区表(DPT)。硬盘的主引导扇区中包含了主引导记录(MBR)的引导加载程序。此时BIOS将控制权交给MBR。Windows操作系统在这一步与Linux相同。


主引导扇区大小为512B,包含MBR程序代码,分区表DPT(64KB)以及结束标志(AA55)。MBR中包含了关于GRUB(或者早期的LILO)信息。MBR加载并执行GRUB(Grand Unified Bootloader) boot loader。下面的事情就由GRUB boot loader来控制执行了。


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.32-27-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,10)'
search --no-floppy --fs-uuid --set e36d89d9-ad79-467d-8acf-fadef717c6b7
linux /boot/vmlinuz-2.6.32-27-generic root=UUID=e36d89d9-ad79-467d-8acf-fadef717c6b7 ro splash vga=758 quiet splash
initrd /boot/initrd.img-2.6.32-27-generic
}
。由于咱侧重的是Linux的启动过程,下面介绍下Linux下的一个被成组自举引导的程序(bootsect-loader),在Linux源码树中的arch/i386/boot/bootsect.S,其为CPU实模式下的汇编程序,为了方便分析,对其源码进行简单介绍。
SETUPSECTS=4 //安装时的缺省值
BOOTSEG =0x07C0 //引导时的原始地址
INITSEC =DEF_INITSEG //移动引导程序
SETUPSEG =DEF_SETUPSEG //从这里开始安装
SYSSEG =DEF_SYSSEG //系统装载
SYSSIZE =DEF_SYSSIZE //系统大小


在include/asm-i386/boot.h中的宏定义


#define DEF_INITSEG 0x9000
#define DEF_SYSSEG 0x1000
#define DEF_SETUPSEG 0x9020
#define DEF_SYSSIZE 0x7F00


以下这段初学者可以略过(摘自《Linux系统分析与实践》)!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下SPI驱动分析 下一篇Android平台6410背光修改

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)