当前位置: 首页 > 编程日记 > 正文

Linux0.01内核根目录Makefile注释

#
# Makefile for linux.
# If you don't have '-mstring-insns' in your gcc (and nobody but me has :-)
# remove them from the CFLAGS defines.
##
#8086汇编编译器和连接器. -0生成8086目标程序;-a生成与gas和gld部分兼容的代码
#
AS86 =as -0 -a 
CC86 =cc -0
LD86 =ld -0#
#GNU汇编编译器和连接器
#
AS =gas
LD =gld#
#GNU连接器gld运行时用到的选项
#-s 输出文件中省略所有的符号信息
#-x 删除所有的局部符号
#-M 在标准输出设备(显示器)上打印连接映象(link map).
#连接映象:由连接程序产生的一种内存地址映象,其中列出了程序装入到内存中的位置信息,具体有如下信息:
#目标文件及符号信息映射到内存中的位置
#公共符号如何放置
#连接中包含的所有文件成员及其引用的符号
#
LDFLAGS =-s -x -M#
#gcc是GNU C程序编译器,对于UNIX类的脚本程序而言,
#在引用定义的标识符时,需在前面加上$符号并用括号括住标识符
#
CC =gcc#
#GCC的选项.
#-Wall 打印所有的警告信息
#-O 对代码进行优化
#-fstrength-reduce 优化循环语句
#
CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer -fcombine-regs#
#CPP是gcc的预处理程序
#-nostdinc -Iinclude 不要搜索标准的头文件目录中的文件,
#而是使用-I选项指定的目录或者是在当前的目录里搜索头文件
#
CPP =gcc -E -nostdinc -Iinclude# 
# kernel目录,mm目录,fs目录所产生的目标代码文件。
# 为了方便引用,在这里将它们用ARCHIVES(归档文件)标识符表示
#
ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o#
# 由lib/目录中生成的通用库文件
#
LIBS =lib/lib.a#
# make隐式后缀规则
# 指示make利用下面的命令将所有的.c文件编译生成.s汇编程序
# ':'表示下面是该规则的命令
# 规则:指使gcc采用前面CFLAGS所指定的选项以及仅使用include/目录中的头文件,
# 在适当的编译后不进行汇编就停止(-S),从而产生与输入的各个C文件对应的汇编语言形式的代码文件。
# 默认情况下所产生的汇编程序文件是原C文件名去掉.c而加上.s后缀。
# -o表示其后是输出文件的形式。
# 其中$*.s(或$@)是自动目标变量,$<代表第一个先决条件,这里即是符合条件*.c的文件。
#
.c.s:
$(CC) $(CFLAGS) \
-nostdinc -Iinclude -S -o $*.s $<#
# 将所有.s汇编程序文件编译成.o目标文件。下一条是实现该操作的具体命令
# 使用gas编译器将汇编程序编译成.o目标文件。-c表示只编译或汇编,但不进行连接操作
#
.s.o:
$(AS) -c -o $*.o $<#
# 使用gcc将c语言编译成目标文件但不连接
#
.c.o:
$(CC) $(CFLAGS) \
-nostdinc -Iinclude -c -o $*.o $<#
# all表示创建Makefile所知的最顶层目标。这里即是image文件
#
all: Image#
# 第一行说明:目标文件(Image文件)是由分号后面的3个元素产生
# 下面两行是执行的命令
# 第一行表示使用tools目录下的build工具程序将boot,system文件组装成内核映象文件Image
# 第二行的sysn同步命令是迫使缓冲块数据立即写盘并更新超级块
#
Image: boot/boot tools/system tools/build
tools/build boot/boot tools/system > Image
sync#chmem -- 修改系统内存数据
tools/build: tools/build.c
$(CC) $(CFLAGS) \
-o tools/build tools/build.c
chmem +65000 tools/build#
# 利用上面的.s.o规则生成head.o文件
#
boot/head.o: boot/head.s#
# 最后的>System.map表示gld需要将连接映象重定向存放在System.map文件中
#
tools/system: boot/head.o init/main.o \
$(ARCHIVES) $(LIBS)
$(LD) $(LDFLAGS) boot/head.o init/main.o \
$(ARCHIVES) \
$(LIBS) \
-o tools/system > System.map#
# 内核目标模块kernel.o
#
kernel/kernel.o:
(cd kernel; make)#
# 内核管理模块mm.o
#
mm/mm.o:
(cd mm; make)#
# 文件系统目标模块fs.o
#
fs/fs.o:
(cd fs; make)#
# 库函数lib.a
#
lib/lib.a:
(cd lib; make)#
# 在boot.s程序开口添加一行有关system文件长度信息
# 首先生成含有 "SYSSIZE = 文件实际长度"一行信息的tmp.s文件,然后将boot.s文件添加在其后。
# 取得system长度的方法是:
# 利用ls命令对system文件进行长列表显示
# 用grep命令取得列表上文件字节数字段信息,并定向保存在tmp.s临时文件中
# cut命令用于剪切字符串
# tr用于去除行尾的回车符
# (实际长度 + 15)/16用于获得'节'表示的长度信息,1节=16字节
# 用8086汇编和连接器对setup.s文件进行编译生成setup文件
# -s表示要取出目标文件中的符号信息
#
boot/boot: boot/boot.s tools/system
(echo -n "SYSSIZE = (";ls -l tools/system | grep system \
| cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s
cat boot/boot.s >> tmp.s
$(AS86) -o boot/boot.o tmp.s
rm -f tmp.s
$(LD86) -s -o boot/boot boot/boot.o#
# 当执行"make clean"时,就会执行以下命令,去除所有编译连接生成的文件
# "rm"是文件删除命令,选项-f含义是忽略不存在的文件,并且不显示删除信息
# (cd mm;make clean)表示进入mm/目录,执行该目录Makefile文件中的clean规则
#
clean:
rm -f Image System.map tmp_make boot/boot core
rm -f init/*.o boot/*.o tools/system tools/build
(cd mm;make clean)
(cd fs;make clean)
(cd kernel;make clean)
(cd lib;make clean)#
# 该规则首先执行上面的clean规则,然后对linux/目录进行压缩,生成backup.Z压缩文件。
# "cd .."表示退到linux/的上一级(父)目录
# "tar cf - linux"表示对linux/目录执行tar归档程序,-cf表示需要创建新的归档文件
# "| compress -"表示将tar程序的执行通过管道操作('|')传递给压缩程序compress,并将压缩程序的输
#出存成backup.Z文件
# sysn同步命令迫使缓冲块数据立即写盘并更新超级块
#
backup: clean
(cd .. ; tar cf - linux | compress16 - > backup.Z)
sync#
# 该规则用于各文件的依赖关系。创建这些依赖关系是为了给make用来确定是否需要重建一个目标对象
# 比如当某个文件头被改动过后,make就通过生成的依赖关系,重新编译与该头文件有关的所有*.c文件。
# 具体方法如下:
# 使用字符串编辑程序sed对Makefile文件(这里即是自己)进行处理,
# 输出为删除Makefile文件中"### Dependencies"行后面的所有行,并生成tmp_make临时文件
# 然后对init/目录下的每一个C文件(其实只有一个C文件main.c)执行gcc预处理操作
# -M标志告诉预处理程序输出描述每个目标文件相关性的规则,并且这些规则符合make语法
# 对于每一个源文件,预处理程序输出一个make规则,其结果形式是相应源程序文件的目标文件名加上其依赖关系--该源文件中包含的所有头文件列表
# "$$i"实际上是$($i)的意思,"$i"是前面shell变量的值
# 然后把预处理结果都加到临时文件tmp_make中,然后将该临时文件复制成新的makefile文件
#
dep:
sed '/\#\#\# Dependencies/q' < Makefile > tmp_make
(for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make
cp tmp_make Makefile
(cd fs; make dep)
(cd kernel; make dep)
(cd mm; make dep)### Dependencies:
init/main.o : init/main.c include/unistd.h include/sys/stat.h \
include/sys/types.h include/sys/times.h include/sys/utsname.h \
include/utime.h include/time.h include/linux/tty.h include/termios.h \
include/linux/sched.h include/linux/head.h include/linux/fs.h \
include/linux/mm.h include/asm/system.h include/asm/io.h include/stddef.h \
include/stdarg.h include/fcntl.h


转自:http://blog.chinaunix.net/uid-26435987-id-3374592.html

相关文章:

快速滚动_方老师教滚动快速作文

五年级第一单元作文集阴沉天空中有一小束照着你的阳光。亲爱的孩子&#xff0c;让时间在知识的枝条上、智慧的绿叶上、成熟的果实上留下它勤奋的印痕&#xff01;罗婉汀作文集自律且努力&#xff0c;别让生活太安逸。亲爱的孩子&#xff0c;耕耘者最信得过自己的汗水&#xff0…

liunx复制备份命令,copy命令,liunx命令

2019独角兽企业重金招聘Python工程师标准>>> 拷贝到的文件夹 /usr/local/文件夹/需要拷贝的路径文件夹 /usr/local/tomcat/webapps/文件夹/复制命令cp -r /usr/local/文件夹/ /usr/local/tomcat/webapps/文件夹/ 转载于:https://my.oschina.net/u/2336787/blog/635…

20.Valid Parentheses (python)

这道题主要用栈来实现的。什么是栈呢&#xff0c;参照书上的后缀表达式的例子谈谈自己的理解&#xff0c;栈最明显的特征是先进后出。所以可以有效的结合题目中 &#xff08;&#xff09;对匹配问题&#xff0c;可以把从列表中获取的符号先存到栈中。 首先建个空列表用于映射栈…

The HipHop Virtual Machine

目前Facebook已将该HipHop虚拟机开源&#xff0c;源代码发布在GitHub上。关于该工具的技术原理在Facebook的开发者页面上有一篇详细的文章介绍&#xff0c;查看这里。如果看不到的可以看下面的转载&#xff1a;Were always looking for ways to make our computing infrastruct…

node建立博客系统遇到的问题,1,乱码。2,multer的使用错误。3使用session问题...

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;乱码 文件存储为utf-8格式后还是报错。 原来这个设置只对新建文件编码有效&#xff0c;旧文件不处理的&#xff0c;我还以为旧文件也给转换了。 2&#xff0c;上传文件的multer模块使用错误。 throw new Ty…

python时间函数入门_calendar在python3时间中有哪些常用函数?怎么用?

想要在python中写代码游刃有余&#xff0c;没有函数的支持是万万不行的。很多小伙伴反映&#xff0c;最近函数的应用知识不够了&#xff0c;所以小编挑选了python3时间中的函数&#xff0c;希望可以帮助大家在处理日历方面更加的迅速。其他更多的函数&#xff0c;大家也可以自行…

9.spark core之共享变量

简介 spark执行操作时&#xff0c;可以使用驱动器程序Driver中定义的变量&#xff0c;但有时这种默认的使用方式却并不理想。 集群中运行的每个任务都会连接驱动器获取变量。如果获取的变量比较大&#xff0c;执行效率会非常低下。每个任务都会得到这些变量的一份新的副本&…

【CSDN2012年度博客之星】需要您的一票,感谢大家的支持

从2004年9月&#xff0c;本人一直将自己工作和学习经验写成博文分享给大家&#xff0c;本人有幸被选为&#xff12;&#xff10;&#xff11;&#xff12;年&#xff18;&#xff18;位候选博客之星&#xff0c;如果各位IT‘er喜欢我的博文&#xff0c;请投我一票&#xff0c;做…

双绞线和同轴电缆

线缆作为连接器件&#xff0c;相当于不同系统之间沟通的“桥梁”&#xff0c;选择线缆类型的好坏&#xff0c;也决定着传输信号的质量&#xff0c;影响着整个系统的稳定性。 &#xff08;1&#xff09;特性阻抗 先说一下关于线缆在传输过程中的特性阻抗问题。 特性阻抗是指电缆…

keras训练完以后怎么预测_使用Keras建立Wide Deep神经网络,通过描述预测葡萄酒价格...

你能通过“优雅的单宁香”、“成熟的黑醋栗香气”或“浓郁的酒香”这样的描述&#xff0c;预测葡萄酒的价格吗&#xff1f;事实证明&#xff0c;机器学习模型可以。在这篇文章中&#xff0c;我将解释我是如何利用Keras(tf.keras)建立一个Wide & Deep神经网络&#xff0c;并…

如何发布自己的NPM包(模块)?

1.注册NPM 账号 注册地址&#xff1a;https://www.npmjs.com/。 2.初始化自己要发布的项目 搭建本地环境&#xff1a;安装node.js&#xff0c;包含了npm命令。新建目录&#xff0c;在该目录下&#xff0c;初始化项目&#xff1a;npm init。按照提示填写初始化信息&#xff0c;我…

PHP对于浮点型的数据需要用不同的方法去解决

Php: BCMathbc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale]&#xff0c;比如string bcadd(string $left_operand, string $right_operand[, int $scale])&#xff0c;如果scale没有提供&#xff0c;就用bcscale的缺省值。这里大数直接用一个…

mysql提示符详解_MySQL字符集使用详解

查看字符集相关变量mysql> show variables like character%;————————–——————————-| Variable_name | Value |————————–——————————-| character_set_client | latin1 || character_set_connection | latin1 || character_set_database…

Apache漏洞修复

今天受同事的委托&#xff0c;修复一台服务器的Apache漏洞&#xff0c;主要集中在以下几点&#xff1a; 1.Apache httpd remote denial of service&#xff08;中危&#xff09; 修复建议&#xff1a;将Apache HTTP Sever升级到2.2.20或更高版本。 解决方法&#xff1a;升级HTT…

Java遍历Map对象的四种方式

关于java中遍历map具体哪四种方式&#xff0c;请看下文详解吧。 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 1 2 3 4 Map<Integer, Integer> map new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Intege…

Tokyo Cabinet 安装

tokyocabinet :一个key-value的DBM数据库&#xff0c;但是没有提供网络接口&#xff0c;以下称TC。 tokyotyrant :是为TC写的网络接口&#xff0c;他支持memcache协议&#xff0c;也可以通过HTTP操作&#xff0c;以下称TT。 Tokyo Cabinet 是一款 DBM 数据库&#xff0c;Tokyo …

Packagist / Composer 中国全量镜像

Packagist 镜像 请各位使用本镜像的同学注意&#xff1a; 本镜像已经依照 composer 官方的数据源安全策略完全升级并支持 https 协议&#xff01;请各位同学 按照下面所示的两个方法将 http://packagist.phpcomposer.com 修改为 https://packagist.phpcomposer.com 还没安装 co…

centos yum mysql-devel 5.5_CentOS 6.5下yum安装 MySQL-5.5全过程图文教程

在linux安装mysql是一个困难的事情&#xff0c;yum安装一般是安装的mysql5.1&#xff0c;现在经过自己不懈努力终于能用yum安装mysql5.5了。下面通过两种方法给大家介绍CentOS 6.5下yum安装 MySQL-5.5全过程&#xff0c;一起学习吧。方法一&#xff1a;具体方法和步骤如下所示&…

py 的 第 31 天

1.osi 7层模型 5层&#xff1a; 应用层 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 4层&#xff1a; 应用层 应用层 表示层 会话层 传输层 网络层 物理层 数据链路层 物理层 注意&#xff1a;7层背会。 2.tcp的三次握手&…

mysql实训报告_mysql数据库技术》实验报告.doc

mysql数据库技术》实验报告MySQL数据库技术实验报告系 别班 级学 号姓 名地点地点机房课程名称MySQL数据库技术实验名称实验1 MySQL的使用实 验 过 程目的要求&#xff1a;(1)掌握MySQL服务器安装方法(2)掌握MySQL Administrator的基本使用方法(3)基本了解数据库及其对象实验准…

PHP中魔术方法的用法

PHP中魔术方法的用法 /** PHP把所有以__&#xff08;两个下划线&#xff09;开头的类方法当成魔术方法。所以你定义自己的类方法时&#xff0c;不要以 __为前缀。 * */// __toString、__set、__get__isset()、__unset() /*The __toString method allows a class to decide how …

“互联网+”的时代,易佳互联也随着时代步伐前进着

一谈到互联网&#xff0c;我想大家的心里都不陌生&#xff0c;咱们总理工作报告中提出&#xff0c;制定“互联网”行动计划&#xff0c;推动移动互联网、云计算、大数据、物联网等与现代制造业结合&#xff0c;促进电子商务、工业互联网和互联网金融健康发展&#xff0c;引导互…

PHP 获取数组最后一个值

<?PHP$array array(1,2,4,6,8);echo end($array);?> <?PHP$array array(1,2,4,6,8);echo array_pop($array);?> <?PHP$array array(1,2,4,6,8);$k array_slice($array,-1,1);print_r($k); //结果是一维数组?>

解决nginx 502 bad gateway--团队的力量

nginx 502 bad gateway可以采取客户端强制刷新的方法&#xff0c;但是真正的解决要么改配置或者放CDN上。遇到这个问题&#xff0c;首先是有人发现可以加index.html访问&#xff0c;因为我们是线上网站&#xff0c;没有太多时间去研究&#xff0c;所以先临时这样&#xff1b;然…

MYSQL企业常用架构与调优经验分享

小道消息&#xff1a;2016爱维Linux高薪实战运维提高班全新登场,课程大纲&#xff1a;http://www.iivey.com/666-2一、选择Percona Server、MariaDB还是MYSQL1、Mysql三种存储引擎MySQL提供了两种存储引擎&#xff1a;MyISAM和 InnoDB&#xff0c;MySQL4和5使用默认的MyISAM存储…

mysql 5.x 安装_mysql 5.5.x zip直接解压版安装方法

到官网下载mysql-5.5.10-win32.zip&#xff0c;然后将mysql解压到任意路径&#xff0c;如&#xff1a;C:\mysql-5.5.10-win32打开计算机->属性->高级系统设置->环境变量&#xff0c;新建一个环境变量&#xff0c;变量名为&#xff1a;MYSQL_HOME&#xff0c;变量值为你…

阿里云移动数据分析服务使用教程

阿里云大学课程&#xff1a;阿里云移动数据分析服务使用教程课程介绍&#xff1a;移动数据分析 (Mobile Analytics) 是阿里云推出的一款移动App数据统计分析产品&#xff0c;为开发者提供一站式数据化运营服务&#xff1a;通用的多维度用户行为分析、数据开放并支持自定义分析、…

Apache的服务端包含--SSI

SSI定义&#xff1a; SSI&#xff08;服务器端包含&#xff09;提供了一种对现有HTML文档增加动态内容的方法。 作用&#xff1a; 一般出于效率的考虑&#xff0c;网站都会把内容尽可能的静态化成HTML文件&#xff0c;但是网站页面的布局往往比较复杂&#xff0c;各个部分的更新…

mysql校对规则_MySQL中的校对规则

详解MySQL中的校对规则Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 7Server version: 5.6.14 MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered…

c#操作oracle的通用类

using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text;using DDTek.Oracle;using System.Configuration;namespace Common{ <summary> /// OracleHelper 的摘要说明。 /// </summary> …