2012.1.24 - Linux内核 - 操作系统的引导

Posted on 2013-02-13 22:58  SnakeHunt2012  阅读(286)  评论(0)    收藏  举报

本文始作于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