kernel

kernel.1.1 Linux内核及模块管理基础

 

1、 Linux内核组成部分:
1>  kernel : 内核核心,一般为bzimage格式的压缩文件,通常位于/boot目录,名称为’vmlinuz-VERSION-release’;
2>  kernel object : 内核对象(内核模块),一般位于/lib/modules/VERSION-release;
3>  ramdisk : 辅助性文件,是否需要加载,取决于内核是否能直接驱动rootfs所在的设备;
备注:内核模块所在路径的路径名称必须与内核文件名称的版本号信息一致;

加载内核模块的3种表现方式:
[  ]       不编译、不启用此模块功能 , excluded;
[M]     编译成模块 , module;
[*]       编译进内核核心 , built-in;
<>       module capable ;

rootfs所在设备的类型:硬件设备驱动、逻辑设备驱动、文件系统;

ramdisk是一个简装版的根文件系统;

2、获取内核信息
~]# uname   -r            查看内核的release号;
~]# uname   -n           查看主机名,相当于’hostname’命令;
~]# uname   -a           查看内核的release号、主机名、内核版本号(内核封装发行的日期)等;

3、模块信息的获取与模块的装载、卸载

查看:
———
lsmod命令:
Show  the  status  of  modules  in  the  Linux  Kernel

~]# lsmod                    列出当前内核已加载的所有内核模块,查看到的信息是从’/proc/modules/’目录中获取的;

modinfo命令:
Show  information  about  a  Linux  Kernel  module
查询指定内核模块的详细信息;

~]# modinfo  -n  MODULE_NAME                       查看指定模块名称的文件名(文件的完整路径);

[root@kouyuushinn ~]# modinfo btrfs
filename:       /lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/fs/btrfs/btrfs.ko.xz
license:        GPL
alias:          devname:btrfs-control
alias:          char-major-10-234
alias:          fs-btrfs
retpoline:      Y
rhelversion:    7.4
srcversion:     E068A967C56C68932E2B7E5
depends:        raid6_pq,xor
intree:         Y
vermagic:       3.10.0-693.21.1.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        03:DA:60:92:F6:71:13:21:B5:AC:E1:2E:84:5D:A9:73:36:F7:67:4D
sig_hashalgo:   sha256
[root@kouyuushinn ~]#

装载与卸载:
—————

modprobe命令:
Add  and  remove  modules  from  the  Linux  Kernel;
从内核中装载和卸载模块;

~]# modprobe  MODULE_NAME                  装载模块;
~]# modprobe  -r  MODULE_NAME             卸载模块;

备注:对于正在使用的模块,禁止卸载;

depmod命令:
depmod –  Generate  modules.dep  and  map  files;
内核模块依赖关系文件的生成工具;

模块的装载和卸载的另一组命令;

insmod命令:
Simple  program  to  insert  a  module  into  the  Linux  Kernel;
装载模块,后面接模块对应的完整名称;此命令无法解决依赖关系;

~]# insmod  MODULE_FILE_NAME

rmmod命令:
Simple  program  to  remove  a  module  from  the  Linux  Kernel;
卸载指定模块,后面接模块名称;

~]# rmmod   NODULE_NAME

4、ramdisk文件管理

CentOS 5 :
—————
mkinitrd命令:
is  a  compat  wrapper ,  which  calls  dracut  to  generate  an  initramfs;
为当前使用中的内核重新创建ramdisk文件;

–with=<module> 指定除了默认的模块之外,需要装载至initramfs中的其他模块;
–preload=<module> 在加载其他内核模块之前,在initramfs中预加载其他内核模块;

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

CentOS 6/7 :
——————
dracut命令:
low-level  tool  for  generating  an  initramfs  image;
底层工具,为当前使用中的内核重新创建ramdisk文件;

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

 

5、伪文件系统

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

>> /proc有2类参数:
只读参数:只用来做信息输出;
可写参数:可接受用户指定的一个”新值”来实现对内核某功能或特性的配置;

>> 修改’/proc/sys/’目录下内核参数值的2中方法:

>>> 命令方式:只对当前shell有效,重启无效;

sysctl命令说明:
configure  kernel  parameters  at  runtime;运行时修改内核参数;

~]# sysctl  -a                                        显示当前系统所有可用的内核参数,并显示当前内核参数值;
~]# sysctl  variable                             显示指定内核参数的值;
~]# sysctl  -w  variable=value          修改指定内核参数的值;

‘variable’的写法:比如内核参数’net.ipv4.ip_forward’;

cat,echo命令:
~]# cat  /proc/sys/PATH/TO/VARIABLE                              查看指定内核参数的值;
~]# echo  value  >  /proc/sys/PATH/TO/VARIABLE           重定向覆盖修改内核参数值;

‘/PATH/TO/VARIABLE’是内核参数映射到伪文件系统中的完整的文件路径;
比如:内核参数’net.ipv4.ip_forward’,映射到伪文件系统的完整文件路径为’/proc/sys/net/ipv4/ip_forward’;

>>> 修改配置文件:修改后重读配置文件,永久有效;

编辑配置文件/etc/sysctl.conf;
~]# sysctl  -p  [/etc/sysctl.conf]                         重读配置文件;文件路径不指定时,默认读取’/etc/sysctl.conf’;

>> 举例几个内核参数:
net.ipv4.ip_forward                              核心转发参数;
net.ipv4.icmp_echo_ignore_all        忽略所有发往本机的ping操作;
kernel.hostname                                   主机名参数;

查看主机名;
~]# sysctl   kernel.hostname
~]# cat  /proc/sys/kernel/hostname

命令方式修改:
~]# sysct  -w  kernel.hostname=lucifer.kouyuushinn.cn
~]# echo  “lucifer.kouyuushinn.cn”  >  /proc/sys/kernel/hostname

配置文件方式修改:
~]# echo  “kernel.hostname  =  lucifer.kouyuushinn.cn”  >>  /etc/sysctl.conf
~]# sysctl   -p

/sys 目录 :

sysfs  :  输出内核识别出的各硬件设备的相关信息,也有内核对硬件特性的可设置参数;对这些参数的修改可定制硬件设备的工作特性;

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *