摘要:
这一节我们来研究从核心代码特权级转移到应用代码特权级。 首先将boot.asm贴出来如下: inc.asm如下: 18-2节的loader.asm例子如下: 第10-16行我们定义的段描述符特权级都是0,处理器从实模式跳转到保护模式后进入的是核心特权级0,进入32位的保护模式后首先执行的是144行的
阅读全文
posted @ 2018-10-13 12:03
周伯通789
阅读(641)
推荐(0)
posted @ 2018-10-01 18:41
周伯通789
阅读(372)
推荐(0)
摘要:
如果我们正在进行的项目需要使用第三方库,那么前几节的makefile能胜任吗?答案是否定的。 本节我们研究第三方库的使用。使makefile支持第三方库。 libs第三方库一般和其他模块是并列的关系。因此,libs文件夹和commom、module等文件夹是同等地位的。 动态链接库和静态链接库都有对
阅读全文
posted @ 2018-10-01 18:30
周伯通789
阅读(296)
推荐(0)
摘要:
一般而言,不同的工程师负责不同的模块开发,写一段代码之后我们一般要先编译一下,确定一下有没有语法错误,但是,如果将整个工程完整编译一遍非常耗费时间,那么编译环境如何支持模块的独立编译呢? 上图中我们执行make main则只编译main模块。模块独立编译也方便了单元测试。 模块独立编译的解决方案:
阅读全文
posted @ 2018-10-01 18:21
周伯通789
阅读(195)
推荐(0)
摘要:
这一节我们来研究一下上一节中makefile存在的问题: 第一个问题导致了项目的文件夹不能移动,一旦移动则编译失败。 这样可以使得工程文件夹随意移动。 顶层makefile改动后的部分程序如下: 第35、36行我们通过命令行变量将路径传到模块makefile中,因此,模块makefile中的这两个相
阅读全文
posted @ 2018-10-01 18:15
周伯通789
阅读(202)
推荐(0)
摘要:
上一节我们完成了第一阶段的任务,这一节我们来完成第二阶段的任务: 编译静态库的工作是调用模块的makefile完成的。 实现要点: 只有知道了项目中有哪些模块,才能知道对应的文件夹的名字。 我们做如下的假设:项目中的模块基本稳定,模块名字直接写到makefile中去 makefile中嵌入shell
阅读全文
posted @ 2018-10-01 18:04
周伯通789
阅读(236)
推荐(0)
摘要:
本节我们研究大型项目的编译。大型项目的结构如下: 大型项目会划分不同的模块,不同的模块负责不同的功能。在模块文件夹中还有更深一层的文件夹管理,如上图中的module模块中的样子。 每个模块都有一个makefile,负责当前模块的编译工作。 最顶层的makefile负责整体控制。 build文件夹负责
阅读全文
posted @ 2018-10-01 18:00
周伯通789
阅读(208)
推荐(0)
摘要:
项目类型分析: 这是一种扁平的代码管理方式。makefile直接放到项目文件夹下面。 示例工程: 源码的目录如下: 最终的makefile如下: 第41行是模式规则。 这个makefile非常易于扩展到相同架构的项目。 func.h如下: func.c如下: main.c如下: 小结: 参考: 狄泰
阅读全文
posted @ 2018-10-01 17:56
周伯通789
阅读(188)
推荐(0)
摘要:
程序如下: 结果如下: 改变测试程序: 结果如下; 上面的程序没有找到1,3,5这个序列,因此还有改进的余地。 结果如下:
阅读全文
posted @ 2018-10-01 16:32
周伯通789
阅读(207)
推荐(0)
摘要:
程序如下: 测试程序如下: 结果如下: 程序改进如下: 测试程序如下: 结果如下: 小结:
阅读全文
posted @ 2018-10-01 15:30
周伯通789
阅读(244)
推荐(0)