Step 1:
下载最新的(或你想要的Linux内核源码)
下载地址:www.kernel.org
可以通过uname -a命令查看当前系统内核的版本好及编译时间
得到源码后,将其解压到某个目录下
推荐解压到~/linux/ 目录下,至于为什么,等我明白了再告诉你
Step 2:
打开终端,进入源代码目录下,比如:
cd ~/linux/linux-2.6.20.1/
进入后,安全起见,先 make mrproper 一下,
以清除目录下所有配置文件和先前生成内核时产生的中间文件
接下来将要进行内核配置,这是最难也是最关键的一步
有四种方法可完成这件事情:
#make config
#make menuconfig
#make xconfig
#make oldconfig
我用的是第二种,但这时问题来了,运行命令后发生错误,而且一堆
最关键的错误信息是少一个库
原来,Ubuntu安装时缺少很多东西,尤其是编程方面的,需要自己通过“源”来安装
所谓“源”,不清楚,大概就相当于Windows的在线升级程序吧
Ubuntu自己带的源不全,速度慢不说,有的还连不上,所以要自己添加一些源
把源设置好之后,就可以在线安装所需要的东西了
在这提醒一下使用Ubuntu的朋友:
使用源第一次进行自动更新的时候,Ubuntu里带的输入法也会更新
但这次的更新与上个版本不兼容,因此会导致输入法无法使用
我为这个问题郁闷半天,上网查很久才找到解决方法:
sudo apt-get remove fcitx
rm -R ~/.fcitx
sudo apt-get install fcitx
就是把原来的fcitx输入法卸掉,移除它在根目录下的配置文件(?好像是),然后重装
ok,言归正传,编译内核需要下面一些东西:
apt-get install libncurses5-dev (meke menuconfig要调用的)
apt-get install libqt3-headers (make xconfig要调用的)
上面列的不全,但你安装的时候,源会提示你,哪些包是推荐安装的
都装上就是了
如果连基本的编程库(gcc, make等)也没有的话
apt-get install build-essential
如果上面的东西都装完了,恭喜你,终于可以make menuconfig了
但先别急,相信你现在的系统正用得很爽
上网,声音,显示???什么问题都没有
但等你重新编译内核后,可能你就少些东西了,比如上不了网,声音没了等等
严重的连系统都进不了
为此,你最好把现在内核用的.config文件拷贝过来,当作模版
当你make menuconfig后,选倒数第二项:load config(好像是这个名字,记不清了)
把.config加载进来,这样你就能在原来内核的基础之上修改了
这时相信你只要别随便减去什么东西
编好内核后一样用得很爽
至于menuconfig里面数不清的选项都是什么意思
相信你即使很懂英文也看不太明白
我从网上找了一个解释其中一些选项的,发到了论坛上
后来发现黄诚那有更全的,真太有才了
但有一个选项,一般很少提到,就是如果你发现编译完之后
重启时进度条没有了
多半是因为你在Device-drivers==>Graphic ???==>Console???(路径记不清了)下有个
CONFIG_FRAMEBUFFER_CONSOLE,不能是M(动态加载),而是要×(编译进内核)
就是顺便提一下,如果你有这个问题,去找一找,呵呵
配置好后,强烈建议你把生成的.config文件备份一下
这样将来一旦有什么问题
你可以马上copy过来,在原来的基础上继续
Step 3:
接下来就简单了
如果你人品够好,下面四个命令之后就ok了:
make clean
make -j4 (-j4是让处理器分成四个线程来编译内核,速度快,推荐CPU好的使用)
make modules_install
make install
结束后重启,就可以在启动菜单上看到新内核了
我人品不够,或者说Ubuntu太另类
居然不给我生成initrd文件
上网查,原来要用下面的命令:
make-kpkg clean (kpkg具体什么作用不懂)
make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
其中--initrd必需要,不然生成不了initrd文件
--append生成多重镜像,也就是在启动菜单里看到的选项
Wing1是你自己取的镜像的名字
编号内核后,就会显示linux-2.6.20.1-custom最后两项是生成镜像包和头文件包
make完之后,会在上一层目录看到两个deb包
用dpkg -i命令安装这两个包就好了
安装内核及头文件包
sudo dpkg -i linux-image-2.6.22.1-2.6.22.1_2.6.22.1-2.6.22.1-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-2.6.22.1-2.6.22.1_2.6.22.1-2.6.22.1-10.00.Custom_i386.deb
这个过程结束后,/boot/grub/menu.lst中会自动添加新的启动项,不用再手动更改,非常方便。
重新启动即可进入新内核,这中方式应用在debian中,ubuntu同样适用,并且比传统的方式简便许多
这个时候,一切都弄好了
可以去/boot目录下看看Vmlinuz、initrd、System.map文件是否都在
然后看看/boot/Grub/menulist文件中的内容是否已经加上你新编译的内核
如果是,恭喜你,放心大胆的重启吧
重启后,就可以进入你自己编译的内核了
常规方式编译内核:
1.安装必要的工具包
包有:libncurses5-dev(menuconfig需要的)和essential
sudo aptitude install build-essential bin86 kernel-package
sudo aptitude install libqt3-headers libqt3-mt-dev
sudo aptitude install make
sudo aptitude install gcc //即使已经安装了gcc最好也更新一下
另外,在终端输入 sudo mki 然后连按两次“Tab”键看一下终端是否显示
mkinitramfs mkisofs
这两个工具在编译内核时用来生成 *.img文件的,没有的话安装一下
第二步 下载内核
到www.kernel.org下载新内核,当前最新的是linux-2.6.21.1.tar.bz2(原系统的内核是2.6.20-15-generic,如果你使用Nvadia的加速驱动的话,请用源里的Source,否则可能启动不了X)
第三步 编译前的准备
察看当前内核的版本
uname -a
2.6.15-26-server
如果下载的内核版本和当前的内核版本一样的话:
cd /lib/modules
将其下的文件夹改名
同时将/boot下一些东西也要改,改了以后还要修改/boot/grub/menu.lst
比较麻烦,建议最好下载比当前已安装版本高的内核
解压linux-2.6.21.1.tar.bz2得到的linux-2.6.16.2文件夹放到/usr/src下
sudo ln -s linux-2.6.21.1 linux //如果该文件夹下已经有名为linux的链接请先把它改为linux.old
第四步 开始编译
cd /usr/src/linux //以下所有的工作都在/usr/src/linux下完成
sudo make mrproper //去除.o的已编译文件
sudo make menuconfig //用menuconfig的话还需要另外两个工具包支持,叫什么名字我忘了,Ncurses?或者用
sudo make xconfig
接下来你就慢慢配置吧,配置完以后保存(系统中保存的一份内核配置文件是在/usr/src/linux 下名为.config,你也可以自己在别的地方另存一份)
sudo make dep //也许系统会提示现在不必要进行make dep,那就下一步
sudo make clean //清除旧数据
sudo make bzImage //编译内核,bzImage是你给该新内核起的名字,将保存到/usr/src/linux/arch/i386/boot/下
sudo make modules //编译模块
sudo make bzImage install //安装内核
sudo make modules_install //安装模块
sudo mkinitramfs -o /boot/initrd.img-2.6.21.1 2.6.21.1
安装完后/boot下将增加以下几个文件(用ls -l 查看)
lrwxrwxrwx 1 root root 15 2007-05-17 21:31 config -> config-2.6.21.1
-rw-r--r-- 1 root root 71023 2007-05-17 21:31 config-2.6.21.1
-rw-r--r-- 1 root root 39445347 2007-05-17 21:48 initrd.img-2.6.21.1
lrwxrwxrwx 1 root root 19 2007-05-17 21:31 System.map -> System.map-2.6.21.1
-rw-r--r-- 1 root root 795827 2007-05-17 21:31 System.map-2.6.21.1
lrwxrwxrwx 1 root root 16 2007-05-17 21:31 vmlinuz -> vmlinuz-2.6.21.1
-rw-r--r-- 1 root root 1703296 2007-05-17 21:31 vmlinuz-2.6.21.1
添加一个新的启动项 :
sudo vim /boot/grub/menu.lst
title Ubuntu, kernel 2.6.21.1
root (hd1,0) //注意分区名称
kernel /boot/vmlinuz-2.6.21.1 root=/dev/sdb1 ro
initrd /boot/initrd.img-2.6.21.1
boot
奶茶dsk 于 2007-10-04 13:12:09发表:
有的是F7,还是支持下。。:0L