内核组成: uname命令
内核:uname,mkinitrd,dracut
模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod
/proc,sysctl,/sys,/dev,udevadm,hotplug命令
内核编译
Linux内核组成
内核文件 bzImage 位置: /boot/vmlinuz-VERSION-RELEASE
内核模块 .ko 位置: /lib/modules/VERSION-RELEASE
辅助文件 initramfs(CentOS 6,7) , initrd (CentOS5)
查看内核相关的信息
uname显示系统(kernel)信息
-s 显示操作系统名称
-n 显示当前主机名称: 显示节点名称
-r 显示VERSION及RELEASE号
-v 显示内核制作信息号 SMP 对称多处理器
-m 当前硬件平台 x86_64
-p 显示处理器类型或架构 x86_64
-i 硬件架构 x86_64
-o 操作系统(GNU/Linux)
使用示例1、系统信息
# uname
Linux
# uname -o
GNU/Linux
2、显示节点名称
# uname -n
localhost.localdomain
# cat /proc/sys/kernel/hostname
localhost.localdomain
# hostname
localhost.localdomain
3、显示version-release号
# uname -r
2.6.32-696.el6.i686
4、内核制作版本号
# uname -v
#1 SMP Tue Mar 21 18:53:30 UTC 2017
5、当前硬件平台
# uname -m
i686
6、处理器架构
# uname -p
i686
7、硬件架构
# uname -i
i386
8、操作系统
# uname -o
GNU/Linux
辅助文件: initramfs,initrd
生成mv /boot/initramfs-VERSION-RELEASE.img /root
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
dracut /boot/initramfs-$(uname -r).img $(uname -r)
展开1、查看文件的类型
file
2、改名.gzip结尾
mv
3、解压
gzip -d
4、查看文件类型
file
5、展开
install -d initrd
cd initrd
cpio -id
Linux内核模块
吸收微内核设计:支持模块化设计:
内核中模块 .ko (kernel object)
程序调用的库 .so (share object)
内核模块相当于程序的库的概念,只是模块只能被kernel调用。库只能被程序调用
编译成模块: [M]
编译进内核: [*]
不编译此功能: [ ]
查看所有已经装载的模块lsmod# lsmod
Module Size Used by
模块 大小 使用次数
查看模块信息modinfo
模块路径 -n
显示指定内核的模块信息 -k kernel
显示模块的描述 -d
模块的参数 -p
License -l
Author -a
1、显示所有信息
# modinfo ext4
filename: /lib/modules/2.6.32-696.el6.i686/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: 74AEE2BDA63AC8482A78F4D
depends: mbcache,jbd2
vermagic: 2.6.32-696.el6.i686 SMP mod_unload modversions 686
2、仅显示filename
# modinfo -n ext4
/lib/modules/2.6.32-696.el6.i686/kernel/fs/ext4/ext4.ko
3、仅显示License
# modinfo -l ext4
GPL
4、仅显示description
# modinfo -d ext4
Fourth Extended Filesystem
5、仅显示作者
# modinfo -a ext4
Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
6、显示模块参数
# modinfo -p ext4
生成模块的依赖关系depmod
为指定内核生成依赖 -b
/boot/system.map-VERSION-RELEASE 内核依赖的模块及库
/lib/modules/VERSION-RELEASE/modules.dep.bin 模块的依赖关系
装载模块modprobe MODULE 或 insmod $(modinfo -n MODULE)# modprobe pcnet32
# lsmod | fgrep pcnet32
pcnet32 29107 0
mii 4476 1 pcnet32
安装pcnet32模块
# insmod $(modinfo -n pcnet32)
insmod: error inserting '/lib/modules/2.6.32-696.el6.i686/kernel/drivers/net/pcnet32.ko': -1 Unknown symbol in module
查看依赖
# modinfo pcnet32
depends: mii
依据路径安装被依赖的模块
# insmod $(modinfo -n mii)
查看是否安装
# lsmod | fgrep mii
mii 4476 0
安装Pcnet32
# insmod $(modinfo -n pcnet32)
查看是否安装
# lsmod | fgrep pcnet32
pcnet32 29107 0
mii 4476 1 pcnet32
#
拆除模块modprobe -r MODULE 或 rmmod MODULE# modprobe -r pcnet32
# lsmod | fgrep pcnet32
#
# rmmod pcnet32
# lsmod | fgrep pcnet32
#
/proc目录
只读 内核内部统计、状态信息
可写 可配置参数,/proc/sys目录中,由sysctl命令控制,内核性能调整
临时生效:echo 'STRING' > /proc/sys/kernel/hostname , sysctl -w kernel.hostname='STRING'
永久有效:/etc/sysctl.conf
sysctl命令
-p CONFIG_FILE 读取文件设定参数
-w PARAMETER='VALUE' 设定内核参数
# echo 'VALUE' > /proc/sys/kernel/hostname
# sysctl -w kernel.hostname='VALUE'
主机名: /proc/sys/kernel/hostname
路由转发: /proc/sys/net/ipv4/ip_forward 1:开启; 0:关闭
cache/buffer回收: /proc/sys/vm/drop_caches 1: dropcache
-a 显示所有内核参数
-p 重读配置文件 配置文件: /etc/sysctl.conf
路由转发: 打开路由转发时,一个网卡的用户能够ping通另一个网卡所在网络的主机临时生效
1、查看主机名
# cat /proc/sys/kernel/hostname
localhost.localdomain
2、设置主机名
# echo "Lcc.org" > /proc/sys/kernel/hostname
# cat /proc/sys/kernel/hostname
Lcc.org
# hostname
Lcc.org
3、设定主机名
# sysctl -w kernel.hostname="lcc.org"
kernel.hostname = lcc.org
4、查看主机名
# hostname
lcc.org
# cat /proc/sys/kernel/hostname
lcc.org
永久有效
# cp /etc/sysctl.conf{,.bak}
# echo "kernel.hostname=magedu.com" >> /etc/sysctl.conf
# hostname
lcc.org
# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
kernel.hostname = magedu.com
# hostname
magedu.com
/sys目录
内核探测的硬件信息
kernel 2.4- /dev/目录下事先创建所有设备文件,/dev/目录文件多,造成大量空间浪费
kernel 2.4+ /dev/目录下按需生成设备文件,kernel临时探测,按需创建,节约空间
udev工具: udevadmin,hotplug
简易编译内核
1)获取源码
2)开发环境
3)查看目标主机的硬件设备信息
4)目标实际需要
1、获取源码
**小于3.10版本
2、展开至/usr/local/目录
3、创建符号链接
5、编译
1、设置release号
2、设置主机名
3、设置支持NTFS文件系统
4、设置支持的网络驱动
general setup
Local version - append to kernel release
-1.os.cpu
((none)) Default hostname 默认主机名
File systems
JFS
GFS2
Btrfs
DOS/FAT
NTFS
Device drivers
Netowrk device support
Enternet driver support
打开一个虚拟的屏幕:
退出: ctrl + a 松开a后按d
列出: screen -ls
连接回: screen -r ID
5、编译
make -j #
# lscpu 中 cpu(s) 后的数字为cpu核心数
6、安装