Linux文件解hgc,Linux从实模式到保护模式.pdf
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相关推荐
- Linux文件解hgc,Linux shell I/O重定向详解
I/O重定向详解及应用实例 1. 基本概念(这是理解后面的知识的前提,请务必理解) a. I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b. 常用FD有3个,为0(stdi ...
- Linux文件解hgc,【 大家一起来学习 Linux 源码 】:/*中英文注释*/
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 146 ! ! 该子程序将系统模块加载到内存地址0x10000 处,并确定没有跨越64KB 的内存边界.我们试图尽快 ! 地进行加载,只要可能,就每次加载 ...
- CPU实模式和保护模式、全局描述符表GDT、Linux内核中GDT和IDT的结构定义
一 计算机实模式和保护模式 实模式 在实模式下,内存被限制为仅有1M字节(220 字节).有效的地址从00000到FFFFF (十六进制). 这些地址需要用20位的数来表示.一个20位的数不适合任何一 ...
- Linux下的实模式和保护模式
实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式.实模式被特殊定义为20位地址内存可访问空间上,这就意味 ...
- 文件上传linux服务器,Linux 文件上传Linux服务器
进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...
- linux文件权限754,Linux文件权限
Linux文件权限 在Linux中,对系统服务的文件通常只有root才能读写或执行. 说明:Linux记录用户身份的是UID(用户ID)和GID(群组ID),root的两个ID号均为0,一般用户的两个 ...
- 实模式与保护模式详解一:寄存器
基本寄存器 在了解实模式与保护模式区别之前,先介绍一下几个基本的寄存器 通用寄存器 寄存器组中有8个32位寄存器,属于CPU内的寄存器,也称通用寄存器,按照用途可以分为数据寄存器组和指示器变址寄存器 ...
- 程序的加载和执行(四)——《x86汇编语言:从实模式到保护模式》读书笔记24
程序的加载和执行(四)--<x86汇编语言:从实模式到保护模式>读书笔记24 通过本文能学到什么? 怎样跳转到用户程序 用户程序通过调用内核过程完成自己的功能 怎样从用户程序返回到内核 接 ...
- x86汇编语言从实模式百度云_x86汇编语言:从实模式到保护模式
x86汇编语言:从实模式到保护模式2013年1月由电子工业出版社出版发行,总共6000行的源代码,全方位地向读者展现汇编语言程序设计之美.尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们 ...
最新文章
- 《自然-神经科学》发表脑智卓越中心关于昼夜节律中枢的研究成果
- ubuntu12.04升级php5.4至。。5.5
- 利用MATLAB求数列的和与连乘
- Java技巧-解决JAVA_HOME变量无效问题
- 基于python的智能安防系统_基于Python语言的智能家居系统研究
- linux脚本done报错,很简单的脚本程序,总是报错
- mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!
- mysql commit慢_MySQL慢日志中COMMIT事件
- 帆软帮助文档_帆软:像阿甘一样,奔跑在商业智能的赛道上
- H5+ 二维码扫描功能
- 【数据结构试验】树的基本操作
- Laravel自学第一课:laravel下载与安装
- 人工智能AI系列 - 音频搜索之声纹搜索
- C语言运算符优先级(超级详细)
- 超级简单理解工厂模式
- 每年10万被动收入目标分解
- [DQN] Playing Atari with Deep Reinforcement Learning
- Spring Data Jpa使用QueryDsl接口出现的一些问题
- 工具类APP的推广方式
- oracle有sysdata,Oracle入门知识 - osc_r8q2esik的个人空间 - OSCHINA - 中文开源技术交流社区...