makefile文件:

makefile 文件是make 实用简介。make 程序是用Makefile最后一次改变的数据文件和代码文件(last-modification time)确定哪些文件需要更新。对于每一个需要更新的文件时,它会根据Makefile 中的信息发出对应的命令。在Makefile 文件里。开头为'#'的行是凝视行。

文件开头部分的'='赋值语句定义了一些參数或命令的缩写。在引用定义的标识符时。需在前面加上$符号并用括号括住标识符。前一行最后的'\'符号表示下一行是续行。

all 表示创建Makefile
所知的最顶层的目标。dep: 该目标或规则用于各文件之间的依赖关系。

创建的这些依赖关系是为了给make 用来确定是否须要要 重建一个目标对象的。

简单的makefile 文件含有一些规则,这些规则具有例如以下的形式:

目标(target)... : 先决条件(prerequisites)...

命令(command)

...

...

当中'目标'对象一般是程序生成的一个文件的名称;比如是一个可运行文件或目标文件。目标也能够是所要採取活动的名字,比方'清除'('clean')。'先决条件'是一个或多个文件名称,是用作产生目标的输入条件。

通常一个目标依赖几个文件。

而'命令'是make 须要运行的操作。一个规则能够有多个命令,每个命令自成一行。

请注意,你须要在每个命令行之前键入一个制表符。自己主动变量的值是基于目标对象及其先决条件而在命令运行前设置的。

比如,’$^’的值表示规则的全部先决条件,包含它们所处文件夹的名称。’$<’的值表示规则中的第一个先决条件。’$@’表示目标对象

.c.s: # make 老式的隐式后缀规则。该行指示make 利用以下的命令将全部的 .c 文件编译生成.s 汇编程序。':'表示以下是该规则的命令。

$*.s(或$@)# 是自己主动目标变量。$<代表第一个先决条件,这里即是符合条件 *.c 的文件。

(cd kernel/math; make)计入子文件夹运行make命令

内核的编译过程:对boot/中的bootsect.s、setup.s 使用8086 汇编器进行编译,分别生成各自的运行模块。再对源码中的其他全部程序使用GNU 的编译器gcc/gas 进行编译,并连接成模块system。

再用build 工具将这三块组合成一个内核映象文件image.

as86 和ld86 是由Bruce Evans 编写的Intel 8086 汇编编译程序和连接程序。

它全然是一个8086的汇编编译器,但却能够为386 处理器编制32 位的代码。Linux 使用它不过为了创建16 位的启动扇区(bootsector)代码和setup 二进制运行代码。

该编译器的语法与GNU 的汇编编译器的语法是不兼容的,但近似于Intel 的汇编语言语法(如操作数的次序相反等)。

Linux 操作系统启动部分的主要运行流程:

PC 的电源打开后,80x86 结构的CPU 将自己主动进入实模式。并从地址0xFFFF0 開始自己主动运行程序代码。这个地址一般是ROM-BIOS 中的地址。

PC 机的BIOS 将运行某些系统的检測。并在物理地址0 处開始初始化中断向量。此后。它将可启动设备的第一个扇区(磁盘引导扇区,512 字节)读入内存绝对地址0x7C00 处。并跳转到这个地方。启动设备

一般是软驱或是硬盘

Linux 的最最前面部分是用8086 汇编语言编写的(boot/bootsect.s),它将由BIOS 读入到内存绝对地址0x7C00(31KB)处,当它被运行时就会把自己移到绝对地址90000(576KB)处,并把启动设备中后2kB 字节代码(boot/setup.s)读入到内存0x90200 处。而内核的其他部分(system 模块)则被读入到从地址0x10000 開始处。由于当时system 模块的长度不会超过0x80000 字节大小(即512KB),所以它不会覆盖在0x90000 处開始的bootsect
和setup 模块。随后将system 模块移动到内存起始处,这样system模块中代码的地址也即等于实际的物理地址。便于对内核代码和数据的操作。然后将整个系统从地址0x10000 移至0x0000 处,进入保护模式并跳转至系统的余下部分(在0x0000 处)。

此时全部32 位执行方式的设置启动被完毕: IDT、GDT 以及LDT 被载入。处理器和协处理器也已确认。分页工作也设置好了。终于调用init/main.c 中的main()程序。上述操作的源码是在boot/head.S 中间。

(42)

版权声明:本文博客原创文章,博客,未经同意,不得转载。

linux0.11学习笔记(2)的更多相关文章

  1. linux0.11学习笔记(1)

    公布软件包包括内容: bootimage.Z - 具有美国键盘代码的压缩启动映像文件: rootimage.Z - 以1200kB 压缩的根文件系统映像文件: linux-0.11.tar.Z- 内核 ...

  2. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  3. Linux0.11学习

    Linux 0.11虽然不是什么“珠穆朗玛峰”,但它肯定还是“华山”或“泰山”.虽然有路但你还是需要最基本的努力和花费一定的代价才能“攀登”上去.1. PC兼容机硬件工作原理(比如8259A,8253 ...

  4. C++11学习笔记

    C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 l ...

  5. C++11学习笔记(5) —— override and final (转)

    原文转自 http://blog.csdn.net/fire_lord/article/details/8540592 1.简介 C++为我们提供了继承和虚函数的重写特性. 在派生类中,重写虚函数不强 ...

  6. 802.11学习笔记1-WIFI参数含义

    研究下wifi参数的含义 #The word of "Default" must not be removed Default CountryRegion= CountryRegi ...

  7. Linux就该这么学11学习笔记

    参考链接:https://i.cnblogs.com/EditPosts.aspx?opt=1 文件传输协议 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式 ...

  8. 【DirectX 11学习笔记】世界矩阵的理解-运动合成

    最近在看龙书,写一下自己的学习理解,主要是物体运动的合成. 物体于局部坐标系内构建,每个物体拥有自己的局部坐标系以及相应的顶点矩阵A,并通过世界矩阵变换到唯一的世界坐标系. 物体在某时刻发生了位移和旋 ...

  9. C++11学习笔记之三lamda表达式,std::function, std::bind

    //lamda //first lamda [] {}; // second lamda []() //or no need () when paramater is null { std::cout ...

随机推荐

  1. 实现Android ListView 自动加载更多内容

    研究了几个小时终于实现了Android ListView 自动加载的效果. 说说我是怎样实现的.分享给大家. 1.给ListView增加一个FooterView,调用addFooterView(foo ...

  2. 菜鸟学习spring IOC有感

     一.spring IOC思想引入 事实上对于刚開始学习的人来说,在学习IOC的时候确实有点困难,主要是掌握其思想方面存在一丢丢的障碍,可是假设可以跨过这个障碍,则可以高速掌握当中的思想了.单从字 ...

  3. xml和json选择奖

    xml&json战争,一般能够分离两个对立阵营.党的手感json足够强大以便能够替代xml.有一方感觉json滑稽丑陋,绝对没有和xml赛可能. 为了避免"拉仇恨"(我不是 ...

  4. eclipse luna 无法安装veloeclipse问题

    问题: 在eclipse 4.4(luna)版本号.安装veloeclipse 2.0.8时,在即将完毕的时候出现下面错误提示: An error occurred while installing ...

  5. T-SQL基础(5) - 表表达式

    1.派生表(derived table)select YEAR(orderdate) as orderyear, COUNT(distinct custid) as numcustsfrom Sale ...

  6. hdu1052 Tian Ji -- The Horse Racing 馋

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=1052">http://acm.hdu.edu.cn/showproblem.php ...

  7. cocos2dx 遮罩层 android 手机上 失败

    1.CCClippingNode使用(在模拟器上ok,在手机上不行),实现多个剪切区域 local layer=CCLayerColor:create(ccc4(0,0,0,110))     --/ ...

  8. Maven学习笔记(十一年):柔性结构

    一个典型的项目将是开发环境.测试环境和生产环境,这些环境的数据库配置是不一样的,并使用正确的配置. Maven为了支持构建的灵活性,内置了三大特性,即属性.Profile和资源过滤.本章将介绍这些特性 ...

  9. 微软中国裁员曝光:在CD结束后!薪酬不变!

    聚众抗议的前诺基亚员工(腾讯科技配图) 腾讯科技 郭晓峰 腾讯科技刚刚获取了一份微软设备事业部中国区管理团队4日晚间发给被裁员工的补偿方案邮件. 邮件内容显示,微软承诺在收购诺基亚交易结束(2014年 ...

  10. (五岁以下儿童)NS3样本演示:桥模块演示样品csma-bridge.cc凝视程序

    (五岁以下儿童)NS3:桥模块演示样品csma-bridge.cc凝视程序 1.Ns3 bridge模csma-bridge.cc演示示例程序的目光 // Network topology // // ...