编译可调试的Linux内核

 

准备

 

内核源码

  • 下载linux内核源码
  • 解压缩到/usr/src下

 

gdb准备

  • 下载gdb源码,ftp://oss.sgi.com/www/projects/kdb/download/v4.4/

  • 下载的版本需要与要编译内核版本一致,需要下载kdb-v4.4-2.6.32-x86-3.bz2和kdb-v4.4-2.6.32-common-3.bz2两个压缩包
  • 把2个gdb补丁打入要编译的源码中,第一行为测试,看是否跟内核有冲突,需要在root下执行,并在/usr/src/linux目录下。

 

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

 

配置

 

配置内核

  • 一般使用make menuconfig来配置
  • 如果提示找不到ncurses,需要安装,apt-get install ncurses-dev
  • 可以把当前使用的配置文件复制过来,在配置时使用倒数第二项“读取一个配置”,再做一些修改即可

 

cp /boot/config-linux2.6.31.16-generic ./.config 
  • 在/usr/src/linux/ 下运行make menuconfig

== 配置KDB == *配置内核中的KDB, 可以直接用vi/vim打开.config进行修改

CONFIG_KDB=y
CONFIG_KDB_MODULES=n
CONFIG_KDB_OFF=n
CONFIG_KALLSYMS=y
CONFIG_FRAME_POINTER=y

 

编译内核

  • make dep,建立编译时所需的从属文件

*make clean,清除编译的目标文件

  • make 编译所有东西,包括内核镜像和配置的模块

 

安装内核

 

安装

  • make modules_install,成功后会在lib/modules目录下生成一个目录,包含所有可以加载模块,大概5分钟
  • make install,自动复制bzImage到/boot,但是貌似没复制initrd.img,很奇怪

 

创建initrd.img

  • cd到根目录下,mkinitramfs -o /boot/initrd.img-2.6.31.6 2.6.31.6,制作initrd.img,后面必须跟上2.6.31.6版本号

 

创建启动选项

  • 修改/boot/grub/grub.cfg,网上很多是叫grub.conf,只需要增加2段代码,并改其路径就可以

 

menuentry "Ubuntu, Linux 2.6.31.6" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    set quiet=1
    insmod ext2
    set root=(hd0,1)
    search --no-floppy --fs-uuid --set a1ae8a36-84bd-4252-9960-2bcb73366f5a
    linux    /boot/vmlinuz-2.6.31.6 root=UUID=a1ae8a36-84bd-4252-9960-2bcb73366f5a ro   quiet splash
    initrd    /boot/initrd.img-2.6.31.6
}
menuentry "Ubuntu, Linux 2.6.31.6 (recovery mode)" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
    insmod ext2
    set root=(hd0,1)
    search --no-floppy --fs-uuid --set a1ae8a36-84bd-4252-9960-2bcb73366f5a
    linux    /boot/vmlinuz-2.6.31.6 root=UUID=a1ae8a36-84bd-4252-9960-2bcb73366f5a ro single 
    initrd    /boot/initrd.img-2.6.31.6
}

 

测试

  • root下输入echo "1" > /proc/sys/kernel/kdb,没反应说明安装正常

    >
  • 虚拟机下同时按ctrl+alt+space+F1,可以进入xterm模式,输入kdb进入kdb调试环境,输入go退出。

 

你可能感兴趣的:(linux,ubuntu,测试,search,patch,linux内核)