zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/reagina/p/6347126.html
Copyright © 2011-2022 走看看