本文始作于2012年1月24日,刊登于人人网,于2013年2月13日迁移至此
第一个实验最后一个任务是修改boot/build.c文件,使其能正常make,在知道要干什么之前我还纳闷了半天,这不是已经写好了么,怎么还要改,再改不就错了么,后来问了sunner才知道,他告诉我如果我现在 > make BoolImage 系统就会报错。果然:
shell> make BootImage
tools/build boot/bootsect boot/setup none > Image
Root device is (3, 1)
Boot sector 512 bytes.
Setup is 848 bytes.
Unable to open 'system'
make: *** [BootImage] 错误
我初步猜想可能是我又改过boot/下面的文件,make的时候可能就不能像以前那样了,因此需要修改了。于是就开始学习Makefile。sunner给了一份压缩文件,里面解压出来是一对网页,讲的就是Makefile,我上网搜了这个网页,还挺著名:http://blog.csdn.net/haoel/article/category/9198/3 名字叫 跟我一起写 Makefile(一 ~ 十四),共十四篇,我就看了前两篇,感觉make就是一个编译脚本,由make执行。正常我们写.c文件只要写 shell> gcc a.c 就可以了,但是如果是一个工程,编译一次就得编译很多文件,这个文件里设定了都编译哪些文件,现编译哪个后编译哪个,还可以根据一些条件自动进行判断该编译哪个。总体格式就是:
target ... : prerequisites ...
command
...
...
其中:
target 就是 a.out
prerequisites 就是 a.c
commnd 就是 gcc a.c 或者其他的命令行语句
后来又看了《内核剖析》解释这个文件,我最后作出的修改竟然就是把代码底下所有关于system的处理都注释掉!后来我就发邮件问sunner我做得对不对,于是sunner告诉我一句话,让我永生难忘:“机器全是你控制,你让它做什么,它就做什么”
shell> make BootImage
gcc -m32 -g -Wall -O2 -fomit-frame-pointer \
-o tools/build tools/build.c
tools/build.c: In function ‘main’:
tools/build.c:118: warning: dereferencing type-punned pointer will break strict-aliasing rules
tools/build.c:147: warning: dereferencing type-punned pointer will break strict-aliasing rules
tools/build boot/bootsect boot/setup none > Image
Root device is (3, 1)
Boot sector 512 bytes.
Setup is 848 bytes.
sync

浙公网安备 33010602011771号