• Linux内核及模块


    内核以及内核模块

    操作系统组成

    1、内核 2shell 3、应用

    内核作用

    1、管理内存

    2、调度任务

    3、驱动硬件

    4、网络功能

    5、安全

    6、管理文件系统

    内核=内核【vmlinuz-2.6.18-164.el5+内核模块

    内核:/boot/vmlinuz-2.6.18-164.el5

    内核模块:/lib/modules/`uname -r`/kernel/

    [root@localhost ~]# du -sh /lib/modules/`uname -r`/

    50M /lib/modules/2.6.18-164.el5/

    无论是 vmlinuz-2.6.18-164.el5还是initrd-2.6.18-164.el5.img 在启动的时候都必须被加载。

    [root@localhost ~]# vim /etc/grub.conf

    # grub.conf generated by anaconda

    #

    # Note that you do not have to rerun grub after making changes to this file

    # NOTICE:  You have a /boot partition.  This means that

    #          all kernel and initrd paths are relative to /boot/, eg.

    #          root (hd0,0)

    #          kernel /vmlinuz-version ro root=/dev/sda2

    #          initrd /initrd-version.img

    #boot=/dev/sda

    default=0 在启动的时候,5秒之内如果没做任何动作,5秒之后默认启动第一个标签所对应的操作系统

    timeout=5 在启动的时候,5秒之内敲任意键会显示此菜单

    splashimage=(hd0,0)/grub/splash.xpm.gz 表示启动的时候显示的grub的背景

    Hiddenmenu 表示这个菜单是隐藏的。

    title Red Hat Enterprise Linux Server (2.6.18-164.el5) 标签

            root (hd0,0) 表明引导分区在哪。在引导的时候不管是scisi接口还是IDE接口,硬盘通通hd,因为系统还没起来,它没有办法来区分。第一块硬盘第一个分区(挂在/boot目录下)。所以引导的根指的就是引导分区。

            kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet

    内核在根下的vmlinuz-2.6.18-164.el5,这个根指的是引导分区。’/’表示root所表示的含义。ro表示在启动的过程中内核最紧凑的1.8M是不能修改的,是以只读的方式来进行启动。但是一旦正常引导起来之后,我们有自己的文件系统根,所以这时候根要转交给文件系统的根。root=LABEL=/ 表明真正的文件系统的根应该是LABEL=/ 的那个

    [root@localhost ~]# findfs LABEL=/

    /dev/sda2

    rhgbredhat graphical boot 图形化引导,一旦改成3级别,这个参数就没有任何作用了。

    quiet 表示静默模式,内核在引导的时候实际上会有很多信息显示在屏幕上,但是这些信息很多时候对我们没有太大帮助,所以静默意味着不要再显示在控制台上了。

    ro root=LABEL=/ rhgb quiet 向内核传递的一些参数

            initrd /initrd-2.6.18-164.el5.img

    必须把文件系统相关的模块加载进去之后,才能够去识别根,模块又在根上,所以成了鸡和蛋的问题。这时候怎么处理?为了解决这个问题,它事先在内存中加载了一个镜像文件,这个镜像文件里面正是包含了要用的那些模块。为了解决绕来绕去的关系,事先在引导的时候加载了一个驱动镜像就可以了。

    [root@localhost initrd]# cp /boot/initrd-2.6.18-164.el5.img ./

    [root@localhost initrd]# file initrd-2.6.18-164.el5.img

    initrd-2.6.18-164.el5.img: gzip compressed data, from Unix, last modified: Wed Dec 21 04:55:40 2016, max compression

    [root@localhost initrd]# zcat initrd-2.6.18-164.el5.img |cpio -id 查看压缩文件的内容并进行拆解

    11704 blocks

    [root@localhost initrd]# ll

    total 2592

    drwx------ 2 root root    4096 Jan  7 02:18 bin

    drwx------ 3 root root    4096 Jan  7 02:18 dev

    drwx------ 2 root root    4096 Jan  7 02:18 etc

    -rwx------ 1 root root    2587 Jan  7 02:18 init

    -rw------- 1 root root 2615764 Jan  7 02:17 initrd-2.6.18-164.el5.img

    drwx------ 3 root root    4096 Jan  7 02:18 lib

    drwx------ 2 root root    4096 Jan  7 02:18 proc

    lrwxrwxrwx 1 root root       3 Jan  7 02:18 sbin -> bin

    drwx------ 2 root root    4096 Jan  7 02:18 sys

    drwx------ 2 root root    4096 Jan  7 02:18 sysroot

                                     

    [root@localhost ~]# ll -h /boot/

    total 5.4M

    -rw-r--r-- 1 root root 933K Aug 19  2009 System.map-2.6.18-164.el5

    -rw-r--r-- 1 root root  68K Aug 19  2009 config-2.6.18-164.el5

    drwxr-xr-x 2 root root 1.0K Dec 21 05:06 grub

    -rw------- 1 root root 2.5M Dec 21 04:55 initrd-2.6.18-164.el5.img

    drwx------ 2 root root  12K Dec 21 04:50 lost+found

    -rw-r--r-- 1 root root 105K Aug 19  2009 symvers-2.6.18-164.el5.gz

    -rw-r--r-- 1 root root 1.8M Aug 19  2009 vmlinuz-2.6.18-164.el5 内核最核心部分

    [root@localhost ~]# ll /lib/modules/`uname -r`/kernel/ 内核模块

    total 56

    drwxr-xr-x  3 root root 4096 Dec 21 04:55 arch 表示各种各样的平台

    drwxr-xr-x  2 root root 4096 Dec 21 04:55 crypto 安全加密

    drwxr-xr-x 42 root root 4096 Dec 21 04:55 drivers 驱动各种各样的硬件

    drwxr-xr-x 31 root root 4096 Dec 21 04:55 fs 文件系统

    drwxr-xr-x  4 root root 4096 Dec 21 04:55 lib 各种各样的库

    drwxr-xr-x 22 root root 4096 Dec 21 04:55 net 网络功能

    drwxr-xr-x  9 root root 4096 Dec 21 04:55 sound 声卡

    /proc/目录表示内存和内核的映像。内存的东西以及内核的东西在这个目录下都会有所反馈。该目录下的很多文件大小都是0,虽然是0 不代表没有数据。

    [root@localhost initrd]# dmesg | grep -i cpu 查看CPU相关信息

    [root@localhost initrd]# cat /proc/cpuinfo

    [root@localhost initrd]# dmesg | grep -i mem 查看内存信息

    [root@localhost initrd]# cat /proc/meminfo

    [root@localhost initrd]# free -m

                 total       used       free     shared    buffers     cached

    Mem:           503        343        159          0         42        225

    -/+ buffers/cache:         75        427

    Swap:          509          0        509

    如何清除缓存和Cache?只要在/proc/目录下操作就可以了

    [root@localhost vm]# cat /proc/sys/vm/drop_caches

    0

    [root@localhost vm]# echo "1" >/proc/sys/vm/drop_caches

    [root@localhost vm]# free -m

                 total       used       free     shared    buffers     cached

    Mem:           503         84        419          0          0         10

    -/+ buffers/cache:         73        429

    Swap:          509          0        509

    一般情况下,这些东西我们都不需要操作。

    [root@localhost vm]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all              

    0

    意味着使用pingping它的时候,它是不会忽略的。

    [root@localhost vm]# echo "1" /proc/sys/net/ipv4/icmp_echo_ignore_all

    忽略ping,这是一种临时修改。永久性修改的话,编辑/etc/sysctl.conf

    内核参数 /etc/sysctl.conf

    [root@localhost vm]# echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf

    [root@localhost ipv4]# pwd

    /proc/sys/net/ipv4

    系统自动识别/proc/sys,所以只要写net.ipv4.icmp_echo_ignore_all

    一般这个文件重启的时候才会生效。

    [root@localhost ipv4]# sysctl -p

    为了避免重启,使用该指令,重新让内核读取一下参数。

    系统为了实现更多的功能,需要把臃肿的那一部分做成模块,想知道系统中目前加载了哪些模块?

    查看加载的模块:【显示所有的已经加载的】

    [root@localhost ipv4]# lsmod |less

    Module                  Size  Used by(被引用或者是依赖了多少次)

    ipv6                  267361  18

    xfrm_nalgo             13381  1 ipv6

    crypto_api             12609  1 xfrm_nalgo

    autofs4                29253  3

    hidp                   23105  2

    rfcomm                 42457  0

    l2cap                  29505  10 hidp,rfcomm

    lockd                  63081  0

    查看网卡:

    [root@localhost ipv4]# lsmod | grep eth0

    [root@localhost ipv4]# dmesg | grep -i eth0

    eth0: registered as PCnet/PCI II 79C970A

    eth0: link up

    [root@localhost ipv4]# lsmod | grep -i PCnet

    pcnet32                35269  0

    mii                     9409  1 pcnet32

    具体的看某一个模块:【详细信息】

    [root@localhost ipv4]# modinfo pcnet32

    卸载lp模块

    [root@localhost ipv4]# lsmod | grep lp

    lp                     15849  0

    parport                37513  2 lp,parport_pc

    [root@localhost ipv4]# rmmod lp

    [root@localhost ipv4]# lsmod | grep lp

    [root@localhost ipv4]#

    加载模块 insmod modprobe

    [root@localhost ipv4]# insmod lp

    insmod: can't read 'lp': No such file or directory

    [root@localhost ipv4]# modprobe lp

    [root@localhost ipv4]#

    Modprobe 在加载的时候并不需要指明路径,而且会自动寻找依赖关系,将依赖的模块也自动装上去。

    Insmod 不但要指明路径,而且还要指明依赖关系。所以要先安装依赖的,比较麻烦

    对模块做一些参数的自定义的话,必须要去改 /etc/modprobe.conf文件

    [root@localhost ipv4]# vim /etc/modprobe.conf

    alias eth0 pcnet32

    alias scsi_hostadapter mptbase 别名

    alias scsi_hostadapter1 mptspi

    alias scsi_hostadapter2 ata_piix

    alias scsi_hostadapter3 ahci

    alias snd-card-0 snd-ens1371

    options snd-card-0 index=0 选项

    options snd-ens1371 index=0

    remove snd-ens1371 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --

    ignore-remove snd-ens1371

  • 相关阅读:
    阿里云标准-Docker安全基线检查
    阿里云标准-Redis安全基线检查
    阿里云标准-Nginx安全基线检查
    python中urllib.request和requests的使用和区别
    python爬百度首页
    进行base64编码
    python基础入门 文件操作
    python面向对象编程: 搬家具案例
    在vi或vim上查找字符串
    浅析数据一致性
  • 原文地址:https://www.cnblogs.com/reagina/p/6347126.html
Copyright © 2020-2023  润新知