Linux系统初始化
针对linux系统的单x86 cpu的版本
与硬件结构关系密切(参考INTEL386体系结构、汇编语言)
系统初始化所包括的内容
基础知识
系统引导
实模式下的系统初始化
保护模式下的系统初始化
启动核心
Init进程
一、基础知识
Linux源代码中的C语言代码
Linux源代码中的汇编语言代码:两种
完全的汇编代码,
嵌入在c程序中的汇编代码
C语言代码
Linux主体是用GNU的c语言编写
从c++中吸收了“inline”和“const”
支持“属性描述符”(attribute)
增加了新的基本数据类型“long long int”用于支持64位CPU
汇编语言代码
与一般的386汇编语言采用intel定义不同,它采用的是AT&T定义的格式。主要差别如下:
Intel中多使用大写字母,而这里大多使用小写字母
寄存器名前面要加“%”作为前缀
指令的源操作数与目标操作数的顺序与intel的正好相反。AT&T格式中,源在前,目标在后
汇编语言代码
访问内存的指令的操作数大小(即宽度)由操作码名称的最后一个字母决定,用作操作码后缀的字母有b(8位),w(16位),l(32位)
直接操作数要加“$”作为前缀,intel中不用
绝对转移或者调用jump/call的操作数,要加“*”作为前缀
另外在远程的转移指令和间接寻址的格式方面还有一些区别
基础知识
Linux的启动是指从系统加电到控制台显示登录提示为止的运行阶段:
主要相关的代码是在arch/i386/boot中:
,这是linux引导扇区的源代码
,用于引导过程中的屏幕显示
基础知识
另外,,。用于内核映象的解压缩。也属于辅助程序一部分
经过编译,汇编和连接后就形成三个部分:引导扇区的映象bootsetc,辅助程序setup和内核映象本身
大小不超过508KB的内核引导映象称为小映象zImage;否则称为大内核bzImage
系统引导
PC引导的一般过程
硬件将启动介质的主引导记录(512B)拷贝到实地址0x7c00的位置,并跳过去执行
这段代码依次做3件事
设置寄存器初值,尤其是栈指针
将自己“搬运”到特定位置(0x7c00位置不好)
通过BIOS 0x13中断访问磁盘,取进引导程序的后续部分
后续部分负责复杂的任务,包括引导器交互界面、从文件系统找到系统核心、解压缩等
Linux引导中的内存布局
linux系统初始化 来自淘豆网www.taodocs.com转载请标明出处.