内核组成: 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、获取源码

https://www.kernel.org/ 

**小于3.10版本


2、展开至/usr/local/目录

wKiom1mxHyCBSMxXAAAIZ2oF4m4624.png


3、创建符号链接

wKiom1mxH3_TYSEpAAAkXOjVqdc999.png


5、编译

wKiom1mxIDLREUx8AAALO3MpXHs787.png

wKiom1mxIFujZ8AvAAAFQHMiUJU154.png

1、设置release号

wKioL1mxIRXSnIZ1AABLRnTO20c902.pngwKioL1mxIVbCgQsQAAAbbjhyyGk030.png

2、设置主机名

wKioL1mxIY-R0STcAABGB25LDCM754.pngwKiom1mxIefB2vBwAAAZ0DR2Re4796.png

3、设置支持NTFS文件系统

wKioL1mxIjCAYQ34AABYAC2p8Po284.pngwKioL1mxIqXQ-82zAACE8a5Ovx8550.png

4、设置支持的网络驱动

wKiom1mxJCPxs2-kAAAE79IXnK8169.png

wKiom1mxJCPCr_QCAAAOdK6D0ZU843.png


wKioL1mxI3Ljse7gAABUnATfDbA376.pngwKioL1mxI57xr5-pAAAR3Eq4hpI059.png

	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核心数

wKiom1mxJIKBrpV_AAAFQjVuLI4464.png


6、安装

wKioL1mxP7OjfXUwAAA4gAEHQgo575.png

wKiom1mxP9Sg-QOwAAAFvl70r9k419.png