# Makefile for the simple example kernel.
#汇编语言的编译器其中参数-0表示以16位代码段运行,-a表示使汇编程序部分兼容于Minix asld.交换了[]与()的用法
AS86 =as86 -0 -a
#汇编语言的链接器,-0表示以16位代码段运行
LD86 =ld86 -0
#linux平台上的汇编语言的编译器
AS =gas
#linux平台上的汇编语言的链接器
LD =gld
#-M表示打印一个连接位图到标准输出.比如生成的.map文件,一个连接位图提供的关于连接的信息有如下一些:
#目标文件和符号被映射到内存的哪些地方
#普通符号如何被分配空间.
#所有被连接进来的档案文件,还有导致档案文件被包含进来的那个符号.
#-s表示忽略输出文件中所有的符号信息
#-x表示删除本地的所有符号
LDFLAGS =-s -x -M
#当执行make时就会首先执行all后边的内容Image,那么make就会自动跳到Image标签处继续执行
all: Image
#当执行到Image就会先执行boot,然后执行system,将boot文件开头的1个块后拷贝32个字节到Image,然后将system文件开头的第2个块后拷贝512个字节到Image第1个块后开始复制
#skip表示从输入文件(boot)开头跳过1个块后(32个字节)再开始复制,也就是将boot的第2个块开始复制32个字节到Image开头处
#seek表示从输出文件跳过1个块之后再开始复制
Image: boot system
dd bs=32 if=boot of=Image skip=1
dd bs=512 if=system of=Image skip=2 seek=1
sync
#dd表示指定大小块的拷贝一个文件,bs表示同时设置输入/输出大小为8192个字节也就是1个块位8192个字节,if=表示指定要拷贝的文件,缺省为标准输入,of=表示指定拷贝到的目标位置,默认为标准输出
#在此处/dev/fd0表示的是第一个软驱,也就是启动盘
disk: Image
dd bs=8192 if=Image of=/dev/fd0
sync;sync;sync
#编译head.s文件,此文件主要是显示屏幕上的字母信息
head.o: head.s
#当执行到system时就会去执行head.o标签处,然后使用gas编译head.s生成head.o文件,然后使用链接器生成system文件
system: head.o
$(LD) $(LDFLAGS) head.o -o system > System.map
#当执行到boot时,就会开始编译boot.s,然后使用汇编编译器生成boot.o文件,然后使用汇编链接生成boot文件,此文件主要是引导文件
boot: boot.s
$(AS86) -o boot.o boot.s
$(LD86) -s -o boot boot.o
clean:
rm -f Image System.map core boot *.o system