从编译Linux kernel说开来

从编译Linux kernel说开来

  编译内核的概念是linux最帅的地方,windows是不会提供操作系统的源代码的,而linux则不然,操作系统的源代码全部都是公开的。 对于发行版而言,比如rh9,debian,suse等,都提供编译好的kernel供用户使用,但是这样的kernel未必是用户需要的,这时就可以自 己对 kernel的源代码进行编译,然后替换掉原来的kernel。

  其实编译kernel并不恐怖,只是一件很简单的事情,就几条 指令而已。/usr/src/linnux是kernel源代码常用的放置目录,进入此目录,执行make menuconfig,会出来一个图形界面,里面是kernel的各种配置和选项,把自己喜欢的驱动和配置选上,不需要的去除即可。然后make dep,这是检查新的配置是否正确和做一些初始化工作。然后就是make bzImage,这是真正开始编译kernel,bzImage是编译后的kernel文件名,可以为任意名字,只是一般会以bzImage、 zImage或vmlinuz之类为名。如果编译成功会生成一个bzImage文件,这就是kernel了。系统启动最主要的就是调用这个文件,里面包括 了文件系统、硬件驱动、网络基础、内存管理、进程管理等,在/boot下面有一个bzImage或者vmlinuz之类的文件就是原有的kernel,只 要把编译后的kernel文件(bzImage)替换掉就换成新的kernel了,或者用新名字复制到/boot下,再将grub或lilo的配置文件修 改一下,下次启动系统的时候即可使用新的kernel。下面是make modules,这是编译驱动,或者说叫模块,在linux下驱动可以和kernel编译在一起,也可以编译成单独的模块文件,如果是第一种, kernel启动的时候就会自动尝试载入驱动,第二种则是需要的时候手工加载驱动,也可以手动卸载。这是windows没有的功能,比如显卡的驱动在 windows下不重新启动系统是无法更新的,但在linux下却可以。比如对显卡做升级动作的时候其实就是在编译module,并卸载旧驱动,加载新驱 动,整个步骤无需重启系统。最后一步,就是make modules_install,这个步骤是在/lib/modules下面生成一个按照kernel版本号为格式的目录,再将编译好的modules复 制进去。kernel启动的时候会通过这样的路径搜索modules文件,类似windows的system32目录。

  写了这么多, 很多没玩过linux的人看了会很迷糊,但了解一些相关认识还是很有趣的,因为这才是linux好玩的地方,一个随便捏来捏去的操作系统,可以满足某些人 士的变态心理-_-# windows可以运行的硬件平台很有限,因为不公开,而且尺寸也很大,linux却因为可以自己编译,所以支持几乎所有的硬件平 台,x86,cs51,avr,pda,手机,alpha,大型机等等。同时尺寸还很小,一般编译一个可以运行到shell的系统,只要4、5M的尺寸就 可以搞定。加一个x-window也就30M左右,这在windows是不可想象的。这都是kernel公开,可以手动编译的好处和乐趣....
 

2006-05-10 20:55 (根据聊天纪录修改)

你可能感兴趣的:(从编译Linux kernel说开来)