经过将近两天的努力,终于将内核编译成功。现做笔记如下:
1.安装好基本系统后,首先要做的是升级刚安装好的基本系统,否则在进行后面步骤的时候会遇到老的内核(我的是2.6.8-2)被移除的麻烦。
aptitude update
aptitude dist-upgrade
(aptitude比apt-get更稳定,建议用aptitude,但是用aptitude后就尽量不要再用apt-get)
2.系统升级完后,先安装等下需要用到的工具软件。按理说升级的时候这些软件大多都已经装好了,如果没装的,输入下面命令安装:
aptitude install kernel-package ncurses-dev fakeroot wget bzip2 module-init-tools procps libncurses5-dev initrd-tools
其中在安装initrd-tools时,可能出现找不到安装包的情况,这是因为新版本的ubuntu或debian已经用新的软件取代了
该软件,此时要保证含有命令mkinitramfs,mkinitramfs-kpkg
3.然后是下载最新的内核源码。最新的内核源码可以在http://www.kernel.org/上下载。你可以在其他机子或系统上下好后将其拷贝到/usr/src目录;也可以在命令行下用wget下载:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.20.tar.bz2
我安装的时候最新内核是2.6.16.20,现在已经有2.6.30.5了。
/**********************************************************************************************************************************************************************
如果要启用kprobes,需要做以下工作:
1.开启以下标志:为了使能kprobe,用户必须在编译内核时设置CONFIG_KPROBES,即选择在“Instrumentation Support“中的“Kprobes”项。
如果用户希望动态加载和卸载使用kprobe的模块,还必须确保“Loadable module support” (CONFIG_MODULES)和“Module unloading” (CONFIG_MODULE_UNLOAD)设置为y。
如果用户还想使用kallsyms_lookup_name()来得到被探测函数的地址,也要确保CONFIG_KALLSYMS设置为y,当然设置CONFIG_KALLSYMS_ALL为y将更好。
2.要使用kallsyms_lookup_name()函数,需要修改内核代码:打开/kernel/kallsyms.c,在kallsyms_lookup_name()函数下加上EXPORT_SYMBOL(kallsyms_lookup_name);
打开/include/linux/kallsyms.h,在kallsyms_lookup_name()函数前加上extern
这是另外一种说法,起始与上边两个步骤是一样。
首先,需要把 Kprobes 相关代码编译进内核,进入内核目录运行 make menuconfig 命令,在Instrumentation Support项目中选择Kprobes。
其次,选择 Configure standard kernel features 中的 Include all symbols in kallsyms项,该项用于启用kallsyms_lookup_name()函数,
这个函数用于检索内核函数的地址,在最新版本的Kprobes实现中已经支持直接利用函数名来进行注册。
第三,选择Loadable module support中的Enable Loadable module support项,该项用于启用内核的可插入模块功能。因为Kprobes的调试是通过模块插入实现的,
调试者需要编写调试模块并插入内核方式进行内核调试,因此必须选择该选项。
**********************************************************************************************************************************************************************/
/**********************************************************************************************************************************************************************
如果要安装oprofile,需要以下工作:
1.在 .config 文件中设置 CONFIG_PROFILING=y 和 CONFIG_OPROFILE=y. 另外,还要在 Processor type and features 菜单中启用 Local APIC 和 IO-APIC.
2.在新内核安装之后,安装oprofile.具体步骤为:
#tar xzvf oprofile-0.9.4.tar.gz
#cd oprofile-0.9.4
#./configure --with-linux=/usr/src/linux/ --with-kernel-support
#make
#make install
3.可能出现的问题:缺少popt,解决办法
1.下载popt
2 解压
#./configure --prefix=/usr &&
#make
#make check
#make install
***********************************************************************************************************************************************************************/
4.检查/usr/src目录下是否有linux-2.6.16.20.tar.bz2或你下载的最新版内核存在,解压:
tar jxvf linux-2.6.16.20.tar.bz2
$ vi Makefile
修改EXTRAVERSION = .20为EXTRAVERSION = -20-generic
5.制作配置文件,直接将现有内核的配置文件考过来用:
$ sudo cp /boot/config-2.6.28-11-generic ./.config
6.现在基本工作已就绪。进入 linux-2.6.16.20目录,先要配置内核:
cd linux-2.6.16.20
make menuconfig
7.配置内核开始编译。命令比较简单:
make-kpkg clean
$ sudo CONCURRENCY_LEVEL=4 make-kpkg --initrd kernel_image kernel_headers modules_image
编译过程差不多要1个半小时,结束后,将在前一级目录上生成
linux-headers-2.6.16-20-generic_2.6.16-20-generic-10.00.Custom_i386.deb和linux-image-2.6.16-20-generic_2.6.16-20-generic-10.00.Custom_i386.deb
8.下面就是安装新内核:
cd /usr/src
dpkg -i linux-image-*.deb
安装完成后,我们就可以在
/lib/modules目录下多出了2.6.*-generic目录
/boot目录下多出了config-2.6.*-generic,System.map-2.6.*-generic,initrd.img-2.6.*-generic,vmlinuz-2.6.*-generic这几个文件。
我使用的是grub管理器,还要修改/boot/grub/menu.lst,正常情况下你会发现menu.lst中已经加入了你的新内核的信息,但是你对照着老内核的信息你会发现有点出入——新内核的位置不对,所以要手动修改:
title Debian GNU/Linux, kernel 2.6.16.20
root (hd0,6)
kernel /vmlinuz-2.6.16.20 root=/dev/hda8 ro
initrd /initrd.img-2.6.16.20
savedefault
boot
title Debian GNU/Linux, kernel 2.6.16.20 (recovery mode)
root (hd0,6)
kernel /vmlinuz-2.6.16.20 root=/dev/hda8 ro single
initrd /initrd.img-2.6.16.20
savedefault
boot
说明:(hd0, 6)的意思是我的第一块硬盘(我只有一块硬盘)的第六个分区(我的linux装在该分区)。
这些都完成以后就可以重启了,你会在grub管理器里发现你的新内核,选择新内核启动就可以了。
9.安装内核头文件:
$ sudo dpkg -i linux-headers-*.deb
完成后在
/usr/src目录下多出了linux-headers-*-generic头文件的目录
结语
按照上面步骤做基本不会出什么问题了,可以成功编译内核。如果以后对内核研究的熟悉了,在配置的时候要多花点功夫,这样内核会发挥更好的性能。
编译过程中遇到的问题:
1.软件没有完全安装,可能导致编译失败,由于这个原因我编译了四次,并且机器慢的要死,直等的我花儿都谢了。另外,上边的软件安装中可能还缺少一个
2.最后第9步一定要记得做。
Debian环境编译内核
最新推荐文章于 2023-07-17 21:58:00 发布