记一次编译linux 2.6 和4.10内核源码

0x00前言

很早就想开始学习linux内核漏洞的利用,之前的调试方式是借助kgdb来在两个vmware中调试,实际操作起来是没问题的。然而最近看到很多文章是使用qemu+gdb来调试的,因此决定尝试一下这种调试方式,第一步就是编译linux源码,本文将简述一下编译linux2.6源码和4.10源码时遇到的坑。

0x01 编译linux2.6源码

编译linux2.6的源码的过程参考这里:https://www.anquanke.com/post/id/85837。在按照文章中的步骤走的时候同遇到了很多问题,后来遇到某些坑绕不过去了....遇到的坑点大多数是make时遇到的。

问了一下编译过的同学,说是采用低版本的ubuntu来编译试试。经过了不断的搜索和尝试,发现linux2.6的源码使用gcc version>=4.6会遇到各种错误,有网友说用gcc4.5可以编译成功。下载源码 https://ftp.gnu.org/gnu/gcc/gcc-4.5.4/

编译时发现需要这些:configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.

编译这些依赖的源码时也遇到了问题。最后通过apt-get gcc-4.4解决。用gcc4.4编译时2.6源码时,没有遇到任何报错。

因此,最终解决办法就是更换gcc版本。

下载和切换gcc的版本方法

 首先添加ppa到库:  
sudo add-apt-repository ppa:ubuntu-toolchain-r/test  
sudo apt-get update
sudo apt-cache search gcc-4.*  
# 安装gcc/g++  
sudo apt-get install gcc-4.4  
# 手工更换gcc软连接  
cd /usr/bin  
sudo ln -s gcc-4 gcc  sudo apt-cache search gcc-4.*  
# 安装gcc/g++  
sudo apt-get install gcc-4.4  
# 手工更换gcc软连接  
cd /usr/bin  
sudo ln -s gcc-4 gcc  

linux2.6 source 编译环境

    ubuntu14.04 / (ubuntu16.04测试也编译成功,因此觉得和ubuntu版本、内核版本没多大关系)
    gcc4.4

gcc --version
gcc (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

uname -a
Linux ubuntu 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

正常的编译步骤如下:

wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.1.tar.gz -O linux-2.6.32.1.tar.gz
tar zxvf linux-2.6.32.1.tar.gz
cd linux-2.6.32.1
make i386_defconfig
make -j4

记一次编译linux 2.6 和4.10内核源码_第1张图片

PS: 在ubuntu16.04上编译时遇到了一个小问题,是由于perl版本过高导致的,参考这里的错误二:
https://blog.csdn.net/think_ycx/article/details/80740028

0x02 编译linux4.10源码

linux source 4.10 编译环境
同样,编译linux source 4.10时,使用的gcc版本使用的是gcc 5.5.0,在ubuntu16.04上编译成功。

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.10.6.tar.gz -O linux-4.10.6.tar.gz
tar zxvf linux-4.10.6.tar.gz
cd linux-4.10.6
make defconfig
make -j4

记一次编译linux 2.6 和4.10内核源码_第2张图片

 

参考:
1. https://askubuntu.com/questions/873278/linux-kernel-version-and-gcc-version-match
2. gcc4.5 version成功编译
    http://www.cnblogs.com/QuLory/archive/2012/09/27/2706429.html  
3. 编译gcc 
    http://blog.cuicc.com/blog/2010/08/22/install-gcc-4-5-1-in-debian-lenny/
4. http://staff.ustc.edu.cn/~xlanchen/ULK2011Spring/slides/2_2build+run+gdb%20linux-2.6.26.pdf

 

你可能感兴趣的:(Kernel)