1、centos系统启动流程:

post(检测硬件环境)--->bootloader(根据bios中的设置去查找从哪个设备启动,然后根据选择的设备上的mbr去引导grub的第一阶段,启动系统)--->加载内核(运行放置于initrd中的内核镜像)--->roofs(以只读方式挂载根文件系统)--->switchroot(根切换为正式的root根文件系统)--->/sbin/init(用户空间的第一个程序)

2、内核设计体系:单内核设计、微内核设计两种

linux属于单内核设计,但是它充分借鉴了微内核体系的设计优点(为内核引入了模块化机制)

3、linux内核的组成部分:

主要有三部分:vmlinuz(内核的核心)、kernel object(内核对象)、ramdisk(辅助性文件)

3.1、vmlinuz:内核的核心

vmlinuz一般为bzimage压缩的文件;通常位于/boot目录下,名称为:vmlinuz-version-release

3.2、kernel object:内核对象

kernel object内核对象即内核模块,一般放置于//lib/modules/version-release  //注意:内核模块的版本号version-release信息必须和内核核心文件的版本号一致

内核模块的选择:

[ ] :N,不编译内核模块

[M]:modules,编译为内核模块,用到时编译内核模块,不用时则不编译,这样做的好处是:虽然占用了磁盘了空间,但是减少了内存空间的占用

[*]:Y,编译进内核核心,这样做的好处是:节省了装载内核模块时间。

3.3、ramdisk:辅助性文件,并非必须的,这取决于内核是否能直接驱动rootfs所在的设备,如果可以则不需要,否则需要此文件。

ramdisk能够加载的驱动:

目标设备驱动:如scsi设备的驱动

逻辑设备驱动:如lvm设备的驱动

文件系统:如xfs文件系统的驱动

ramdisk是一个简装版的根文件系统,它是放在内存中的,它仅仅是为了能够找到真正的根文件系统存在的,真正根文件系统放在硬盘中,数据不会丢失。

注意:当看到系统启动完成后,内核已经加载完成了,我们看到的内核文件是静态的,此时修改内核文件,不会立即生效,重启后才生效。

4、内核信息查看:(内核信息对应的文件:/boot/vmlinuz-version-release)

4.1、uname:显示系统信息:

格式:uname [OPTION]...

option:

-r:显示发行号信息

如:[root@localhost ~]# uname -r

3.10.0-514.el7.x86_64

-n:显示当前主机名和hostname显示结果一样

[root@localhost ~]# uname -n

localhost.localdomain

[root@localhost ~]# hostname

localhost.localdomain

[root@localhost ~]#

-a:显示所有信息

[root@centos6 ~]# uname -a

Linux centos6.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@centos6 ~]#

4.2、内核模块(kernel object)信息查看:

lsmod:显示内核中的模块状态信息(显示已经装载的),lsmod是抽取/proc/modules文件中的信息,它显示的三个字段分别是:modules、size、used by(used by表示被引用的次数和被什么所引用)

如:[root@localhost ~]# lsmod

Module                  Size  Used by

tcp_lp                 12663  0

modinfo:显示linux内核特定模块信息,(能显示已装载的和未被装载的)。centos6上的命令,centos7没有此命令。

命令格式:modinfo [-0][-F field][-k kernelversion][-b basedir]  module...

-k:显示特定版本内核的模块信息,如果有多个内核同时存在,会用到此项

-F:显示指定字段的信息

-n:显示文件路径

如[root@centos6 ~]# modinfo ext4

filename:       /lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ext4/ext4.ko

license:        GPL

description:    Fourth Extended Filesystem

author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others

srcversion:     3780C48738D7031144B9762

depends:        mbcache,jbd2

vermagic:       2.6.32-358.el6.x86_64 SMP mod_unload modversions

[root@centos6 ~]# modinfo -F filename  ext4

/lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ext4/ext4.ko

[root@centos6 ~]# modinfo -n ext4

/lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ext4/ext4.ko

[root@centos6 ~]# modinfo -F filename  ext2

/lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ext2/ext2.ko

[root@centos6 ~]#

注意:modinfo是通过/lib/modules目录下与当前内核版本同名目录下的各文件获取的

[root@centos6 ~]# ls /lib/modules/2.6.32-358.el6.x86_64/

build              modules.ccwmap       modules.isapnpmap    modules.seriomap     vdso

extra              modules.dep          modules.modesetting  modules.symbols      weak-updates

kernel             modules.dep.bin      modules.networking   modules.symbols.bin

modules.alias      modules.drm          modules.ofmap        modules.usbmap

modules.alias.bin  modules.ieee1394map  modules.order        source

modules.block      modules.inputmap     modules.pcimap       updates

[root@centos6 ~]#

5、内核模块管理命令

5.1、modprobe命令(向内核中装载模块,或从内核中下载模块)

格式:modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [modulename] [module parameters...]

modprobe [-r] [-v] [-n] [-i] [modulename...]

modprobe [-c]

modprobe [--dump-modversions] [filename]

modprobe MODULESNAME    //安装模块,动态操作

modprobe -r MODULESNAME    //卸载模块,动态操作

示例:

[root@localhost ~]# lsmod | grep btrfs   //查看有没有安装btrfs内核模块

[root@localhost ~]#

[root@localhost ~]# modprobe btrfs    //安装btrfs内核模块

[root@localhost ~]# lsmod | grep btrfs

btrfs                1003474  0

zlib_deflate           26914  1 btrfs

raid6_pq               97812  1 btrfs

xor                    21411  1 btrfs

[root@localhost ~]#

注意:对使用中的模块不要随意卸载,尤其是默认安装的内核模块。

5.2、depmod命令:生成模块依赖关系(即内核模块依赖关系文件的生成工具)

5.3、insmod命令:插入模块

rmmod命令:卸载模块

格式:insmod [filename] [module options...]   //filename是指模块文件的文件路径

rmmod MODULESNAME

示例:

[root@localhost ~]# modprobe -r btrfs

[root@localhost ~]# lsmod | grep btrfs

[root@localhost ~]# modinfo btrfs

filename:       /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/btrfs/btrfs.ko

license:        GPL

alias:          devname:btrfs-control

alias:          char-major-10-234

alias:          fs-btrfs

rhelversion:    7.3

srcversion:     DBE5027041B7F046DBC5525

depends:        raid6_pq,xor,zlib_deflate

intree:         Y

vermagic:       3.10.0-514.el7.x86_64 SMP mod_unload modversions

signer:         CentOS Linux kernel signing key

sig_key:        D4:88:63:A7:C1:6F:CC:27:41:23:E6:29:8F:74:F0:57:AF:19:FC:54

sig_hashalgo:   sha256

[root@localhost ~]# insmod `modinfo -n btrfs`

insmod: ERROR: could not insert module /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/btrfs/btrfs.ko: Unknown symbol in module

[root@localhost ~]#

6、ramdisk文件管理:不是由内核生成的,而是由内核上提供的命令管理的

centos5/6/7:mkinitrd:

centos6/7:dracut

[root@localhost ~]# ls /boot | grep initramfs

initramfs-0-rescue-2870a7d09372452a93f532a5bc3afdad.img

initramfs-3.10.0-514.el7.x86_64.img    //提供装载内核所需要的驱动,如果此文件不存在,则无法启动系统。可以自己创建

initramfs-3.10.0-514.el7.x86_64kdump.img

[root@localhost ~]#

mkinitrd命令:为当前使用中的内核重新制作ramdisk文件。

命令格式:mkinitrd [OPTION...] [<initrd-image>] <kernel-version>

option:

--with=<module> :向initramfs中添加内核模块

--preload=<module>:initramfs所提供的模块,需要预先装载的模块

示例:

mkinitrd /boot/initramfs-3.10.0-514.el7.x86_64.img 3.10.0-514.el7.x86_64

dracut命令:更底层的生成initramfs镜像的工具

格式: dracut [OPTION...] [<image> [<kernel version>]]

示例:

[root@localhost ~]# dracut  /boot/initramfs-`uname -r`.img `uname -r`



7、内核信息输出的伪文件系统:/proc、/sys ;系统调优一般是这两个目录下参数的设置调整

/proc

/proc:内核状态和统计信息的输出接口;同时还提供一个配置接口:/proc/sys

/proc下的参数分类:只读、可写

只读:信息输出;例如/proc/#/*   //#表示数字,

可写:可接受用户指定的一个“新值”来实现对内核某功能或特性的配置;写权限仅root拥有;可写的参数位于:/proc/sys目录下

示例:

[root@localhost ~]# ls /proc

1     16    271   2913  3020  3186  394  544  665  745        driver       meminfo        sysvipc

10    17    2713  292   3031  3253  395  545  666  749        execdomains  misc           timer_list

1003  18    2714  2930  3038  3257  396  546  676  760        fb           modules        timer_stats

1004  19    272   2944  3047  3258  397  547  677  8          filesystems  mounts         tty

1008  2     274   2951  3053  3274  398  563  678  9          fs           mpt            uptime

1019  20    2782  2955  3058  3315  399  565  679  94         interrupts   mtrr           version

1026  21    2787  2963  3062  3342  4    569  680  999        iomem        net            vmallocinfo

1027  2291  28    297   3067  3416  40   571  683  acpi       ioports      pagetypeinfo   vmstat

1028  2414  282   2979  3071  3420  400  573  685  asound     irq          partitions     zoneinfo

12    2420  283   2984  3072  3468  41   578  686  buddyinfo  kallsyms     sched_debug

13    2495  284   2988  3074  365   42   580  690  bus        kcore        schedstat

14    2503  286   2991  3077  366   43   583  692  cgroups    keys         scsi

1460  2528  2879  3     3078  376   481  6    696  cmdline    key-users    self

1473  26    288   30    3084  377   5    62   7    consoles   kmsg         slabinfo

1474  2677  29    3003  3091  38    504  621  700  cpuinfo    kpagecount   softirqs

1486  2689  290   3004  3092  39    506  640  701  crypto     kpageflags   stat

15    27    2903  3007  3121  391   518  650  703  devices    loadavg      swaps

1550  2703  2908  3018  3137  392   531  655  709  diskstats  locks        sys

1553  2706  291   302   3180  393   542  662  734  dma        mdstat       sysrq-trigger

[root@localhost ~]#

[root@localhost ~]# ls /proc/sys

abi  crypto  debug  dev  fs  kernel  net  sunrpc  vm

[root@localhost ~]#

/proc/sys/net/ipv4/ip_forward相当于:/proc/sys/net.ipv4.ip_forward

修改/proc参数值得方法:sysctl命令、echo命令、cat命令

sysctl命令:专用于查看或设定/proc/sys目录下参数的值

sysctl命令格式:

sysctl [options] [variable[=value]] [...]

sysctl -p [file or regexp] [...]

查看内核参数设置

[root@localhost ~]# sysctl -a   //查看所有内核参数设置

[root@localhost ~]# sysctl  -a |grep ip_forward

net.ipv4.ip_forward = 1

net.ipv4.ip_forward_use_pmtu = 0

[root@localhost ~]#

[root@localhost ~]# sysctl net.ipv4.ip_forward //查看特定参数设置

net.ipv4.ip_forward = 1

[root@localhost ~]#

或 [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward    //另一种方法查看内核信息参数设置

1

[root@localhost ~]#

修改内核参数设置:

方法一: sysctl -w variable=value

方法二:echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE

示例:

#echo "host" > /proc/sys/kernel/hostname

#uname -a

注意:通过sysctl和cat命令设定的内核参数,重启后会丢失配置。

方法三:通过配置文件修改内核参数

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

[root@localhost ~]# ls /etc/sysctl.conf  /etc/sysctl.d/*.conf -ld

-rw-r--r--. 1 root root 449 Nov  6  2016 /etc/sysctl.conf

lrwxrwxrwx. 1 root root  14 Aug 29 20:05 /etc/sysctl.d/99-sysctl.conf -> ../sysctl.conf

[root@localhost ~]#

示例:

#vim /etc/sysctl.conf

net.ipv4.ip_forward=1   //核心转发,即从一个网络转到另一个网络

重读配置文件:sysctl -p [/PATH/TO/CONFIG_FILE]

内核参数:

net.ipv4.ip_forward:核心转发

vm.drop_caches:回收内存

kernel.hostname:主机名

net.ipv4.icmp_echo_ignore_all:忽略所有ping自己操作

/proc/sys目录:

sys是一个伪文件系统,主要用来输出内核识别出的各硬件的相关属性信息,也有内核对硬件特性的可设置参数,对这些参数的修改,即可定制设备的相关工作特性。

udev:通过读取/sys目录下的硬件设备信息,按需为各硬件设备创建设备文件,udev是用户空间程序,专用工具有:devadmin、hotplug

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

转载于:https://blog.51cto.com/10631377/2058181

13.3、linux kernel介绍相关推荐

  1. 手机linux内核下载,Linux Kernel

    游戏概述 Linux Kernelapp下载,最新版本的Linux内核,支持Intel.Alpha.PPC.Sparc.IA-64 .ARM.MIPS.Amiga.Atari和IBM s/390等.L ...

  2. Linux Kernel Namespace实现: namespace API介绍

    1)前言 随着docker的出现, Linux container这种轻量级虚拟化方案越来越在产业里得到大规模的部署和应用. 而Namespace是Linux Container的基础, 了解name ...

  3. 镜像安装linux选择内核版本,在CentOS和Ubuntu中安装Linux Kernel 4.13.10

    Linus Torvalds 在 10 月 17 日星期五正式发布了稳定版 Linux Kernel 4.13.10,这个最新版本发布了新功能,进行了诸多修复和问题改进.下面将向大家介绍在 CentO ...

  4. Linux kernel crypto的介绍

    目录 1.linux kernel crypto的软件框图 2.sendmsg/recvmsg如何调用到底层encrypt/decrypt 3.算法的底层实现(以为aes/hash为例) 1.linu ...

  5. linux kernel中的栈的介绍

    目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...

  6. 【ARM】一步一步移植Linux Kernel 2.6.13到板子

    1环境搭建所需材料 2环境搭建所需材料之间的关系 3所使用的开发板 4译内核 1修改makefile 2拷贝配置文件 3编译得到zImage 4把zImage转成uImage 5开发板串口连接 6ub ...

  7. Linux kernel 中模块化的平台驱动代码介绍

    介绍 在linux kernel中通过module_platform_driver来实现模块化平台驱动.大量的设备驱动程序都基于该种方式来实现,使用频次非常的高,在linux kernel 5.4.1 ...

  8. linux下软件发布,Linux Kernel 5.12发布下载,附新特性及新功能介绍

    Linus Torvalds在Linux内核邮件列表中宣布正式发布Linux Kernel 5.12版本,已提供linux-5.12.tar.xz/tar.gz下载,以下为你介绍该版本的更改.新特性及 ...

  9. Linux Kernel 5.13 稳定版发布:初步支持 M1 芯片

    责编 | 张红月 出品 | CSDN(ID:CSDNnews) Linus Torvalds 发布了Linux Kernel 5.13 稳定版,该内核以全新的"Opossums on Par ...

最新文章

  1. 网络营销中一旦网站改版需要遵循哪些网络营销原则呢?
  2. python一行没写完用什么隔离_完全隔离的Python环境
  3. SAP loyalty management点击了公式超链接后的处理逻辑
  4. Openldap命令详解
  5. 【软件测试】黑盒测试の因果图法
  6. 代码块、final关键字、包、权限修饰符的复习理解
  7. 解决 Linux 下 Sublime Text 中文输入
  8. android ota不打包_android 6.0系统 make otapackage 错误
  9. wince 开发_正运动技术运动控制卡应用开发教程之Python
  10. 线程池工厂方法newFixedThreadPool()和newCachedThreadPool()
  11. MAC安装linux双系统
  12. linux 修改mysql端口
  13. 拯救报错:Error: connect ETIMEDOUT
  14. c#中将word转成图片,无水印
  15. Qt Flash 播放
  16. Python学习-安装Anaconda及print我爱王晓静
  17. HackTheBox-Spider WP
  18. 【 Iptables 】
  19. Excel表格的密码设置与取消
  20. 都有哪些语言是跨平台的?

热门文章

  1. 基于QT开发的多媒体播放器
  2. IJ的Tomcat环境配置
  3. HDU 4752 Polygon(抛物线长度积分)
  4. 茶叶交易行情小程序开发制作功能介绍
  5. TransactionScope 与 Async/Await
  6. PM3(矩阵相乘 行和的简便运算)
  7. JQ实现效果:鼠标滑过图片,图片变大
  8. cool-admin框架前端使用-vue3版本,useUpsert使用
  9. ARP欺骗和防御实验
  10. 算法之路--高斯分布(一)