【文魁大脑读书会】11/60马帅《linun内核0.11完全注释》

阅读时间:2015年10月22日

阅读技巧:用手机截图的方式,把重要的内容重点理解,时常复习

图片发自简书App

阅读笔记:liunx的标准:

POSIX.1 仅规定了系统服务应用程序编程接口(API),仅概括了基本的系统服务标准,因此期望对 系统的其它功能也制定出标准。这样 IEEE POSIX 的工作就开始展开了。在 1990 年,刚开始有十个批准 的计划在进行,有近 300 多人参加每季度为期一周的会议。着手的工作有命令与工具标准(POSIX.2)、测 试方法标准(POSIX.3)、实时 API(POSIX.4)等。到了 1990 年上半年已经有 25 个计划在进行,并且有 16 个工作组参与了进来。与此同时,还有一些组织也在制定类似的标准,如 X/Open,AT&T,OSF 等。

本文将主要对 Linux 的早期内核 0.11 版进行详细描述和注释。Linux-0.11 版本是在 1991 年 12 月 8 日发布的。在发布时包括以下文件:

bootimage.Z - 具有美国键盘代码的压缩启动映像文件;

rootimage.Z - 以 1200kB 压缩的根文件系统映像文件;

linux-0.11.tar.Z- 内核源代码文件;

as86.tar.Z - linux bruce evans'二进制执行文件;

是 16 位的汇编程序和装入程序;

INSTALL-0.11 - 更新过的安装信息文件。

图片发自简书App

由于 Linux 内核是一种单内核模式的系统,因此,内核中所有的程序几乎都有紧密的联系,它们之 间的依赖和调用关系非常密切。所以在阅读一个源代码文件时往往需要参阅其它相关的文件。因此有必 要在开始阅读内核源代码之前,先熟悉一下源代码文件的目录结构和安排:

图片发自简书App

Makefile 简介

makefile 文件是 make 工具程序的配置文件。Make 工具程序的主要用途是能自动地决定一个含有很 多源程序文件的大型程序中哪个文件需要被重新编译。makefile 的使用比较复杂,这里只是根据上面的 makefile 文件作些简单的介绍。详细说明请参考 GNU make 使用手册。

为了使用 make 程序,你就需要 makefile 文件来告诉 make 要做些什么工作。通常,makefile 文件 会告诉 make 如何编译和连接一个文件。当明确指出时,makefile 还可以告诉 make 运行各种命令(例如, 作为清理操作而删除某些文件)。

make 的执行过程分为两个不同的阶段。在第一个阶段,它读取所有的 makefile 文件以及包含的 makefile 文件等,记录所有的变量及其值、隐式的或显式的规则,并构造出所有目标对象及其先决条件 的一幅全景图。在第二阶段期间,make 就使用这些内部结构来确定哪个目标对象需要被重建,并且使用 相应的规则来操作。

当 make 重新编译程序时,每个修改过的 C 代码文件必须被重新编译。如果一个头文件被修改过了, 那么为了确保正确,每一个包含该头文件的 C 代码程序都将被重新编译。每次编译操作都产生一个与源 程序对应的目标文件(object file)。最终,如果任何源代码文件被编译过了,那么所有的目标文件不管 是刚编译完的还是以前就编译好的必须连接在一起以生成新的可执行文件。

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

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

命令(command) ...

...

其中'目标'对象通常是程序生成的一个文件的名称;例如是一个可执行文件或目标文件。目标也可 以是所要采取活动的名字,比如'清除'('clean')。'先决条件'是一个或多个文件名,是用作产生目标的 输入条件。通常一个目标依赖几个文件。而'命令'是 make 需要执行的操作。一个规则可以有多个命令, 每一个命令自成一行。请注意,你需要在每个命令行之前键入一个制表符!这是粗心者常常忽略的地方。

如果一个先决条件通过目录搜寻而在另外一个目录中被找到,这并不会改变规则的命令;它们将被 如期执行。因此,你必须小心地设置命令,使得命令能够在 make 发现先决条件的目录中找到需要的先决 条件。这就需要通过使用自动变量来做到。自动变量是一种在命令行上根据具体情况能被自动替换的变 量。自动变量的值是基于目标对象及其先决条件而在命令执行前设置的。例如,’$^’的值表示规则的 所有先决条件,包括它们所处目录的名称;’$<’的值表示规则中的第一个先决条件;’$@’表示目标 对象;另外还有一些自动变量这里就不提了。

有时,先决条件还常包含头文件,而这些头文件并不愿在命令中说明。此时自动变量’$<’正是第 一个先决条件。例如: foo.o : foo.c defs.h hack.h cc -c $(CFLAGS) $< -o $@

其中的’$<’就会被自动地替换成 foo.c,而$@则会被替换为 foo.o 为了让 make 能使用习惯用法来更新一个目标对象,你可以不指定命令,写一个不带命令的规则或者 不写规则。此时 make 程序将会根据源程序文件的类型(程序的后缀)来判断要使用哪个隐式规则。

后缀规则是为 make 程序定义隐式规则的老式方法。(现在这种规则已经不用了,取而代之的是使用 更通用更清晰的模式匹配规则)。下面例子就是一种双后缀规则。双后缀规则是用一对后缀定义的:源后 缀和目标后缀。相应的隐式先决条件是通过使用文件名中的源后缀替换目标后缀后得到。因此,此时下 面的’$<’值是*.c 文件名。而正条 make 规则的含义是将*.c 程序编译成*.s 代码。

.c.s:

$(CC) $(CFLAGS)  -nostdinc -Iinclude -S -o $*.s $<

通常命令是属于一个具有先决条件的规则,并在任何先决条件改变时用于生成一个目标(target)文 件。然而,为目标而指定命令的规则也并不一定要有先决条件。例如,与目标'clean'相关的含有删除 (delete)命令的规则并不需要有先决条件。此时,一个规则说明了如何以及何时来重新制作某些文件, 而这些文件是特定规则的目标。make 根据先决条件来执行命令以创建或更新目标。一个规则也可以说明 如何及何时执行一个操作。

一个 makefile 文件也可以含有除规则以外的其它文字,但一个简单的 makefile 文件只需要含有适 当的规则。规则可能看上去要比上面示出的模板复杂得多,但基本上都是符合的。

makefile 文件最后生成的依赖关系是用于让 make 来确定是否需要重建一个目标对象。比如当某个 头文件被改动过后,make 就通过这些依赖关系,重新编译与该头文件有关的所有*.c 文件。这是打开这个文件的注释:

接下文

接下文

接下文

接下文

阅读后记:这是技术类的文章,需要对概念采取碎片话的时间加以理解。同时对整体需要有个大概得理解,就像是产品说明介绍一样对每个模块知识充分的认识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容