第2.1篇 Linux启动过程分析.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2.1章 Linux的启动 源代码简介 启动代码简介 Linux内核代码组成分析 Linux的启动层次 Linux的启动分析 编译得到的bzImage的结构 Setup.bin+vmlinux.bin(具有自解压能力) 这个head_32.S是链接时候第一个.o文件, 因为最后bzImage是个binary文件, 入口就是文件偏移0. 这点由相应的makefile保证,这个bzImage的makfile是: arch/x86/boot/compressed/Makefile $(obj)/vmlinux: $(src)/vmlinux_$(BITS).lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/piggy.o FORCE ?? ?$(call if_changed,ld) ?? ?@: OBJCOPYFLAGS_vmlinux.bin :=? -R .comment -S $(obj)/vmlinux.bin: vmlinux FORCE ?? ?$(call if_changed,objcopy) 源代码来源 理论内容以《Understanding the Linux Kernel》(third Edition)为主 /qiutie_public/linux内核分析(研究生) Source Insight 可以用来辅助代码阅读 到/上可以下载到它的试用版,试用期估计在30天左右 到我的FTP可以下载到破解版,不影响正常使用 Linux-2.6.xx 阅读linux目录下的README 关于Linux的介绍 该版本内核支持的体系结构 如何配置、编译、安装 Linux内核源代码中的主要子目录 Documentation 内核方面的相关文档。 arch 与体系结构相关的代码。对应于每个 支持的体系结构,有一个相应的目录 如x86、arm、alpha等。每个体系结 构子目录下包含几个主要的子目录: kernel与体系结构相关的核心代码 mm 与体系结构相关的内存管理代码 lib 与体系结构相关的库代码 include 内核头文件。对每种支持的体系结构 有相应的子目录。 init 内核初始化代码。 kernel 内核管理代码。 mm 内存管理代码。 ipc 进程间通讯代码。 net 网络部分代码。 lib 与体系结构无关的内核库代码。 drivers 设备驱动代码。每类设备有相应的子 目录,如char、block、net等 fs 文件系统代码。每个支持文件系统有 相应的子目录,如ext2、proc等。 modules 可动态加载的模块。 Scripts 配置核心的脚本文件。 考虑Arch为x86 在arch/x86下存在如下目录 LINUX是如何启动的 BIOS 软盘启动 硬盘启动 Grub Lilo 启动协议 特殊的几个地址 BIOS:第一个扇区?0x 07c0 第一个扇区的内容是什么? 观察setup.ld 了解第一个扇区的内容 关键: 实模式 保护模式 分页模式 页表 GDT表 IDT表 I386内核从实模式开始运行 首先看一下什么是实模式 实模式是为了兼容早期的CPU而设置的 i386系统总是始于实模式 实模式下 地址总线:20位 内存范围:0~1MB 逻辑地址 = 段地址 + 段内偏移 段地址 = 段寄存器中的值*16 (或左移4位) 段寄存器长度:16bit 段寄存器有: cs/ds/es/fs/gs 保护模式下, 地址总线32位,访存范围为4GB 原来的段寄存器与GDT表配合使用 GDT表由gdtr指示其位置和长度 使用特殊的指令进行操作:sgdt/lgdt 图示 一般装载gdt和idt之后,要重新装载段寄存器 cs、ds、es、fs、gs cs通常通过一条长跳转指令装载 其他数据段寄存器直接设置 控制寄存器(Control Registers) CR0 CR1 CR2 CR3 CR4(扩展相关,忽略) 与内存相关 CR0 CR0, MSW register (Machine Status Word, 32-bit version) 包含系统控制位,用于控制操作模式和状态 Instruction: lmsw LINUX’ setup.S: movw $1, %ax lmsw %ax jmp flush_instr // why? flush_instr: To turn on the PE-bit (enables protected-mode), CR1、CR2、CR3 CR1:保留 CR2

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档