Linux 内核编译

Linux内核编译:
编译安装内核的详细说明:
  编译安装内核概要步骤:
  1、安装开发包组
  2、下载内核源码文件
  3、准备.config文本配置文件
  4、通过make menuconfig配置内核选项
  5、make[-j #] 指定编译时使用CPU核心数
  6、make modules_install:安装模块
  7、make install :安装内核相关文件,安装bzImage为/boot/vmlinuz-VERSION-RELEASE、生成initramfs文件、编辑grub配置文件

  配置内核选项方式:
  支持“更新”模式进行配置:在已有的.config文件的基础之上进行修改配置:
  make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;
  make menuconfig:基于cureses的文本配置窗口;
  make gconfig:基于GTK开发环境的窗口界面
  make xconfig;基于QT开发环境窗口界面;
  支持“全新配置”模式进行配置,不需要.config文件:
  make defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置;
  make allnoconfig:所有选项均回答为“no”

  编译参数指定:
  make [-j #]  多线程编译
  编译内核中的一部分代码:
    只编译某子目录中的相关代码:
    cd /usr/src/linux
    make path/to/dir/ 只能在内核源码所在的目录中才能编译

    只编译一个特定的模块
    cd /usr/src/linux
    make path/to/dir/file.ko
    例如:只为e1000编译驱动:
    make drivers/net/ethernet/intel/e1000/e1000.ko

    如何交叉编译:目标平台与当前编译操作所在的平台不同;
    make ARCH=arch_name
    获取特定目标平台的使用帮助:
    make ARCH=arch_name help

  编译清理:
  如何在执行过编译操作的内核源码树上做重新编译,需先清理:
  make clean:清理编译生成的绝大多数文件,但会保留.config及编译外部模块所需要的文件;
  make mrproper:清理编译生成的所有文件,包括配置生成的.config文件及某些备份文件;
  make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;

  卸载内核:
  删除/lib/modules/目录下不需要的内核库文件
  删除/usr/src/linux/目录下不需要的内核源码
  删除/boot目录下启动的内核和内核映像文件
  更改grub的配置文件,删除不需要的内核启动列表

内核编译演示:
1、获取源码包(www.kernel.org),选择要编译的版本,为了保障能够成功编译,建议不要使用跨版本太大的源码包

2、准备开发环境(相关开发工具包),以及查看自己的主机硬件相关信息是否可以符合

3、解压到 /usr/src 目录下tar xf linux-3.10.67.tar.xz -C /usr/src
[root@centos7 ~]# ls
bin Documents f1 httpd-2.2.29 linux-3.18.41.tar.xz # 获取的源码包 Music Public Templates
anaconda-ks.cfg Desktop Downloads hanshu3.sh httpd-2.2.29.tar.bz2 mbox Pictures select.sh Videos
[root@centos7 ~]# tar xvf linux-3.18.41.tar.xz -C /usr/src # 解压到/usr/src目录下
[root@centos7 ~]# ls /usr/src
debug kernels linux-3.18.41 # 解压的源码包

4、进到/usr/src目录中,并创建一个软链接;
[root@centos7 ~]# cd /usr/src
[root@centos7 src]# ls
debug kernels linux-3.18.41
[root@centos7 src]# ln -s linux-3.18.41/ linux # 创建软链接
[root@centos7 src]# ls
debug kernels linux linux-3.18.41
[root@centos7 src]# cd linux # 进到目录中去
[root@centos7 linux]# ls
arch COPYING crypto drivers fs init Kbuild kernel MAINTAINERS mm README samples security tools virt
block CREDITS Documentation firmware include ipc Kconfig lib Makefile net REPORTING-BUGS scripts sound usr
[root@centos7 linux]# du -sh . # 查看大小
631M .

5、复制/boot下的以config开头的文件作为模板文件到/usr/src/linux/.config
# cp /boot/config-3.10.0-327.el7.x86_64 /usr/src/linux/.config
[root@centos7 linux]# cp /boot/config-3.10.0-327.el7.x86_64 /usr/src/linux/.config #复制模板文件
[root@centos7 linux]# ls -a
. arch .config(# 复制的模板文件) CREDITS Documentation firmware .gitignore init Kbuild kernel .mailmap Makefile net REPORTING-BUGS scripts sound usr
.. block COPYING crypto drivers fs include ipc Kconfig lib MAINTAINERS mm README samples security tools virt

6、在/usr/src/linux 中使用 # make menuconfig 配置内核选项,选好之后保存退出;

7、打开screen界面,执行 # make [-j 4] 编译内核,可使用-j指定编译线程数量;

这时可以使用 # htop 查看一下cpu的使用情况,如下所示:cpu占用率急剧升高,负载也变得好大;

8、编译完成之后,接下来需要执行 # make modules_install 安装内核模块
[root@centos7 src]# du -sh linux-3.18.41/
7.1G linux-3.18.41/ # 可以看到编译完成之后,变成了7.1G

[root@centos7 linux]# ls /lib/modules
3.10.0-327.el7.x86_64 # 可以看到这时模块文件只有一个
[root@centos7 linux]# make modules_install # 安装内核模块
[root@centos7 linux]# ls /lib/modules
3.10.0-327.el7.x86_64 3.18.41-1.0-Taolinux # 可以发现多了一个内核模块

[root@centos7 linux]# ls /lib/modules/3.18.41-1.0-Taolinux/ # 编译完成,而已看到生成的内核模块文件
build modules.builtin.bin modules.softdep
kernel modules.dep modules.symbols
modules.alias modules.dep.bin modules.symbols.bin
modules.alias.bin modules.devname source
modules.builtin modules.order

9、执行 # make install 生成内核文件
[root@centos7 linux]# make install
sh ./arch/x86/boot/install.sh 3.18.41-1.0-Taolinux arch/86/boot/bzlmage \
System.map "/boot"

10、reboot重启系统,选择使用新内核

启动之后,查看内核版本如下:
[root@centos7 ~]# uname -r
3.18.41-1.0-Taolinux # 说明新版内核已经启动,编译成功

posted @ 2018-10-26 23:14  luck-luck  阅读(642)  评论(0编辑  收藏  举报