《鸟哥的Linux私房菜》读书笔记:Linux内核编译和管理

1.内核简介与获取内核源代码

1.1 什么是内核

  • kernel:内核(kernel)是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的内核功能,包含防火墙机制、是否支持LVM或Quota等文件系统。若你的内核不能识别某个最新的硬件,那该硬件也就无法被驱动,你当然也就无法使用该硬件。其实内核就是系统上面的一个档案而已, 这个档案包含了驱动主机各项硬件的侦测程序和驱动模块。内核档案一般放在/boot/vmlinuz目录下
  • 内核模块(Kernel module)的用途:将一些不常用的类似驱动程序的东西独立出内核,编译成为模块,在不更换内核,重新编译内核的前提下,内核可以在系统正常运作的过程当中加载这个模块到内核的支持。放置的目录为/lib/modules/$(uname -r)/kernel/

1.2 为什么更新内核

内核的编译重点在于你要你的Linux做什么。如果没有必要的工作,就不需要加在你的内核当中!这样才能让Linux跑得更稳、更顺畅。这也是为什么我们要编译内核的最主要原因了

  • 内核编译可能的目的:

    • 新功能的需求
    • 原本内核太过臃肿
    • 和硬件搭配的稳定性
    • 其他需求(如嵌入式系统)

重新编译内核虽然可以针对你的硬件作优化的步骤,不过由于这些优化的步骤对于整体效能的影响是很小的, 因此如果是为了增加效能来编译内核的话,基本上,效益不大。然而,如果是针对系统稳定性来考虑的话, 那就有充分的理由来重新编译内核。由于内核的主要工作是在控制硬件,所以编译内核前, 请先了解一下你的硬件配备,与你这部主机的未来功能。由于内核是越简单越好,所以叧要将这部主机的未来功能给他编进去就好了。

1.3 内核源代码的解压缩、安装和观察

  • 内核源代码的解压缩和放置目录:内核原始码一般建议放在/usr/src/kernels/ 目录底下。tar -jxvf linux-X.X.XX.X.tar.bz2 -C /usr/src/kernels/。此时会在 /usr/src/kernels底下产生一个新的目录,那就是 linux-X.X.XX.X这个目录。
  • 内核源代码下的次目录:
    • 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)

这些数据先大致有个印象即可,至少未来如果你想要使用patch的方法加入额外的新功能时,你要将你的源代码放在哪,这里就能够提供一些指引了。当然,最好还是跑到Documentation那个目录下去瞧瞧正确的说明, 对你的内核编译会更有帮助。

2.内核编译的前处理和内核功能选择

内核的目的在于管理硬件和提供系统核心功能,因此你必须要先找到你的系统硬件,并且规划你的主机未来的任务,这样才能够编译出适合你这部主机的内核。所以,整个内核编译的重要工作就是挑选你想要的功能

2.1 硬件环境查看和核心功能要求

  • 硬件环境查看:通过/proc/cpuinfo和lspci观察

2.2 保持干净源代码:make mrproper

了解了硬件相关的数据后,我们还得要处理一下内核源代码底下的残留文件才行。假如我们是第一次编译,但是我们不清楚到底下载下来的源代码当中有没有保留目标档案 (*.o) 以及相关的配置文件存在, 此时我们可以透过后面的命令来处理掉这些编译过程的目标档案以及配置文件:make mrproper

这个命令会将你以前进行过的核心功能选择档案也删除,所以几乎只有第一次执行核心编译前才进行这个动作,其余的时刻,你想要删除前一次编译过程的残留数据, 叧要下达:make clean

2.3 开始挑选核心功能:make XXconfig

/boot/ 底下存在一个名为config-xxx 的档案。那个档案其实就是核心功能列表文件。我们底下要进行的操作,其实就是做出该档案。而我们后续所要进行的编译操作,其实也就是透过这个档案来处理的。核心功能的挑选,最后会在 /usr/src/kernels/linux-X.X.XX.X/底下产生一个名为.config的隐藏文件, 这个文件就是 /boot/config-xxx 的档案。你可以透过非常多的方法来建立这个档案,常见的方法有:

  • make menuconfig:最常使用的,是文本模式底下可以显示类似图形接口的方式,不需要启动X Window 就能够挑选核心功能选单
  • make oldconfig:透过使用已存在的 ./.config档案内容,使用该档案内的设定值为默认值,将新版本核心内的新功能选项列出让用户选择,可以简化核心功能的挑选过程!对于作为升级核心源代码后的功能挑选来说,是非常好用的一个项目!
  • make xconfig:透过以Qt为图形接口基础功能的图形化接口显示,需要具有X window的支持。例如KDE就是透过Qt来设计的X Window,因此你如果在KDE画面中,可以使用此一项目。
  • make gconfig:透过以Gtk为图形接口基础功能的图形化接口显示,需要具有X window的支持。例如GNOME就是透过Gtk来设计的 X Window,因此你如果在GNOME画面中,可以使用此一项目。
  • make config:最老的功能挑选方法,每个项目都以条列式一条一条的列出让你选择,如果设定错误只能够再次选择,不推荐使用。

2.4 核心功能的详细选项配置参考《鸟哥的linux私房菜》

3.内核的编译与安装

3.1 编译内核与内核模块

  • 内核和内核模块需要先编译起来,你可以先使用make help去查阅一下所有可用编译参数, 就会知道有底下这些基本功能:

    • make vmlinux #未经压缩的核心
    • make modules #仅内核模块
    • make bzImage #经压缩过的核心(预设)
    • make all #进行上述的三个动作
  • 基本上我们会进行的操作:
    • make clean #先清除暂存档
    • make bzImage #先编译核心
    • make modules #再编译模块

3.2 实际安装模块

我们知道模块是放置到 /lib/modules/$(uname -r) 目录下的,如果同一个版本的模块被反复编译后来安装时,会产生冲突。解决办法:

  • 先将旧的模块目录更名,然后才安装核心模块到目标目录去
  • 在make menuconfig时,那个General setup内的Local version修改成新的名称

安装模块到正确的目标目录:make modules_install,最终会在/lib/modules底下建立起你这个核心的相关模块。

3.3 开始安装新核心和多重核心选单 (grub)

  • 移动核心到/boot并保留旧核心档案

    • cp /usr/src/kernels/linux-X.X.XX.X/arch/x86/boot/bzImage /boot/vmlinuz-X.X.XX.XXXX#实际内核
    • cp /usr/src/kernels/linux-X.X.XX.X/.config /boot/config-X.X.XX.XXXX#备份配置文件
  • 建立相对应的 Initial Ram Disk (initrd):mkinitrd -v /boot/initrd-X.X.XX.XXXX.img X.X.XX.XXXX
  • 编辑开机选单 (grub):编辑/boot/grub/menu.lst(具体配置参考)

总结:内核编译的步骤和内核的删除

  • 内核编译的步骤:

    • 先下载内核源代码(例如SPRM)
    • 以下以Tarball来处理,解开原始码到/usr/src/kernels目录下
    • 先进行旧数据删除:make mrproper
    • 开始挑选核心功能,可以利用make menuconfigmake oldconfigmake gconfig等等
    • 清除过去的中间暂存盘资料:make clean
    • 开始内核文件和内核模块的编译:make bzImagemake modules
    • 开始内核模块的安装:make modules_install
    • 开始内核文件的安装,可以使用的方式有:make install或者是透过手动的方式复制核心档案到/boot/grub当中
    • 建立initrd档案;
    • 修改/boot/grub/menu.lst档案
  • 内核的删除:
    • 首先,可以将源代码删除:rm -rf /usr/src/kernels/linux-X.X.XX
    • 然后,删除掉内核模块的目录: rm -rf /lib/modules/X.X.XX
    • 最后删除掉/boot/内的内核档案和initrd档案,以及/boot/grub/menu.lst内的title训定即可。
时间: 2024-07-31 14:26:35

《鸟哥的Linux私房菜》读书笔记:Linux内核编译和管理的相关文章

linux私房菜-读书笔记

第零章:计算机概论 计算机:接受用户输入指令和数据,经过中央处理器的数据和逻辑单元运算处理器处理后,以产生或存储成有用的信息. 计算机硬件的五大单元:输入单元.输出单元.CPU内部控制单元.算术逻辑单元和内存.CPU作为一个具有特定功能的芯片,里面含有微指令集,一条微指令集对应一个汇编语句.CPU内分为算术逻辑单元与控制单元,算术逻辑单元主要负责程序运算与逻辑判断,控制单元主要协调各组件与各单元间的工作.基本上数据都是流经内存然后再转出去. CPU:内部已经含有一些小指令,软件都是要经过CPU内

【鸟哥的Linux私房菜】笔记1

Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux成立的核心网站 GNU所开发的几个重要软件 Linux distributions发行者网址 = w= 1.Linux是什么? 我们知道计算机是由一堆硬件构成的 为了有效控制这些硬件资源,于是就有了操作系统 为了让软件开发人员更容易开发,所以操作系统给开发人员提供了一系列接口 Linux就是这样一套

<<鸟哥的私房菜>>--读书笔记--HFS

Linux文件系统的组织方式--FHS 我们在使用linux时,不管是redhat还是SUSE,会发现它们下面的目录结构总是相差不大.这是因为主流发行版大都遵循FHS(Filesystem Hierarchy Standard). FHS 主要对/,/usr,/var这三个目录规定了其主要的次级目录有哪些,每个次级目录放置什么文件,做什么用途作了规定. / 目录的介绍一个根目录下挂载的次级目录大概有以下几种: 1.常规目录: 目录名称 说明 /bin 存放用户可以使用的二进制命令,如ls.vi等

嵌入式开发之道——菜鸟成长日志与项目经理的私房菜(读书笔记)

嵌入式开发之道--菜鸟成长日志与项目经理的私房菜 邱毅凌著 读书笔记文档下载:http://download.csdn.net/detail/luckywang1103/8710299 1.一般函数调用与中断ISR的区别 一般程序都是循序执行的,CPU一定要执行到main()的第20行,才有可能去调用sub_fun()函数,而中断可以发生在任何的时间地点.例如,使用者可以在任何时候按下键盘的某个键,此时不论CPU下个要执行的指令是什么,CPU都会先记录目前的状态,然后参考中断向量表,接着去执行键

鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题

前面说过自己成功引导了centos系统,现在进入启动界面,首次进入会进行相关设置,按照步骤一步一步完成,取消完光盘安装,点击下一步,就进入下面这个界面,没有登录框...没错!怎么蓝屏了,这可是linux啊! 可能第一次初始化慢,然而十几分钟过去了,依旧一成不变...懵圈了,按书上切换命令行模式也没反应,重启了也是一样卡在这个界面,没办法了,我重装吧. 再次重装很顺利,然后启动,接着首次设置,最后...还是卡到了这个界面.不会是我U盘启动盘制作有问题吧,果断重新制作,然后再次重装启动...不出所料

笔记《鸟哥的Linux私房菜》6 Linux的档案权限与目录配置

/etc/passwd 用户相关信息 /etc/shadow 密码相关信息 /etc/group 组名相关信息 chgrp chgrp group_a xxx 改变文件组属 chgrp group_b -R xxx 改变目录及以下组属 chown chown user_a xxx 改变文件拥有者 chown user_a -R xxx 改变目录及以下组属 chmod chmod 751 xxx 改变文件/目录权限 chmod u+r g-w o=rwx xxx 改变文件/目录权限(u:user.

鸟哥的linux私房菜学习笔记 ---第7章-1

1, /usr UNIX software resource 关于软件的文件都存放在这个目录下2, 开机仅有根目录会被挂载,其他分区则是在开机完成之后才会持续进行挂载的行为3, 根目录下的子目录不一定和根目录在同一个分区下.但是,要注意根目录下与开机过程有关的目录不能与根目录放在不同的分区下.4, linux目录配置标准:FHS(Filesystem hierarchy standard) 仅定义根目录及其子目录       FHS 定义的三层主目录为: /, /var,/usr   有五个目录

鸟哥的linux私房菜学习笔记 ---第6章-1

linux是多任务多用户系统-r 进行递归的持续更改 连同子目录下的所有文件都会改变 shutdown -选项 时间参数 显示消息 shutdown -k nowshutdown -h +10shutdown -r 10:28 ‘the system will reboot at 10:28’ reboot init 0 关机 init 是切换执行等级的意思,不同的数字代笔不同的执行等级:0关机,3纯命令行模式,5含有图形界面的模式 6重启 ls -a ls -al chgrp 组名 文件名 c

鸟哥的linux私房菜学习笔记 ---第8章-1

1,磁盘的扇区为最小的物理存储单位,大小为512bytes2,扇区sector 组成 柱面cylinder 组成 分区partition 一个分区对应一个文件系统,一个文件系统要挂载到相应的目录上去3,linux的正规文件系统为ext24,inode 记录文件的权限及相关属性和此文件所占用的block的编号 一个文件占用一个inode    block 记录文件的实际内容,文件很大会占用多个block   super block

鸟哥的Linux私房菜(笔记)-文件权限与目录配置

第一部分 Linux 简单命令操作 一.基础命令 1.显示日期与时间:date; 2.显示日历:cal 3.简单好用计算器:bc 直接输入数字与预算符,按entry键运算, 输入quit离开bc界面 二.重要的热键 1.它具有命令补全与文件补齐的功能:Tab eg: ca[Tab][Tab] [Tab] 接在一串命令的第一个命令的后面,则为"命令补全" [Tab] 接在一串命令的第二个命令的后面,则为"文件补全" 2.中断目前程序的功能键:[Ctrl]-c 3.代表