内核组成: 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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
生成
|
1
2
3
|
mv /boot/initramfs-VERSION-RELEASE.img /root
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
dracut /boot/initramfs-$(uname -r).img $(uname -r)
|
展开
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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
|
1
2
3
|
# lsmod
Module Size Used by
模块 大小 使用次数
|
查看模块信息 modinfo
模块路径 -n
显示指定内核的模块信息 -k kernel
显示模块的描述 -d
模块的参数 -p
License -l
Author -a
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
pcnet32 29107 0
mii 4476 1 pcnet32
安装pcnet32模块
insmod: error inserting
'/lib/modules/2.6.32-696.el6.i686/kernel/drivers/net/pcnet32.ko'
: -1 Unknown symbol
in
module
查看依赖
depends: mii
依据路径安装被依赖的模块
查看是否安装
mii 4476 0
安装Pcnet32
查看是否安装
pcnet32 29107 0
mii 4476 1 pcnet32
|
拆除模块 modprobe -r MODULE 或 rmmod MODULE
|
1
2
3
4
5
6
7
|
# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
临时生效
1、查看主机名
localhost.localdomain
2、设置主机名
Lcc.org
Lcc.org
3、设定主机名
kernel.
hostname
= lcc.org
4、查看主机名
lcc.org
lcc.org
永久有效
lcc.org
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
magedu.com
|
/sys目录
内核探测的硬件信息
kernel 2.4- /dev/目录下事先创建所有设备文件,/dev/目录文件多,造成大量空间浪费
kernel 2.4+ /dev/目录下按需生成设备文件,kernel临时探测,按需创建,节约空间
udev工具: udevadmin,hotplug
简易编译内核
1)获取源码
2)开发环境
3)查看目标主机的硬件设备信息
4)目标实际需要
1、获取源码
https://www.kernel.org/
**小于3.10版本
2、展开至/usr/local/目录
![1.PNG wKiom1mxHyCBSMxXAAAIZ2oF4m4624.png]()
3、创建符号链接
![2.PNG wKiom1mxH3_TYSEpAAAkXOjVqdc999.png]()
5、编译
![3.PNG wKiom1mxIDLREUx8AAALO3MpXHs787.png]()
![4.PNG wKiom1mxIFujZ8AvAAAFQHMiUJU154.png]()
1、设置release号
![QQ图片20170907183450.png wKioL1mxIRXSnIZ1AABLRnTO20c902.png]()
![QQ截图20170907183631.png wKioL1mxIVbCgQsQAAAbbjhyyGk030.png]()
2、设置主机名
![QQ截图20170907183744.png wKioL1mxIY-R0STcAABGB25LDCM754.png]()
![QQ截图20170907183847.png wKiom1mxIefB2vBwAAAZ0DR2Re4796.png]()
3、设置支持NTFS文件系统
![QQ截图20170907184025.png wKioL1mxIjCAYQ34AABYAC2p8Po284.png]()
![QQ截图20170907184231.png wKioL1mxIqXQ-82zAACE8a5Ovx8550.png]()
4、设置支持的网络驱动
![QQ截图20170907184755.png wKiom1mxJCPxs2-kAAAE79IXnK8169.png]()
![QQ截图20170907184820.png wKiom1mxJCPCr_QCAAAOdK6D0ZU843.png]()
![QQ截图20170907184559.png wKioL1mxI3Ljse7gAABUnATfDbA376.png]()
![QQ截图20170907184633.png wKioL1mxI57xr5-pAAAR3Eq4hpI059.png]()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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核心数
![QQ截图20170907184958.png wKiom1mxJIKBrpV_AAAFQjVuLI4464.png]()
6、安装
![QQ截图20170907204551.png wKioL1mxP7OjfXUwAAA4gAEHQgo575.png]()
![QQ截图20170907204615.png wKiom1mxP9Sg-QOwAAAFvl70r9k419.png]()