Linux内核调试、BIOS交互及Seq文件接口解析
1. 内核调试方法
在调试实模式内核时,不能使用像内核调试器(kdb)或内核GNU调试器(kgdb)这类工具。一种快速调试内核汇编片段的方法是,先将代码转换为英特尔风格的语法,再使用DOS调试工具。不过,DOS调试工具是在16位时代创建的,例如,它无法单步执行初始化EAX寄存器的代码。可以在互联网上找到一些32位的免费调试工具进行下载。JTAG调试器则是一种万能的调试工具,它可以用于调试BIOS、引导加载程序、Linux实模式代码以及内核与BIOS的交互。
2. Linux与BIOS的交互
部分x86内核组件,如视频帧缓冲区驱动(vesafb)和高级电源管理(APM),会显式地使用BIOS服务来完成特定功能。而像串行驱动这类内核组件,则会隐式地依赖BIOS来初始化I/O基地址和中断级别。实模式内核代码在启动过程中会大量使用BIOS调用,例如组装系统内存映射。
2.1 实模式调用
内核的许多部分会在实模式下从BIOS收集信息,并在保护模式的正常操作中使用这些信息。具体步骤如下:
1. 实模式内核代码调用BIOS服务,并将返回的信息填充到第一个物理内存页面(即零页)中。这一操作由 arch/x86/boot/ 目录下的源文件完成。零页的完整布局可在 Documentation/i386/zero-page.txt 中找到。
2. 内核切换到保护模式后,但在清除零页之前,会将获取的数据保存到内核数据结构中。这一操作在 arch/x86/kernel/setup_32.c 中完成
超级会员免费看
订阅专栏 解锁全文
1869

被折叠的 条评论
为什么被折叠?



