Linux内核|实验三 安装、配置、编译Linux内核

1、下载安装、配置
Step1:获取当前系统的内核版本

$ su root
# lsb_release –a
# uname –r

我安装的版本是4.10.0-13-generic

Step2:安装编译内核所需软件包

# apt-get update
# apt-get upgrade
# apt-get install build-essential kernel-package libncurses5-dev fakeroot 选择Y

整个安装大约需要1小时。
Step 3:下载Linux内核3.19.3源码包并解压
下载:

# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.3.tar.xz

解压:

# xz –d linux-3.19.3.tar.xz

解压到指定目录:

# tar xvf linux-3.19.3.tar此时会快速加载一大部分路径…完成后如下:

Step 4:配置内核

# cd linux-3.19.3  //cd命令进入源码目录
# make mrproper  //得到源代码后,将其净化
# make menuconfig  //对内核选项进行配置,不需要配置,直接exit-->enter
# cp /boot/config-'uname -r'-generic ./.config  //指现版本内核
# make clean  //删除配置时留下的一些不用的文件

注意:执行 apt-get install *内核
apt-get是一条linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。若执行这个命令会提示,权限不够,执行sudo su取得管理权限后,继续执行该命令下载或直接执行sudo apt-get install 内核安装包名linux源码可以通过以下几种途径获得:
• 直接去www.kernel.org 下载
• 通过包管理工具下载源码,在debian和Ubuntu中可以通过下面这个命令下载,apt-get install linux-source-(版本号) ,下载后的文件在/usr/src目录中,解压到该目录即可。
• 原操作系统版本:4.10.0-13-generic
• 新下载版本:linux-source-4.11.1.tar.bz

整个下载过程大约需要1个小时…没办法,哎!又是漫长的等待,做这个实验已经过了一个周末…感觉大部分时间都花在下载上了,这时候可以看看书,背背单词啥的…有时候会报一些莫名其妙的错误,这时候第一反应就是重试,再不行就只好百度了,感觉因为思维惯性,有的错误新手真的难以避免,只有吃一堑长一智了,哈哈…

Step 5:解压缩新版本
这是一个压缩包文件。要解压缩
解压缩包,执行命令:
解压:

# xz –d linux-4.11.1.tar.xz
# tar xvf linux-4.11.1.tar

用ls命令查看,则usr/src目录下会多一个文件
到目前,Linux内核源代码已经在Ubuntu目录下了。现在要配置文件。

Step 6:配置新内核
现在进入源码所在目录,配置内核。Documentation/adminguide/README.rst目录下内核源代码自带了readme文件,该文件详细讲解了这样对内核解压、配置、安装。编译内核之前,先进行配置,是精确控制新内核的机会。直接执行会报错,在进行下面操作前必须先执行语句sudo apt-get install libssl-dev。
配置方法:
1、先执行make mrproper命令,作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译,即检查有无不正确的.o文件和依赖关系。
2、执行make menuconfig命令,注意:常有执行sudo make oldconfig;sudo make prepare;sudo make scripts
配置完成。
2、编译
编译内核,就用make命令。

make all = make = make bzImage + make modules  make 默认是指make all
sudo make bzImage    #编译内核的压缩镜像文件,这条语句会执行很久…
sudo modules      #将模块编译进内核中

3、安装
编译完成后,安装模块
注意:这里可能报错warning: the frame size of 2048 bytes is large than 1024 bytes,因为内核默认了栈帧在的某个界限值,当某个函数的栈帧超过此配置值时,就会给出warning,所以要重新配置:
下面进行正式编译:

sudo make modules  #安装已经编译的内核,这条语句也会执行很久…
sudo make modules_install
sudo make install #安装内核相关文件,将所有的编译之后的内容拷贝安装到相应的目录。

4、重启
重启linux,在“grub内核选择界面”选择刚刚编译的内核,Enter启动。
5、实验总结
此次实验要点如下:
1、大概步骤:

1、安装开发包组
2、下载源码文件
3、.config:准备文本配置文件
4、make menuconfig:配置内核选项
5、make [-j #]
6、make modules_install:安装模块
7、make install :安装内核相关文件 ;安装bzImage为/boot/vmlinuz-VERSION-RELEASE (去boot目录下查看);生成initramfs文件
8、编辑grub的配置文件

2、编译配置选项
配置内核选项
支持“更新”模式进行配置: make help

(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)环境窗口界面
(d) make xconfig:基于QT(KDE)环境的窗口界面

支持“全新配置”模式进行配置

(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b) make allyesconfig: 所有选项均回答为“yes“
(c) make allnoconfig: 所有选项均回答为”no“

3、编译
全编译:make [-j #]

编译内核的一部分功能:
a) 只编译某子目录中的相关代码:
# cd /usr/src/linux
# make dir/
(b) 只编译一个特定的模块:
# cd /usr/src/linux
# make dir/file.ko
例如:只为e1000编译驱动:
#make drivers/net/ethernet/intel/e1000/e1000.ko

4、编译内核

如何交叉编译内核:
编译的目标平台与当前平台不相同;
# make ARCH=arch_name
要获取特定目标平台的使用帮助
# make ARCH=arch_name help
# make ARCH=arm help

5、清理删除

在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:
# make clean:清理大多数编译生成的文件,但会保留config文件等
# make mrproper: 清理所有编译生成的文件、 config及某些备份文件
# make distclean: mrproper、 patches以及编辑器备份文件
卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表

需要注意的细节是:
首先我们最好将我们的机器的源更新一下:

Type the following command(非超级用户)
$ sudo apt-get update
OR as root user enter:(超级用户)
# apt-get update
Search for kernel version (optional)(搜寻内核的版本)
Type the following command:
$ apt-cache search linux-headers-$(uname -r)
Install linux-header package under Debina or Ubuntu Linux(更新内核的版本)
Type the following command:(非超级用户)
$ sudo apt-get install linux-headers-$(uname -r)
OR as root user:(超级用户)
# apt-get install linux-headers-$(uname -r)

之后要进行重启。

带代码运行图的完整文档传送门:
http://download.csdn.net/download/qq_33478897/9943811

你可能感兴趣的:(Linux内核分析与应用开发)