内核组成: uname命令
内核:uname,mkinitrd,dracut
模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod
/proc,sysctl,/sys,/dev,udevadm,hotplug命令
一、静态视角:
Linux内核模块
吸收微内核设计:支持模块化设计:
内核中模块 .ko (kernel object)
程序调用的库 .so (share object)
内核模块相当于程序的库的概念,只是模块只能被kernel调用。库只能被程序调用
单内核系统设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核模块,一般为bzImage,通常在/boot目录下,名为vmlinuz-VERSION-RELEASE;
kernel object : 内核对象,一般放置于/lib/modules/VERSION-RELEASE
辅助文件 initramfs(CentOS 6,7) , initrd (CentOS5)
三种选择: [ ]: N ---不编译此功能(不支持该功能) [M]:M ---编译成模块(按需动态加载) [*]: Y ---编译成核心组成部分(需要直接使用)
二、动态视角:
2.1、uname 命令
查看内核相关的信息 uname 显示系统(kernel)信息 -s 显示操作系统名称 -n 显示当前主机名称: 显示节点名称 -r 显示VERSION及RELEASE号 -v 显示内核制作信息号 SMP 对称多处理器 -m 当前硬件平台 x86_64 -p 显示处理器类型或架构 x86_64 -i 硬件架构 x86_64 -o 操作系统(GNU/Linux)
2.2、lsmod --- 查看由内核已经装载的模块
显示的内容来自于: /proc/modules文件
# lsmod Module Size Used by 模块 大小 使用次数
2.3、modinfo --- 显示模块的详细描述信息
-n : 只显示模块文件路径
-d :显示模块的描述
-p :模块的参数
-k kernel :显示指定内核的模块信息
-a :Author
-l:License
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
2.4、生成模块的依赖关系 depmod
内核模块依赖关系文件及信息映射文件的生成工具
为指定内核生成依赖 -b
/boot/system.map-VERSION-RELEASE 内核依赖的模块及库
/lib/modules/VERSION-RELEASE/modules.dep.bin 模块的依赖关系
2.5、装载模块 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
2.6、modprobe --- 拆除模块
配置文件:/etc/modprobe.conf , /etc/modprobe.d/*.conf
modprobe -r MODULE 或 rmmod MODULE
# modprobe -r pcnet32 # lsmod | fgrep pcnet32 # # rmmod pcnet32 # lsmod | fgrep pcnet32 #
2.7、/proc目录
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出:
只读 :输出信息-----内核内部统计、状态信息
可写: 可配置参数,/proc/sys目录中,由sysctl命令控制,内核性能调整
临时生效:echo ‘STRING‘ > /proc/sys/kernel/hostname , sysctl -w kernel.hostname=‘STRING‘
永久有效:/etc/sysctl.conf
(1)sysctl 命令用于查看或设定此目录中诸多参数:
sysctl -w path.to.parameter=VALUE
#sysctl -w kernel.hostname= liu
(2) echo命令通过重定向的方式也可以修改大多数参数的值
echo “VALUE” > path/to/parameter
#echo "localhost" > /proc/sys/kernel/hostname
sysctl命令:
配置文件: /etc/sysctl.conf
-a 显示所有内核参数-p 重读配置文件
-p CONFIG_FILE 读取文件设定参数 -w PARAMETER=‘VALUE‘ 设定内核参数 主机名: /proc/sys/kernel/hostnam # echo ‘VALUE‘ > /proc/sys/kernel/hostname
# sysctl -w kernel.hostname=‘VALUE‘ 内核路由转发: /proc/sys/net/ipv4/ip_forward 1:开启; 0:关闭 cache/buffer回收: /proc/sys/vm/drop_caches 1: dropcache #sysctl -w vm.drop_caches=1
常用几个参数:(被映射为目录) net.ipv4_forward vm.drop_caches kernel.hostname
2.8、/sys目录---针对硬件设备
输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息:有些参数是可以修改的,用于调整硬件工作特性
a)、内核探测的硬件信息
kernel 2.4- /dev/目录下事先创建所有设备文件,/dev/目录文件多,造成大量空间浪费
kernel 2.4+ /dev/目录下按需生成设备文件,kernel临时探测,按需创建,节约空间
b) 、udev通过此路径下输出的信息动态为设备创建所需要设备文件;udev是运行在用户空间程序
- udev工具: udevadmin,hotplug
- udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下
- 读取/sys目录下的硬件信息,在/dev目录下创建设备文件
三、ramdisk文件的制作
(1)mkinitrd 命令 :为当前正在使用的内核重新制作ramdisk文件
mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
#mv /boot/initramfs-2.6.32-573.el6.x86_64.img /root/ #mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2)dracut 命令
dracut [OPTION]... <image> <kernel-version>
#dracut /boot/initramfs-$(uname -r).img $(uname -r)
3.2、展开 initramfs-$(uname -r).img
1、查看文件的类型 file 2、改名.gzip结尾 mv 3、解压 gzip -d 4、查看文件类型 file 5、展开 install -d initrd cd initrd cpio -id < ../
四、简易编译内核
1)准备好开发环境
2)获取源码
3)获取目标主机的硬件设备信息
4)获取到目标主机系统功能的项管部信息---目标实际需要
准备开发环境
包组(centos 6): yum grouplist
Server Platform Development
Development Tools
4.1、
目标主机硬件设备相关信息:
CPU
cat /proc/cupinfo yum install x86info x86info -a lsmod
PCI
#lspci
#lsusb
#lsblk
了解全部硬件设备信息
#hal-device
第一次最好从参照模块文件来做如图:
4.2、
1)、获取源码
**小于3.10版本
2)、展开至/usr/local/目录
tar xf linux-3.10.67.tar.xz -C /usr/local/src
3)、创建符号链接
ln -sv linux-3.10.67 linux
4)、[[email protected] src]#cd linux
[[email protected] src]#cp /boot/config-2.6.32-573.el6.x86_64 .config
5)、选择支持的模块
根据提示需要安装ncurses-devel, yum -y install ncurses-devel
再执行make menuconfig命令会弹出如图界面(会加载.config文件内容)
a)、设置release号
b)、设置主机名
c)、设置支持NTFS文件系统
d)、设置支持的网络驱动
打开一个虚拟的屏幕:
yum -y install screen 退出: ctrl + a 松开a后按d 列出: screen -ls 找出ID 连接回: screen -r ID
6)、编译
make -j #
# lscpu 中 cpu(s) 后的数字为cpu核心数
7)、执行安装:
make modules_install
make install
8)、重启系统,并测试使用新内核
原文地址:https://www.cnblogs.com/liuzhiyun/p/11440666.html