- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2、基于i386体系结构的Linux启动代码分析
启动第一步,小结 总之,在跳转到setup的时候,内存里面的代码布局为 0x90000:bootsect 0x90200:setup 低装载:0x10000:带解压的vmlinux 高装载:0x100000:带解压的bvmlinux 实模式下的内核头结构 包括bootsect的最后和setup开始的位置 从bootsect的偏移0x1F1开始,具体描述参见documentation/i386/boot.txt Setup:0x90200 初始化硬件设备并为内核程序的执行建立环境 内存检测 键盘 视频 磁盘控制器 IBM微通道总线MCA PS/2设备(总线鼠标) APM BIOS 若低装载,将系统移动到0x1000处(4KB处)否则,不必 临时IDT和临时GDT FPU PIC, 16个硬件中断?中断向量32~47 实模式?保护模式 Startup_32 关于保护模式: 在setup中,从实模式?保护模式 保护模式下,地址总线32位,访存范围为4GB 原来的段寄存器现在被称作段选择子,与GDT表配合使用 GDT表由gdtr指示其位置和长度 使用特殊的指令进行操作:sgdt/lgdt 图示 descriptor descriptor descriptor descriptor descriptor descriptor descriptor Global Descriptor Table GDTR descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor descriptor Interrupt Descriptor Table IDTR index TI RPL 2 1 0 15 Segment selector 线性空间 (没有开启 页表机制 时,即物 理空间) 段描述符的格式 段基址、 段长度、 其他属性 一般装载gdt和idt之后,要重新装载段寄存器 cs、ds、es、fs、gs cs通常通过一条长跳转指令装载 其他数据段寄存器直接设置 在compressed/head.S和head.S中都定义了startup_32 但是head.S中,被压缩在vmlinux中还没有解压缩 只有compressed/head.S的startup_32是可用的 zImage中,在0x1000处 bzImage中,在0x100000处 Compressed/head.S Startup_32 初始化段寄存器和一个临时堆栈 初始化BSS段 解压缩 高装载或低装载?解压缩?0x100000(1MB) 跳转到0x100000处 解压缩后,vmlinux在0x100000处 根据vmlinux.lds,vmlinux的地址被链接为0xc0000000+0x100000处 如何正确运行呢? 此时仍然是实模式,还没有进入保护模式、分页、映射好 没有长跳转,只使用采用相对地址的近距离跳转 Head.S Startup_32 初始化段寄存器 设置页目录和页表,分页 建立进程0的内核堆栈 Setup_idt 拷贝系统参数 识别处理器 GDT、IDT Start_kernel 页目录:swapper_pg_dir 页表:pg0和pg1 ???如何从0~8M的空间中转入3G以上的地址空间中运行的??? 控制寄存器(Control Registers) CR0 CR1 CR2 CR3 与内存相关 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), PE-bit (Protection Enabled) 0? CPU is in real-mode, 1? CPU is in protected-mode CR1、CR2、CR3 CR1:保留 CR2:在缺页异常的时候,记录缺页地址 CR3:记录页目录所在的物理地址和两个标记(PCD PWT) 请注意setup.S和head.
文档评论(0)