Linux Kernel

目录

一、内核组成部分

1.kernel

2.kernel object

3.辅助文件

4.运行中的内核

5.模块

6. /proc目录

7. /sys目录

8.ramdisk文件的制作

二、内核编译

1.前提

2.准备好开发环境

3.目标主机硬件设备相关信息

4.简单依据模板文件的制作过程

5.编译内核的步骤

6.screen

回顾

参考资料

一、内核组成部分

      单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制 

1.kernel

内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE

2.kernel object

内核对象,一般放置于/lib/modules/VERSION-RELEASE/

                       [ ]:N

                       [M]:M

                       [*]:Y

3.辅助文件

ramdisk

                       initrd

                       initramfs

4.运行中的内核

uname

            uname - print system information

            uname [OPTION]...

                  -n:显示节点名称

                  -r:显示VERSION-RELEASE

                  -m:显示硬件平台

Linux Kernel_第1张图片

5.模块

      lsmod

            显示由核心已经装载的内核模块

显示的内容来自于:/proc/modules文件

Linux Kernel_第2张图片

Linux Kernel_第3张图片

modinfo

            显示模块的详细描述信息

modinfo [ -k kernel ]  [ modulename|filename... ]

                  -n:只显示模块文件路径

                  -p:显示模块参数

                  -a:author

                  -d:description

                  -l:license

Linux Kernel_第4张图片Linux Kernel_第5张图片

modprobe

            装载或卸载内核模块

modprobe [ -C config-file ]  [ modulename ]  [ module parame-ters... ]

            配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

modprobe [ -r ] modulename...

Linux Kernel_第6张图片

depmod

内核模块依赖关系文件及系统信息映射文件的生成工具

Linux Kernel_第7张图片

insmod

装载内核模块

insmod [ filename ]  [ module options... ]

rmmod

卸载内核模块

             rmmod [ modulename ]

            P.S. 必须明确给出文件路径

Linux Kernel_第8张图片

6. /proc目录

内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

Linux Kernel_第9张图片

参数:

         只读:输出信息

         可写:可接受用户指定“新值”来实现对内核某功能或特性的配置

/proc/sys

①sysctl命令用于查看或设定此目录中诸多参数

                          sysctl -w path.to.parameter=VALUE

                          ~]# sysctl -w kernel.hostname=mail.magedu.com

②echo命令通过重定向的方式也可以修改大多数参数的值

                          echo "VALUE" > /proc/sys/path/to/parameter

                          ~]# echo "www.magedu.com" > /proc/sys/kernel/hostname

Linux Kernel_第10张图片

sysctl

         默认配置文件:/etc/sysctl.conf

               设置某参数

                     sysctl -w parameter=VALUE

               通过读取配置文件设置参数

                     sysctl -p [/path/to/conf_file]

      P.S. 写在配置文件不会立即生效,可以通过-p读取使之生效

               内核中的路由转发:

                     /proc/sys/net/ipv4/ip_forward

         常用的几个参数:

               net.ipv4.ip_forward

               vm.drop_caches

               kernel.hostname

Linux Kernel_第11张图片

Linux Kernel_第12张图片

7. /sys目录

sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性

udev通过此路径下输出的信息动态为各设备创建所需要设备文件;udev是运行用户空间程序;专用工具:udevadmin, hotplug

udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下

8.ramdisk文件的制作

①mkinitrd命令

         为当前正在使用的内核重新制作ramdisk文件

         ~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

②dracut命令

         为当前正在使用的内核重新制作ramdisk文件

         ~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)

Linux Kernel_第13张图片

Linux Kernel_第14张图片

Linux Kernel_第15张图片

二、内核编译

1.前提

    ①准备好开发环境

    ②获取目标主机上硬件设备的相关信息

    ③获取到目标主机系统功能的相关信息,例如要启用的文件系统

    ④获取内核源代码包

    www.kernel.org

2.准备好开发环境

    包组(CentOS 6):

         Server Platform Development

         Development Tools

3.目标主机硬件设备相关信息

         CPU

               ~]# cat /proc/cpuinfo

               ~]# x86info -a

               ~]# lscpu

 

Linux Kernel_第16张图片

Linux Kernel_第17张图片

         PCI设备:

               ~]# lspci

                     -v

                     -vv

Linux Kernel_第18张图片

               ~]# lsusb

                     -v

                     -vv

Linux Kernel_第19张图片

               ~]# lsblk

Linux Kernel_第20张图片

               了解全部硬件设备信息

               ~]# hal-device

4.简单依据模板文件的制作过程

         ~]# tar xf linux-3.10.67.tar.xz -C /usr/src

         ~]# cd /usr/src

         ~]# ln -sv linux-3.10.67 linux

         ~]# cd linux

         ~]# cp /boot/config-$(uname -r) ./.config

Linux Kernel_第21张图片

         ~]# make menuconfig

         ~]# screen

         ~]# make -j #

Linux Kernel_第22张图片

Linux Kernel_第23张图片

Linux Kernel_第24张图片

Linux Kernel_第25张图片

Linux Kernel_第26张图片

         ~]# make modules_install

         ~]# make install

重启系统,并测试使用新内核

编译好,并启用之

Linux Kernel_第27张图片

Linux Kernel_第28张图片

5.编译内核的步骤

      ①查看当前主机硬件信息

      ②配置内核选项

内核相关文档

Linux Kernel_第29张图片

            支持“更新”模式进行配置:

(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项

(b) make menuconfig:基于curses的文本窗口界面

                  (c) make gconfig:基于GTK开发环境的窗口界面

                  (d) make xconfig:基于Qt开发环境的窗口界面

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

(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置

                  (b) make allnoconfig:所有选项均回答为"no"

③编译

            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

                  如何交叉编译内核:编译的目标平台与当前平台不相同

                        # make ARCH=arch_name

                       要获取特定目标平台的使用帮助

                       # make ARCH=arch_name help

Linux Kernel_第30张图片

      如何在已经执行过编译操作的内核源码树做重新编译:

            事先清理操作:

# make clean:清理大多数编译生成的文件,但会保留config文件等

# make mrproper:清理所有编译生成的文件、config及某些备份文件

# make distclean:mrproper、patches以及编辑器备份文件

6.screen

P.S. 可以与启动终端进程无关

当前终端即使终止了,也可以通过启动其他终端来连接到该屏幕

      打开新的screen

                  # screen

      退出并关闭screen

                  # exit

      剥离当前screen

                  Ctrl+a,d

      显示所有已经打开的screen

                  screen -ls

      恢复某screen

                  screen -r [SESSION]

Linux Kernel_第31张图片

回顾

内核组成部分、内核编译

内核组成部分:

      核心、模块

            核心:/boot/vmlinuz-VERSION-RELEASE

            模块:/lib/modules/VERSION-RELEASE/

模块管理的相关命令:

            lsmod, modinfo, modprobe [-r], insmod, rmmod, depmod

      内核编译:

            [ ]

            [*] 编译进核心

            [M] 编译成模块

步骤:

                  make menuconfig:配置内核选项

                       .config:文本文件

                  make [-j #]

                  make modules_install

                  make install

                       安装bzImage为/boot/vmlinuz-VERSION-RELEASE

                       生成initramfs文件

                       编辑grub的配置文件

参考资料:

马哥随堂笔记

注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。

你可能感兴趣的:(Linux系统管理,Linux运维笔记)