Linux从实模式到保护模式

Linux 内核源码学习 (1)- 从实模式到保护模式

notishell 发布于 3 年前

在查找资料的过程发现了一份关于 linux 内核启动的课件,在这里附上。(本

笔记参考了众多资料,向原作者致敬)

下载

鉴于本人对于操作系统已经有了一些初步的认识,所以本人从系统启动

的入口点开始分析 linux 内核源码。

一、linux-3/arch/x86/boot/setup.ld

Linux 中与x86 体系结构相关的源码在 linux/arch/x86/中,

boot/setup.ld 脚本中指定了内核入口点,具体内容如下

/*

* setup.ld

*

* Linker script for the i386 setup code

*/

OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")

OUTPUT_ARCH(i386)

ENTRY(_start)

脚本中的 ENTRY(_start)指定了入口点为_start,此外,脚本中还指定

了输出文件的段属性等等。

SECTIONS

{

. = 0;

.bstext : { *(.bstext) } /* 这是引导扇区代码段 */

.bsdata : { *(.bsdata) } /* 这是引导扇区所包含的数据段 */

接下来的这一句是指示链接器将 header 链接到偏移 0x1f1,即十进制

497,这是严格规定的。

. = 497;

.header : { *(.header) }

.entrytext : { *(.entrytext) }

.inittext : { *(.inittext) }

.initdata : { *(.initdata) }

__end_init = .;

.text : { *(.text) }

.text32 : { *(.text32) }

. = ALIGN(16);

.rodata : { *(.rodata*) }

.videocards : {

video_cards = .;

*(.videocards)

video_cards_end = .;

}

. = ALIGN(16);

.data : { *(.data*) }

.signature : {

setup_sig = .;

LONG(0x5a5aaa55)

}

这里有一个签名,用于内核启动过程中的验证。

. = ALIGN(16);

.bss :

{

__bss_start = .;

*(.bss)

__bss_end = .;

}

. = ALIGN(16);

_end = .;

/DISCARD/ : { *(.note*) }

/*

* The ASSERT() sink to . is intentional, for binutils 2.14

compatibility:

*/

. = ASSERT(_end <= 0x8000, "Setup too big!");

. = ASSERT(hdr == 0x1f1, "The setup header has the wrong offset!");

/* Necessary for the very-old-loader check to work... */

. = ASSERT(__end_init <= 5*512, "init sections too big!");

}

二、 linux-3/arch/ x86/boot/ header.S

在 bootloader 执行完后的内存布局如下图所示。

原本我以为内核是从引导扇区开始运行的,但是引导扇区的代码告

诉我事实并不是这样,linux 内核映像不能被引导执行,它的引导扇区功能只

是提示错误信息指导重启。以下为内核映像的 “引导扇区” (这个扇区并不是

真正的系统引导扇区,它只是内核映像的一部分,它能在内核映像被引导时提

示错误)。

.code16

.section ".bstext", "ax"

.global bootsect_start

bootsect_start:

# Normalize the start address

ljmp $BOOTSEG, $start2 #

Linux文件解hgc,Linux从实模式到保护模式.pdf相关推荐

  1. Linux文件解hgc,Linux shell I/O重定向详解

    I/O重定向详解及应用实例 1. 基本概念(这是理解后面的知识的前提,请务必理解) a. I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b. 常用FD有3个,为0(stdi ...

  2. Linux文件解hgc,【 大家一起来学习 Linux 源码 】:/*中英文注释*/

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 146 ! ! 该子程序将系统模块加载到内存地址0x10000 处,并确定没有跨越64KB 的内存边界.我们试图尽快 ! 地进行加载,只要可能,就每次加载 ...

  3. CPU实模式和保护模式、全局描述符表GDT、Linux内核中GDT和IDT的结构定义

    一 计算机实模式和保护模式 实模式 在实模式下,内存被限制为仅有1M字节(220 字节).有效的地址从00000到FFFFF (十六进制). 这些地址需要用20位的数来表示.一个20位的数不适合任何一 ...

  4. Linux下的实模式和保护模式

    实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式.实模式被特殊定义为20位地址内存可访问空间上,这就意味 ...

  5. 文件上传linux服务器,Linux 文件上传Linux服务器

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  6. linux文件权限754,Linux文件权限

    Linux文件权限 在Linux中,对系统服务的文件通常只有root才能读写或执行. 说明:Linux记录用户身份的是UID(用户ID)和GID(群组ID),root的两个ID号均为0,一般用户的两个 ...

  7. 实模式与保护模式详解一:寄存器

    基本寄存器 在了解实模式与保护模式区别之前,先介绍一下几个基本的寄存器 通用寄存器 寄存器组中有8个32位寄存器,属于CPU内的寄存器,也称通用寄存器,按照用途可以分为数据寄存器组和指示器变址寄存器 ...

  8. 程序的加载和执行(四)——《x86汇编语言:从实模式到保护模式》读书笔记24

    程序的加载和执行(四)--<x86汇编语言:从实模式到保护模式>读书笔记24 通过本文能学到什么? 怎样跳转到用户程序 用户程序通过调用内核过程完成自己的功能 怎样从用户程序返回到内核 接 ...

  9. x86汇编语言从实模式百度云_x86汇编语言:从实模式到保护模式

    x86汇编语言:从实模式到保护模式2013年1月由电子工业出版社出版发行,总共6000行的源代码,全方位地向读者展现汇编语言程序设计之美.尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们 ...

最新文章

  1. 《自然-神经科学》发表脑智卓越中心关于昼夜节律中枢的研究成果
  2. ubuntu12.04升级php5.4至。。5.5
  3. 利用MATLAB求数列的和与连乘
  4. Java技巧-解决JAVA_HOME变量无效问题
  5. 基于python的智能安防系统_基于Python语言的智能家居系统研究
  6. linux脚本done报错,很简单的脚本程序,总是报错
  7. mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!
  8. mysql commit慢_MySQL慢日志中COMMIT事件
  9. 帆软帮助文档_帆软:像阿甘一样,奔跑在商业智能的赛道上
  10. H5+ 二维码扫描功能
  11. 【数据结构试验】树的基本操作
  12. Laravel自学第一课:laravel下载与安装
  13. 人工智能AI系列 - 音频搜索之声纹搜索
  14. C语言运算符优先级(超级详细)
  15. 超级简单理解工厂模式
  16. 每年10万被动收入目标分解
  17. [DQN] Playing Atari with Deep Reinforcement Learning
  18. Spring Data Jpa使用QueryDsl接口出现的一些问题
  19. 工具类APP的推广方式
  20. oracle有sysdata,Oracle入门知识 - osc_r8q2esik的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. mysql 存储数据类型的选择
  2. 打印图案系列(菱形、X形、箭形、空心正方形)
  3. Java之美[从菜鸟到高手演变]之集合类【吐血推荐!讲得太好了!!!】
  4. ARP欺骗数据帧转发之MAC修改
  5. 为K8S集群申请Let‘s Encrypt证书
  6. 不再封控,各高校要如何开展教学
  7. Appium-Long Press(长按)
  8. 区块链主要的核心内容
  9. python3根据excel表数据自动生成word格式数据报告
  10. Outlook邮件撤回有时间限制吗_怎么操作?