学习如何下载编译Linux Kernel

748 阅读6分钟

这是我参与更文挑战的第28天,活动详情查看: 活动链接

一、下载安装Linux Kernel源码

进入www.kernel.org/,选择需要的版本进行下载。可以通过http或者git下载,也可以下载压缩包通过ftp上传到linux进行解压。

2.PNG

这里选择http的方式下载(wget一直time out。。。选择手动下载上传吧)

wget -c https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.4.49.tar.gz

在/usr/src下面新建文件夹kernel,把下载好的压缩包上传到该文件夹下,进行解压

tar -xf linux-4.9.179.tar.gz

查看源码目录

3.PNG

  • arch:与硬件平台有关的项目,大部分指的是CPU的类别,例如x86,x86_64,Xen虚拟支持等。
  • block:与成组设备较相关的设定数据,区块数据通常指的是大量存储媒体,还包括类似ext3等文件系统的支持是否允许等。
  • crypto:核心所支持的加密的技术,例如md5或者是des等等。
  • Documentation:与核心有关的一堆说明文件。
  • drivers:一些硬件的驱动程序,例如显示适配器、网络卡、PCI相关硬件等。
  • firmware:一些旧式硬件的微脚本(韧体)数据。
  • fs:核心所支持的filesystems,例如vfat,reiserfs,nfs等。
  • include:一些可让其他进程调用的标头(header)定义数据。
  • init:一些核心初始化的功能,包括挂载与init程序的呼叫等。
  • ipc:定义Linux操作系统内各程序的沟通。
  • kernel:定义核心的程序、核心状态、线程、程序的排程(schedule)、程序的讯号(signle)等。
  • lib:一些函式库。
  • mm:与内存单元有关的各项数据,包括swap与虚拟内存等。
  • net:与网络有关的各项协议数据,还有防火墙模块(net/ipv4/netfilter/*)等。
  • security:包括selinux等在内的安全性设定。
  • sound:与音效有关的各项模块。
  • virt:与虚拟化机器有关的信息,目前核心支持的是KVM(Kernel base Virtual Machine)。

二、编译前的准备工作

可以执行make help命令查看make的所有编译参数。

1、make mrproper: 清除源码中残留的【编译过程的目标文件和配置文件】。这个动作会将以前进行过的核心功能选择文件删除,所以第一次执行核心编译前才进行这个动作。其余时刻,要删除前一次编译过程的残留数据,只需下达make clean

2、make XXconfig:/boot/底下有一个名为config-xxx的文件,是核心功能列表文件(我们自己机器上的核心功能选择文件)。编译动作就是通过该文件处理,核心功能的挑选,最后会在/usr/src/kernel/{uname -r}/底下产生一个名为.config文件(我们下载的源码的核心功能选择文件),这个文件就是/boot/config-xxx文件。该文件有如下建立方法

(1)make menuconfig:最常使用的,是文本模式底下可以显示类似图形接口的方式,不需要启动X Window就能够挑选核心功能选项。

(2)make oldconfig:通过使用已存在的./.config文件内容,使用该文件内的设定值为默认值,只将新版核心内的新功能选项列出让用户选择。可以简化核心功能的挑选过程,对于作为升级源码后的功能挑选来说,是非常好用的。

(3) make xconfig:通过以qt为图形接口基础功能的图形化接口显示,需要具有X window的支持,例如KDE就是通过qt来设计的X window,因此你如果在KDE画面中,可以使用此命令。

(4) make gconfig:通过以Gtk为图形接口基础功能的图形化接口显示,需要具有X window的支持。例如GNOME就是通过Gtk来设计的X window,因此如果你在GNOME画面中,可以使用此命令。

(5) make config:最旧式的功能挑选方法,每个项目都一条一条的列出让你选择,如果设定错误只能再次选择,很不人性化。

(6)如果你想要使用本机已经有的核心设定值,只需要修改一些小细节,那么可以cp本机的config文件到我们下载的源码里 cp/boot/config-xxx /usr/src/kernel/linux-4.9.179/

3、开始核心功能选择 使用make menuconfig,出现下面的界面

4.PNG

(1)【左右选择键】:可以移动最底下的,,项目。 (2)【上下箭头键】:可以移动上面大框框部分的反白光柱,若改行有箭头(--->)则表示改行内部还有其他细项需要来设定的意思。 (3)选定项目:【上下键】选择好想要设定的项目后,【左右键】选择后,按下【Enter】就可以进入该项目选择子项目。

(4)可选的功能:前面有[]或<>符号时,表示该项目可选。使用空格键选定项目。

(5)若为[]、<>表示编译进核心,若为则表示编译成模块。

(6)关于核心功能的选择,可以参考下面的规则

  • 【肯定】核心一定要的功能,直接编译进核心内。
  • 【可能在未来会用到】的功能,尽量编译成模块。
  • 【不知道那个东西干嘛的,看help也看不懂】的话,就保留默认值,或编译成模块。
  • 总之,尽量保持核心小而美,剩下的功能就编译成为模块,尤其是【需要考虑到未来的扩充性】。

4、核心功能选择(不清楚的可以按< Help>进行查阅)

三、编译与安装

1、编译核心与核心模块

  • make vmlinux:未经压缩的核心
  • make modules:仅核心模块
  • make bzImage:经压缩过的核心(预设)
  • make all:进行上述三个动作
  • 上述比较常用的是modules和bzImage,bzImage可以制作出压缩过的核心。

2、开始编译

  • make -j 4 clean 先清除暂存档
  • make -j 4 bzImage 先编译核心
  • make -j 4 modules 再编译模块
  • make -j 4 clean bzImage modules 连续动作,把上面两个动作一起执行
  • 最后被制作的数据存放在/usr/src/kernel/linux-4.9.179/arch/x86/boot/bzImage,这就是核心文件。

执行make -j 4 bzImage 命令后,如果顺利,应该出现下面的界面

6.PNG

3、开始安装核心

编译完成后,就可以进行安装,可以同时保留旧版的核心,增加我们自己编译的核心在主机上面。做成多重引导系统。但新的核心并不一定完全适用我们的系统,所以可以备份旧核心,如果新核心测试不通过,就用旧核心启动。