想要接触内核,最好的莫过于动手玩一下啦,一开始,为了避免麻烦产生,就在完全无害的虚拟机上玩一下。
在虚拟机上安装Ubuntu7.10,当然,安装过程没有什么悬念,有几点值得一提:
1. 硬盘空间非配,如果你硬盘很紧张,那么至少请分配6G,Ubuntu7.10装完,更新过一次,然后会占用掉大概4.7G的硬盘空间,一个解压缩后的内核300M+,编译的时候还要多用一些,所以,明白了吧。
2. 虚拟机我这里用的vmware,一般来说都会用这个吧,毕竟是专业的,微软的virtual pc勉勉强强,不是很好用。我用的是vmware 6,用了很后悔,因为好像我用的时候还是不得不选vmware 5兼容,觉得这么搞很没有意思。如果你还没有安装过,建议用vmware 5.5好了。当然如果你的操作系统是vista,那么还是用6吧。
3. 安装vmware tools,最好安装,至少有两个好处,1,可以调分辨率,2,可以使用共享文件夹。不要用rpm方式,我在虚拟机上装过很多linux发行版,只有redhat 9可以用rpm方式安装成功,其他的能安装成功的还没有看到过。所以,还是用tarball自己装吧。我用的vmware 6里面带的tarball,其中用于支持共享文件的那部分无法编译通过。要手动修改代码。我修改的是vmware-tools-distrib/lib/modules/source/vmhgfs.tar中的compat_slab文件中的一个宏,kmem_cache_create这个函数,在2.6.22版本以后的内核中,应该只接受5个参数了,但是不知道为什么ubuntu7.10虽然内核已经是2.6.22以后的了,但是那个函数的版本还是老的版本,也即,应该接受6个参数。所以这里要那个对应的宏给改掉,就可以编译通过了。
关于虚拟机上准备好Ubuntu7.10我就说这么多吧。
然后就是编译环境的问题,一开始我不知道的,从www.kernel.org下载了一个最新的stable内核,就想开始玩了,结果连make menuconfig都没法执行。晕倒。原来还需要安装一些东西的。
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
上面一个是必须的,有g++什么的,下面一个也是网上看来的,不知道什么用处。
装完上面两个东西,就可以make config或者menuconfig或者oldconfig,都可以了。网上看到的一个文章是说,从/boot里面直接拷贝一个config过来比较好,那个就是比较适合ubuntu7.10的配置。我就这么尝试了一下,嗯,可以编译的,我下的内核是2.6.24版本的,用了那个boot里面的config,太慢了,肯定是东西太多了。1.86G双核的CPU,虚拟机给了512M内存,编译开始了5分钟左右,我开始敲这篇文章,现在这篇文章我算是写到这里告一段落了,但是内核还没有编译完成,够慢了吧。

