Linux内核启动揭秘:msg_loop中的字符串与实/保护模式转换

需积分: 15 30 下载量 169 浏览量 更新于2024-08-23 收藏 1.37MB PPT 举报
在《关于msg_loop输出的字符串 - Linux内核源代码导读 - 陈香兰 - 基于x86的Linux 2.6.26的启动》这篇文章中,作者陈香兰探讨了Linux内核启动过程,特别是针对I386架构的细节。文章首先回顾了编译得到的bzImage结构,这个结构包括Setup.bin、vmlinux.bin(具有自解压功能)以及多个模块,如head_32.o、misc.o和piggy.o等。 对于Linux的启动流程,文章详细介绍了BIOS的作用以及几种常见的启动方式,如软盘启动、硬盘启动、Grub和Lilo等。特别强调了BIOS中第一个扇区的重要性,它是引导加载程序的起点,内容包含引导加载代码,如setup.ld。在这个部分,作者着重讲解了实模式、保护模式和分页模式的区别,以及它们在内存管理中的作用。 实模式是早期CPU兼容性设计,地址总线只有20位,内存范围限于0~1MB,逻辑地址由段地址和段内偏移组成。而保护模式引入了更高级别的内存管理,地址总线扩展到32位,可访问4GB内存,通过段选择子(GDT表)与全局描述符表(GDT)配合实现。中断描述符表(IDT)和全局描述符表(GDTR)也在此阶段发挥作用。 文章还提到了控制寄存器(如CS、DS、ES、FS和GS)的管理和装载,其中CS通常通过长跳转指令装载,而其他数据段寄存器直接设置。阅读文档"documentation/i386/boot.txt"有助于理解这些概念。 这篇文档深入剖析了Linux内核启动过程中的底层机制,对于理解和开发基于x86架构的Linux系统具有很高的参考价值。理解这些概念不仅有助于开发者编写启动代码,也有助于对整个操作系统的工作原理有更深的认识。