⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
标档」,这样一来,当&nbsp;我们一去make all时,由於all是由progs所构成,因此会&nbsp;<BR>跳到第18行去,而第18行&nbsp;的$(PROGS)是cshow,为做本make最终产生的档案,为一&nbsp;<BR>可执行档,第20行的cshow.o&nbsp;便是最终的目的档,那cshow和cshow.o又是如何产生&nbsp;<BR>的?这和第22、25、28行有关,&nbsp;这几行是利用下一节的「字尾规则」,稍後再论&nbsp;<BR>。&nbsp;&nbsp;<BR>&nbsp;<BR>  范例一中第32和35行是makefile中另外常见的规则,其目的不是「产生」目的&nbsp;<BR>档&nbsp;,而是去「删除」某些档案,35行的动作包含在32之中,35行的目的是删除可&nbsp;<BR>执行档&nbsp;(rm -f $(PROGS));而32行会先执行35行的动作,再去删除*.o和*~的档&nbsp;<BR>;若是我&nbsp;们更新了一大群source的部份时,最好要make clean,否则仍会发生.&nbsp;<BR>o和其source&nbsp;间版本不同的错误。&nbsp;&nbsp;<BR>&nbsp;<BR>字尾规则&nbsp;&nbsp;<BR>  通常我们会以特定的字尾来表示不同档案的种类,如.c&nbsp;便是代表c语言的原始&nbsp;<BR>档&nbsp;,&nbsp;而.o&nbsp;通常代表此档经特定的编译程式所产生的目的档,由於在同一系统中&nbsp;<BR>同一语&nbsp;言原始档的编译程式皆相同,我们便可为这些原始档定出一定的编译方式&nbsp;<BR>,这便是字&nbsp;尾规则(Suffix rule)的用意所在,字尾规则通常是在於定义&nbsp;<BR>Makefile的内建依存&nbsp;规则;字尾规则的语法如下:&nbsp;&nbsp;<BR>&nbsp;<BR>.字尾一.字尾二:&nbsp;&nbsp;<BR>    命令&nbsp;&nbsp;<BR>&nbsp;<BR>  其中的意义是字尾一的档案经「命令」的作用後产生字尾二的档案,如范例一&nbsp;<BR>中&nbsp;的第22和23行:&nbsp;&nbsp;<BR>&nbsp;<BR>22&nbsp;.c.o:&nbsp;&nbsp;<BR>23&nbsp;$(CC)&nbsp;$(CFLAGS)&nbsp;-c&nbsp;-o&nbsp;$*.o&nbsp;$&lt;&nbsp;&nbsp;<BR>  这便是一个字尾规则,22阐述.c和.o的关系,23行便是描述.o如何由.c产生,&nbsp;<BR>其&nbsp;中$*和$&lt;请参考表二的说明,例如有个test.c,在23行展开时便成为:&nbsp;&nbsp;<BR>&nbsp;<BR>  gcc&nbsp;-fomit-frame-pointer&nbsp;-O2&nbsp;-s&nbsp;-c&nbsp;-o&nbsp;test.o&nbsp;test.c&nbsp;&nbsp;<BR>&nbsp;<BR>  而且因为$&lt;的关系,若是test.o的时间比test.c还晚,则不进行编译的动作,&nbsp;<BR>这&nbsp;项特性能节省编译的时间,避免不必要的动作,因为有这项特性,我们更须注&nbsp;<BR>意一件&nbsp;事:当读者ftp下一个更新的版本至旧有的程式项中时,若是须要重新编译&nbsp;<BR>,在make&nbsp;之前最好先make clean,免得同一档名的.o虽比.c新,但真正的内容版&nbsp;<BR>本却比.c旧。&nbsp;&nbsp;<BR>&nbsp;<BR>  「空字尾」规则是字尾规则的特殊形态,所产生的档案便是依存档去掉字尾的&nbsp;<BR>情&nbsp;况,一般情况中用於产生最後的可执行档,如范例一中的第28、29及30行,第&nbsp;<BR>29行的&nbsp;实际作用,便是将.o档连结成最後的档案,第30行再将其权限改变成可执&nbsp;<BR>行的形式。&nbsp;&nbsp;<BR>&nbsp;<BR>  第42行也是「空字尾」规则,主要目的在於产生.depend档,在.depend档中记&nbsp;<BR>载&nbsp;各依存档彼此的关系,make在执行时会参考到此档。&nbsp;&nbsp;<BR>&nbsp;<BR>多档案程式&nbsp;&nbsp;<BR>  make有一个很方便的特性是对於多档案的程式,能作完善的管理。所谓的多档&nbsp;<BR>案&nbsp;程式,就是程式本身由多个.c所组成,只要在makefile中定好档案间的关系,&nbsp;<BR>接下来&nbsp;就无需挂虑到底那一档需要编译了。对於多档案程式,一般的方式是保留&nbsp;<BR>个别对应到&nbsp;.c的.o档,连结时再把各个.o连在一起,这个方式的好处在於当修改&nbsp;<BR>了其中之一的.c&nbsp;後,make便只需重新编译修改过的即可,真是省时又方便,接下&nbsp;<BR>来我们就利用图一的&nbsp;这个程式来说明。&nbsp;&nbsp;<BR>&nbsp;<BR>图一:&nbsp;&nbsp;<BR>&nbsp;<BR>main&nbsp;&nbsp;<BR>|&nbsp;&nbsp;<BR>--------------+-------------&nbsp;&nbsp;<BR>|&nbsp;|&nbsp;|&nbsp;&nbsp;<BR>|&nbsp;|&nbsp;|&nbsp;&nbsp;<BR>main.o&nbsp;input.o&nbsp;output.o&nbsp;&nbsp;<BR>|&nbsp;|&nbsp;|&nbsp;&nbsp;<BR>|&nbsp;|&nbsp;|&nbsp;&nbsp;<BR>main.c&nbsp;input.c&nbsp;output.c&nbsp;&nbsp;<BR>&nbsp;<BR>  图一是main这个程式的结构,主要由main.o、input.o和output.o组成,&nbsp;<BR>main.o、&nbsp;input.o和output.o各自依存於如图的叁个.c档,这般的档案结构是很常&nbsp;<BR>见的方式,对&nbsp;於如此的多档案程式,我们只需修改范例一中的第13行:&nbsp;&nbsp;<BR>&nbsp;<BR>  PROGS_O&nbsp;=&nbsp;main.o&nbsp;input.o&nbsp;output.o&nbsp;&nbsp;<BR>&nbsp;<BR>  如此一来,make便能自动的决定何时需要、何时不需重新作编译的动作。&nbsp;&nbsp;<BR>&nbsp;<BR>核心重组&nbsp;&nbsp;<BR>  Linux本身便附有核心程式的原始码,这使得使用者可以很方便的&quot;制造&quot;出一&nbsp;<BR>个&nbsp;核心程式出来,尤其是自行更改或是向外取得某部份原始程式後、或是想要更&nbsp;<BR>改对一&nbsp;些设备的支援时,便是重编核心的时机,&quot;重编核心&quot;好像是一件多麽不同&nbsp;<BR>的事,其实&nbsp;真正的动作也只是再去编译、连结出一个程式,而且所编连出的核心&nbsp;<BR>,不管是由lilo&nbsp;或是loadlin.exe所启动,在编译的过程中原来的核心程式并未先&nbsp;<BR>删除,唯有各部份&nbsp;的程式都编好後才去组成核心程式,所以重编核心这件事是&nbsp;<BR>Linux爱好者所不可放弃&nbsp;的一件事,因为每台PC的设备并不相同,核心依实际的情&nbsp;<BR>况去芜存菁後,才能发挥最&nbsp;大的功用。&nbsp;&nbsp;<BR>&nbsp;<BR>  当安装了必要的套件後,Linux的核心原始程式放在/usr/src/linux之中,这&nbsp;<BR>儿&nbsp;linux是一个连结档,连结到不同的版本子目录,要重编核心,需以root签入或&nbsp;<BR>是以&nbsp;su命令转成root身份,当成为root後,只需键入cd ~/linux便可进入上述的&nbsp;<BR>原始程&nbsp;式子目录内;自十几年前的CP/M作业系统开始,至今天的DOS、OS/2、&nbsp;<BR>NextStep至於&nbsp;未来的Windows或是NT,我们一般的使用者很难一窥作业系统的真正&nbsp;<BR>面目,更遑论去&nbsp;自行修改了,但在此我们见到的是一套有着多人、多工、网路支&nbsp;<BR>援等完整的作业系统&nbsp;,同时又紧紧的配合PC的硬体,以PC的观点来发展,这样的&nbsp;<BR>作业系统,怎不令人窝心&nbsp;呢?而且程式码完全公开,是研究作业系统不可多得的&nbsp;<BR>典范,就是此原因,Linux还&nbsp;在不断发展中,更重要的一点是使用者再也不是一个&nbsp;<BR>旁观者,若是发现那儿有bug,&nbsp;更可提笔上阵,自行创作一番。&nbsp;&nbsp;<BR>&nbsp;<BR>  在原始程式子目录下,有许多不同的子目录,如BOOT、FS、INIT等,每个子目&nbsp;<BR>录&nbsp;有着不同功能的source,如FS便是管理File System的部份,对作业系统有兴&nbsp;<BR>趣的读&nbsp;者我们以後再来专论;由於这儿的的Makefile太过冗长,因此笔者不引述&nbsp;<BR>,若是看不&nbsp;太懂Makefile的一些Shell Script指令,可以参考陈仁和所着「&nbsp;<BR>Linux管理与操作手&nbsp;册--Shell的使用」。&nbsp;&nbsp;<BR>&nbsp;<BR>  接下来我们便要实际的穿越编译核心,第一步便是以root的身份进入source子&nbsp;<BR>目&nbsp;录,接下来通常是make clean,作用是删除旧的.o各核心程式及相关档案,若&nbsp;<BR>是之&nbsp;前并没更改source,此步骤当然可省略;接下来是更改设定,这也是要重编&nbsp;<BR>核心的原&nbsp;因之一,键入make config後,便会询问一连串的问题,这些问题便是&nbsp;<BR>config.in的&nbsp;内容.&nbsp;&nbsp;<BR>&nbsp;<BR>  整体设定过程可以看得出有些杂乱无章,这是因为Linux所支援的是因应硬体&nbsp;<BR>发&nbsp;展的结果,所以看得出是叠床架屋的样子,config的结果是设定一些变数以供&nbsp;<BR>make时&nbsp;使用,在Makefile中可以见到若某些变数存在时便包含入对应的子目录,&nbsp;<BR>在编译时就&nbsp;会一同处理。&nbsp;&nbsp;<BR>&nbsp;<BR>  设定完成後,接下来是建立.depend档,此档记录真正要组成核心的档案间之&nbsp;<BR>依&nbsp;存关系,而make dep或make depend都可达到相同的目的。&nbsp;&nbsp;<BR>&nbsp;<BR>  再过去Linux是由lilo所输入解压缩和启动的,所以直接键入make zlilo便可&nbsp;<BR>,&nbsp;此时便开始约十到二十分钟的编译,若是想继续工作,可切换到别的console去&nbsp;<BR>,或&nbsp;者是键入:&nbsp;&nbsp;<BR>&nbsp;<BR>  make&nbsp;zlilo&nbsp;&amp;&nbsp;1&gt;/dev/null&nbsp;2&gt;/dev/null&nbsp;&nbsp;<BR>&nbsp;<BR>将工作送至背景,将讯息抑制。&nbsp;&nbsp;<BR>&nbsp;<BR>  除了lilo,我们也可由A磁碟机来启动,这时便需以make zdisk来将核心送到&nbsp;<BR>开&nbsp;机片上;在光碟月刊八月号上介绍了另一个由DOS来启动的程式loadlin.exe,&nbsp;<BR>而且也&nbsp;出现了umsdos的安装方式,这对使用者来说是莫大的方便,因为在过去想&nbsp;<BR>安装Linux&nbsp;的人来说,要重割硬碟是件很不便的事,而且事先旧有的资料要如何处&nbsp;<BR>理也是很伤脑&nbsp;筋,这使得想认识Linux的人裹足不前,现在不利因素皆已去除,方&nbsp;<BR>便大门已开,读&nbsp;者可利用八月号的光碟直接安装(不过请先取得Q和U套件),就把&nbsp;<BR>Linux直接装入DOS的&nbsp;linux子目录,再用开机片开机,对於原来的程式或资料不会&nbsp;<BR>造成损坏,就能使Linux&nbsp;动起来,若是再利用多重开机和loadlin.exe,在一开机&nbsp;<BR>就能选择作业系统,是再也&nbsp;方便不过的事了,如果是利用这种方式开机者,重编&nbsp;<BR>核心要利用make zImage来作,&nbsp;并在组译完成後,将zImage拷到loadlin.exe能读&nbsp;<BR>到的地方,如/dev/hda0/loadlin(&nbsp;Linux和DOS不在同一分割中)或&nbsp;<BR>/DOS/loadlin(使用umsdos),记得要cp过去,不然&nbsp;重组徒然浪费时间而已。&nbsp;&nbsp;<BR>&nbsp;<BR>  Linux是一个极新的领域,其免费、强大的特性,加上源源不断的支援,与其&nbsp;<BR>它&nbsp;作业系统比较起来丝毫不逊色。多人、多工早就是她的基本功能,图型介面漂&nbsp;<BR>亮又好&nbsp;用,但Linux并不是完美无瑕,当某天抱怨完不便和缺点後,便是写个程式&nbsp;<BR>「修理」一番的最好时机。&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;202.116.64.6]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -