单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核核心,一般为bzImage,通常在/boot目录下
名称为 vmlinuz-VERSION-RELEASE
kernel object:内核对象,一般放置于
/lib/modules/VERSION-RELEASE/
辅助文件:ramdisk
initrd
initramfs
运行中的内核:
uname命令:
uname – print system information
uname [OPTION]…
-n: 显示节点名称
-r: 显示VERSION-RELEASE
-a:显示所有信息
lsmod命令:
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules文件
modinfo命令:
功能:管理内核模块
配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
常用选项:
-n:只显示模块文件路径 -p:显示模块参数 -a:作者 -d:描述
范例:
lsmod |grep xfs modinfo xfs
装载或卸载内核模块modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ] modprobe [ -r ] modulename…
depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具
insmod命令:指定模块文件,不自动解决依赖模块
insmod [ filename ] [ module options... ]
范例:
insmod modinfo –n exportfs lnsmod modinfo –n xfs
rmmod命令:卸载模块
rmmod [ modulename ]
范例:
rmmod xfs rmmod exportfs编译内核
编译安装内核准备:
(1) 准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取目标主机系统功能的相关信息,例如:需要启用相应的文件系统
(4) 获取内核源代码包, www.kernel.org
CPU:
cat /proc/cpuinfo x86info -a lscpu
PCI设备:lspci -v ,-vv
[root@centos8 ~]#lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) 00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08) 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) 00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10) 00:0f.0 VGA compatible controller: VMware SVGA II Adapter 00:10.0 SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01) 00:11.0 PCI bridge: VMware PCI bridge (rev 02) 00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01) 00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01)
USB设备:lsusb -v,-vv
[root@centos8 ~]#dnf install usbutils -y [root@centos8 ~]#lsusb Bus 001 Device 004: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub [root@centos8 ~]#lsmod |grep usb usb_storage 73728 1 uas
lsblk 块设备
全部硬件设备信息:hal-device:CentOS 6
开发环境相关包gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel
内核编译安装实现下载源码文件
准备文本配置文件/boot/.config
make menuconfig:配置内核选项
make [-j #] 或者用以下两步实现:make -j # bzImage
make -j # modules
安装模块:make modules_install
安装内核相关文件:make install
安装bzImage为 /boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
编辑grub的配置文件编译安装内核实战案例
[root@centos8 ~]#yum install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel [root@centos8 ~]#tar xf linux-5.4.13.tar.xz -C /usr/src [root@centos8 ~]#cd /usr/src [root@centos8 ~]#ln -sv linux-5.4.13 linux [root@centos8 ~]#cd /usr/src/linux [root@centos8 ~]#cp /boot/config-$(uname -r) ./.config [root@centos8 ~]#vim .config # CONFIG_MODULE_SIG is not set CONFIG_SYSTEM_TRUSTED_KEYS="" # CONFIG_DEBUG_INFO is not set [root@centos8 ~]#make help [root@centos8 ~]#make menuconfig [root@centos8 ~]#make -j 2 或者 make -j 2 bzImage ; make -j 2 modules [root@centos8 ~]#make modules_install [root@centos8 ~]#make install [root@centos8 ~]#reboot内核编译说明
配置内核选项 支持“更新”模式进行配置:make help
(a) make config:基于命令行以遍历的方式配置内核中可配置的每个选项
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)环境窗口界面
(d) make xconfig:基于QT(KDE)环境的窗口界面 支持“全新配置”模式进行配置
(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b) make allyesconfig: 所有选项均回答为“yes“
(c) make allnoconfig: 所有选项均回答为“no“
编译内核
全编译:make [-j #]
编译内核的一部分功能:
(a) 只编译某子目录中的相关代码cd /usr/src/linux; make dir/ (b) 只编译一个特定的模块
cd /usr/src/linux; make dir/file.ko 范例:只为e1000编译驱动:
make drivers/net/ethernet/intel/e1000/e1000.ko
3 交叉编译内核
编译的目标平台与当前平台不相同
make ARCH=arch_name
要获取特定目标平台的使用帮助
make ARCH=arch_name help
示例:
make ARCH=arm help
4 重新编译需要事先清理操作
make clean:清理大多数编译生成的文件,但会保留config文件等 make mrproper: 清理所有编译生成的文件、config及某些备份文件 make distclean:mrproper、清理patches以及编辑器备份文件卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表 grub2-mkconfig -o /boot/grub2/grub.cfg
CentOS 8 还需要删除 /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-新内核版本.conf



