1编写目的
2任务概述
2.1下载新内核
2.2修改新内核文件
2.3进行新内核编译
3操作步骤
3.1查看当前系统的内核版本
3.2下载新内核
3.3解压新版本内核
bzip2 -dlinux- 2.6.36.tar.bz2
tar -xvflinux-2.6.36.tar
使用命令:ln –s linux-3.1.1linux,对文件稍微修改一下,对文件夹创建文件链接,可以利用该链接直接进入该目录(linux):
/usr/src/linux
3.4安装必要工具
sudoapt-get install build-essential kernel-package libncurses5-devfakeroot
sudoaptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headerslibqt3-mt
安装结果如图:
下载完工具安装后执行一下更新:apt-getupdate,如下图:
3.5内核修改
3.5.1添加新的系统调用
3.5.2添加系统调用号
#defineNR_syscalls
3.5.3添加系统调用的处理函数
{
}
3.6清除以前编译内核时残留的.o
3.7asm、linux和scsi等链接是指向到新内核文件位置
为确保/usr/include/下的asm、linux和scsi等链接是指向要升级的内核源代码。它们分别链向源代码目录下的真正的、该计算机体系结构所需要的include子目录。执行以下代码:
# cd/usr/include/
# rm -r asm linux scsi
# ln -s /usr/src/linux/include/asm-generic asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
3.8配置内核,修改相关参数
3.8.1配置内核参数
n:不将该功能编译进内核。
m:将该功能编译成在需要时动态插入到内核中的模块。
单击“MainMenu”按钮,返回主配置窗口;
单击“Next”按钮,配置下一个配置项;
单击“Prev”按钮,配置上一个配置项。
选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于缩减内核,减少内核消耗的内存。与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
终端下,修改路径为:cd/usr/src/linux
使用图形界面命令:makexconfig
1)文件系统
请务必要选中ext3文件系统,
Filesystems--->
[*] Ext3 journalling file systemsupport
[*] Ext3 Security Labels
[*] JBD (ext3) debugging support
(一定要修改)
以上三项一定要选上,而且要内建(即标*).
网卡驱动:
DeviceDrivers--->
Networkingsupport--->
Ethernet (10 or 100Mbit)--->
<*> RealTek RTL-8139C+ PCI Fast Ethernet Adapter support(EXPERIMENTAL)
<*> RealTek RTL-8139PCI Fast Ethernet Adapter support
声卡驱动:
DeviceDrivers --->
Sound --->
<*> Sound cardsupport
Advanced Linux Sound Architecture--->
<*> Advanced LinuxSound Architecture
<*> Sequencersupport
< > Sequencer dummyclient
<*> OSS MixerAPI
<*> OSS PCM (digitalaudio) API[*] OSS Sequencer API
<*> RTC Timersupport
PCI devices--->
<*> Inteli8x0/MX440, SiS 7012; Ali 5455; NForce Audio;AMD768/8111
Open Sound System--->
< > Open SoundSystem (DEPRECATED)
3.8.2生成依赖信息,清除旧的编译结果
为确保所有有关文件都处于最新版本状态,需要输入命令:make clean
3.9编译二进制内核映像文件
3.10编译和安装模块
3.10.1编译模块
3.10.2安装模块
执行命令:makemodules_install(大概7分钟)
3.11配置启动信息和启动管理器
3.11.1配置启动信息
#cp/usr/src/linux/System.map /boot/System.map-2.6.39
#cp /usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-2.6.39
#cp
#mkinitramfs
#cd/boot;rm -f System.map vmlinuz
#ln -s vmlinuz-2.6.39 vmlinuz
#ln -s System.map-2.6.39 System.map
3.11.2配置启动管理器
执行完之后,通过菜单栏中“System”à“Administration”à“StartUpManager”打开管理器
在管理器里选择已编译的新内核版本:
3.12重启系统,查看内核版本
重启系统后在终端键入命令查看内核版本:uname–r
通过系统监视器查看内核版本信息:
到此,修改、编译内核完成。
4测试新系统内核
4.1编写测试程序
#include<stdio.h>
#define _NR_mycall 270;
int main()
{
}
修改ubuntu6.10上的/bin/sh
在ubuntu6.10上,/bin/sh默认是链接到/bin/dash的,当你从源代码编译软件的时候,dash可能会导致一些错误,至少我遇到过 类似问题,因此,我把/bin/sh的连接改为了/bin/bash。(估计中国绝大部分使用者都是用的bash吧)
如果你使用的就是6.10,那么应该这样做:
$ rm -f /bin/sh
$ ln -s /bin/bash /bin/sh
安装相关的软件,包括
a、Ubuntu Dapper Drake 6.06 LTS首选“软件”,自己想办法安装吧
b、build-essential,里面有gcc,make等东西要用到。
c. kernel-package,里面有make-kpkg要用。
d. qt库,主要是为了用make xconfig图形界面配置,你要安装libqt3-headers,libqt3-mt-dev等
e. libncurses5-dev,主要是用make menuconfig,我就用这个。
f. gtk库,用于make gconfig。安装gtk2.0,相关lib。
下载源码
到www.kernel.org下载当前最新版的源代码。下载的分类有p,f等区别,要下f类型的连接,不要下补丁。下好的源代码应该有40多M。然后解压缩源代码。
# tar xjvf linux-2.6.20.tar.bz2 -C/usr/src/linux-2.6.20
# cd /usr/src/linux-2.6.20
补丁
如果需要给内核源代码打补丁,首先下载相对应的补丁,在这里我们以patch.bz2代替。将其放到/usr/src目录下,然后用下来的命令来使其生效:
# bzip2 -dc /usr/src/patch.bz2 | patch -p1–dry-run
# bzip2 -dc /usr/src/patch.bz2 | patch-p1
注意!此时,你应该一直处于/usr/src/linux-2.6.20目录下。
第一个命令仅仅是试验性质的,它并不会对你的源代码产生什么变动。如果没有产生什么错误信息,你才能用第二个命令来对源代码产生真正的修补动作,如果第一条指令就出错了,请别继续执行下去,看看错误出在哪里。
同样,你也可以向你的内核提供预补丁,例如,一旦你发现有一个自己需要的特性在2.6.19 rc4中提供,但这个版本的内核并没有发行所有的完整源代码,只有patch-2.6.19-rc4.bz2是可选的。于是,你就可以提供这个patch 到2.6.18的内核中,但不是2.6.8.1,或者2.6.8.2。
创建链接
创建一个指向新内核代码的符号
sudo ln -s /usr/src/linux-2.6.16ck12linux
然后进入这个目录:
cd /usr/src/linux
清理
运行命令
make mrproper
来清一下包。
配置
可以用现有的配置文件作为新内核配置文件的基础,先复制已经存在的配置文件到/usr/src/linux目录中
cp /boot/config-`uname -r` ./.config
然后运行
sudo make menuconfig
或者
sudo make xconfig
如果希望自己配置,那么就在这里面详细选。对选项如何选择不熟悉的,请参考这篇文章。看不懂中文?参考这里。