Linux Kernel:
单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。
内核组成部分:
kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;
kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
辅助文件:ramdisk
initrd
initramfs
运行中的内核:
uname命令:
uname - print system information
uname [OPTION]...
-n: 显示节点名称;
-r: 显示VERSION-RELEASE;
模块:
lsmod命令:
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules文件
modinfo命令:
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author
-d: description
-l: license
[[email protected] ~]# modinfo ext4
filename: /lib/modules/2.6.32-504.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: 2DA002AAC5B453054C69FB2
depends: mbcache,jbd2
vermagic: 2.6.32-504.el6.x86_64 SMP mod_unload modversions
[[email protected] ~]# modinfo Ip
ERROR: modinfo: could not find module Ip
[[email protected] ~]# modinfo stp
filename: /lib/modules/2.6.32-504.el6.x86_64/kernel/net/802/stp.ko
license: GPL
srcversion: ADE6C8A333621C77ACAC02C
depends: llc
vermagic: 2.6.32-504.el6.x86_64 SMP mod_unload modversions
modprobe命令:
装载或卸载内核模块
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]
配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
modprobe [ -r ] modulename...
[[email protected] ~]# modprobe xfs
[[email protected] ~]# lsmod | grep xfs
xfs 1124960 0
exportfs 4236 1 xfs
[[email protected] ~]# modprobe -r xfs
[[email protected] ~]# modinfo -n xfs
/lib/modules/2.6.32-504.el6.x86_64/kernel/fs/xfs/xfs.ko
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具;
装载或卸载内核模块:
insmod命令:
insmod [ filename ] [ module options... ]
rmmod
rmmod [ modulename ]
/proc目录:
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出;
[[email protected] ~]# sysctl -a | wc -l
736
[[email protected] ~]# cat /proc/sys/kernel/hostname
slave
参数:
只读:输出信息
可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
/proc/sys
(1) sysctl命令用于查看或设定此目录中诸多参数;
sysctl -w path.to.parameter=VALUE
[[email protected] ~]# sysctl -w kernel.hostname=www.magedu.com
kernel.hostname = www.magedu.com
[[email protected] ~]# hostname
www.magedu.com
[[email protected] ~]# sysctl -w kernel.hostname=slave
kernel.hostname = slave
[[email protected] ~]# hostname
slave
~]# sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通过重定向的方式也可以修改大多数参数的值;
echo "VALUE" > /proc/sys/path/to/parameter
~]# echo "www.magedu.com" > /proc/sys/kernel/hostname
sysctl命令:
默认配置文件:/etc/sysctl.conf
永久有效
/etc/sysctl.conf
(1) 设置某参数
sysctl -w parameter=VALUE
(2) 通过读取配置文件设置参数
sysctl -p [/path/to/conf_file]
内核中的路由转发:
/proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
使内核生效
sysctl -p
sysctl -w net.ipv4.ip_forward=1
常用的几个参数:
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
/sys目录:
sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性。
udev通过此路径下输出的信息动态为各设备创建所需要设备文件;udev是运行用户空间程序;专用工具:udevadmin, hotplug;
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下;
ramdisk文件的制作:
(1) mkinitrd命令
为当前正在使用的内核重新制作ramdisk文件
mv /boot/initramfs-2.6.32-504.el6.x86_64.img /root
~] # mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
看一下是什么
[email protected] ~]# file initramfs-2.6.32-504.el6.x86_64.img
initramfs-2.6.32-504.el6.x86_64.img: gzip compressed data, from Unix, last modified: Tue Jan 27 14:53:45 2015, max compression
[[email protected] ~]# mv initramfs-2.6.32-504.el6.x86_64.img initramfs-2.6.32-504.el6.x86_64.img.gz
解压缩
[[email protected] ~]# gzip -d initramfs-2.6.32-504.el6.x86_64.img.gz
[[email protected] ~]# file initramfs-2.6.32-504.el6.x86_64.img
initramfs-2.6.32-504.el6.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
(2) dracut命令
为当前正在使用的内核重新制作ramdisk文件
~] # dracut /boot/initramfs-$(uname -r).img $(uname -r)
编译内核:
前提:
(1) 准备好开发环境;
(2) 获取目标主机上硬件设备的相关信息;
(3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;
(4) 获取内核源代码包;
www.kernel.org
准备好开发环境:
包组(CentOS 6):
Server Platform Development
Development Tools
目标主机硬件设备相关信息:
CPU:
~]# cat /proc/cpuinfo
~]# x86info -a
~]# lscpu
PCI设备:
~]# lspci
-v
-vv
~]# lsusb
-v
-vv
~]# lsblk
了解全部硬件设备信息
~]# hal-device
简单依据模板文件的制作过程:
~]# 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
~]# make menuconfig
~]# screen
~]# make -j #
make -j 4 #4表示开4个线程编译
~]# make modules_install
~]# make install
重启系统,并测试使用新内核;