Debian环境编译内核

经过将近两天的努力,终于将内核编译成功。现做笔记如下:

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步一定要记得做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值