linux0.12-6-1

这篇具有很好参考价值的文章主要介绍了linux0.12-6-1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[216页]

第6章 引导启动程序

bootsect.S和setup.S是在实模式下运行的16位程序,
采用近似于Intel的汇编语言语法,并且需要使用Intel8086
汇编编译器和连接器as86和ld86。

head.s则使用GUN的汇编程序格式,并且运行在保护模式下,
需要用GNU的 as(gas)进行编译。这是一种AT&T语法的汇编
预压程序。

为什么要用两种汇编编译器?
原因:当时GNU汇编编译器不能支持实模式下的16位代码程序;

作者建议:
1、 需要知道一些一般8086汇编语言的知识;
2、 了解一些采用Intel80X86微处理器的PC的体系结构
以及80386 32位保护模式下的编程原理。

6-1 总体功能

Linux操作系统启动部分的主要执行流程:
1、 当PC的电源打开后,80x86结构的CPU将自动进入实模式,
并从地址0xFFFF0开始自动执行程序代码;
2、 PC的BIOS将执行某些系统的检查,并在物理地址0处开始
初始化中断向量;
3、 将第一个扇区(磁盘引导扇区,512B)读入内存绝对地址0x7c00处,
并跳转到这个地方。

boot/bootsect.S
1、 将自己移动到内存绝对地址0x90000(576KB)处,
2、 把启动设备盘中后2KB代码(boot/setup.S)读入到内存0x90200处,
3、 把内核(system模块)则读入到内存地址0x10000(64KB)开始处,
4、 在系统加载期间将显示信息"Loading……"
5、 控制权将传递给boot/setup.S
bootsect.S程序第44行上给出了根文件系统所在的默认块设备号ROOT_DEV(存储在引导扇区第509/510字节中)。

boot/setup.S
1、 通过BIOS获取硬件参数,且保存到0x90000;
2、 将内核(system模块)移到0地址;
3、 控制权将传递给boot/head.s

boot/head.s
1、 设置IDT、GDT以及LDT
2、 处理器和协处理器也已确认
3、 分页工作也设置号
4、 调用init/main.c文章来源地址https://www.toymoban.com/news/detail-426213.html

到了这里,关于linux0.12-6-1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux0.12-8-6-sched.c

    [315页] sched.c是内核中有关任务(进程)调度管理的程序,其中包括有关调度的基本函数 (sleep_on(0、wakeup()、schedule()等)以及一些简单的系统调用函数(比如getpid())。 系统时钟中断处理过程中调用的定时函数do_timer()也被放置在本程序中。 另外,为了便于软盘驱动器定时处理的编

    2024年02月03日
    浏览(38)
  • linux0.12-10-5-rs_io.s

    [534页] 该汇编程序实现rs232串行通信中断处理过程。在进行字符的传输和存储过程中,该中断过程主要对终端的读、写缓冲队列进行操作。它把从串行线路上接收到的字符存入串行终端的读缓冲队列read_q中,或把写缓冲队列write_q中需要发送出去的字符通过串行线路发送给远端

    2024年02月06日
    浏览(37)
  • 【Linux0.11代码分析】04 之 head.s 启动流程

    系列文章如下: 系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》 . 1.《【Linux0.11代码分析】01 之 代码目录分析》 2.《【Linux0.11代码分析】02 之 bootsect.s 启动流程》 3.《【Linux0.11代码分析】03 之 setup.s 启动流程》 4.《【Linux0.11代码分析】04 之 head.s 启动流程

    2024年02月03日
    浏览(39)
  • 数据湖架构Hudi(二)Hudi版本0.12源码编译、Hudi集成spark、使用IDEA与spark对hudi表增删改查

    Hadoop 3.1.3 Hive 3.1.2 Flink 1.13.6,scala-2.12 Spark 3.2.2,scala-2.12 2.1.1 环境准备 2.1.2 下载源码包 2.1.3 在pom文件中新增repository加速依赖下载 在pom文件中修改依赖的组件版本: 2.1.4 修改源码兼容hadoop3并添加kafka依赖 Hudi默认依赖的hadoop2,要兼容hadoop3,除了修改版本,还需要修改如下代

    2024年02月06日
    浏览(57)
  • 掌握嵌入式Linux编程3引导程序

    引导程序是嵌入式Linux的第二个要素。它是启动系统和加载操作系统内核的部分。在这一章中,我们将研究引导程序的作用,特别是它如何使用一种叫做设备树的数据结构将控制权从自身传递给内核,设备树也被称为扁平化设备树或FDT(flattened device tree)。我将介绍设备树的基本

    2024年02月08日
    浏览(37)
  • 哈工大操作系统实验一--调试分析 Linux 0.00 引导程序

    1.1.1 bochs Bochs 是一个开源的 x86 模拟器和调试器,允许您在虚拟环境中模拟 x86 架构的计算机系统。Bochs 的主要用途之一是用于开发和调试操作系统内核、嵌入式系统以及其他与低级系统编程相关的任务。它提供了一种方式来模拟整个计算机系统,包括处理器、内存、设备和外

    2024年02月07日
    浏览(56)
  • Linux0.11内核源码解析-truncate.c

    truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。  

    2024年02月12日
    浏览(47)
  • Linux0.11内核源码解析-exec.c

    主要实现对二进制可执行文件和shell文件的加载和执行,其中主要的函数是do_execve(),它是系统中断调用int 0x80的功能号__NR_execve()调用,是exec()函数的主要实现以下几点功能: 1.执行对参数和环境参数空间页面的初始化操作,初始化空间页面指针数组,根据执行文件名取执行对

    2024年02月06日
    浏览(33)
  • 【项目分析】仿linux0.11的操作系统内核

    系列综述: 💞目的:本系列是个人整理为了 秋招面试 的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于 《操作系统 真象还原》及各大佬博客 进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验

    2024年02月09日
    浏览(42)
  • Linux0.11内核源码解析-read_write.c

    目录  sys_lseek read write read_write.c主要是实现文件系统调用read(),write()和lseek()三个功能 read和write函数分别是调用file_dev.c/pipe.c/block_dev.c/char_dev.c实现相对应的函数 lseek实现系统调用将对文件句柄对应文件结果体中的当前读写指针进行修改,对于读写指针不能移动的文件和管道文

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包