页面加载中,请稍候
来源:开源Linux发布时间:2022-12-12943浏览
询问 AI
Linux 内核是一种开源的类 Unix 操作系统宏内核。
Linux内核是Linux操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。内核的用途主要有以下4项工作:
在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。
Linux内核的重要组成部分,主要有以下几部分:
kernel
kernel object
辅助文件(ramdisk)
使用格式
参数解释
#uname-m
i686
#uname-r
2.6.32-573.22.1.el6.i686
#uname-a
LinuxMyServer2.6.32-573.22.1.el6.i686...i686i386GNU/Linux
显示由核心已经装载的内核模块
命令定义
#cat/proc/modules
iptable_filter21730-Live0xed9b2000
ip_tables95671iptable_filter,Live0xed9a9000
ext32037181-Live0xed962000
jbd653151ext3,Live0xed904000
xenfs43601-Live0xed8e6000
ipv627109714-Live0xed88e000
xen_netfront158710-Live0xed7d9000
ext43398122-Live0xed764000
jbd2759271ext4,Live0xed6d9000
mbcache60172ext3,ext4,Live0xed6b7000
xen_blkfront192095-Live0xed69f000
dm_mirror119690-Live0xed68d000
dm_region_hash96441dm_mirror,Live0xed67e000
dm_log83222dm_mirror,dm_region_hash,Live0xed672000
dm_mod8471111dm_mirror,dm_log,Live0xed64e000
#lsmod|grepext4
ext43398122
jbd2759271ext4
mbcache60172ext3,ext4
字段含义
#lsmod
ModuleSizeUsedby
iptable_filter21730
ip_tables95671iptable_filter
ext32037181
jbd653151ext3
xenfs43601
ipv627109714
xen_netfront158710
ext43398122
jbd2759271ext4
mbcache60172ext3,ext4
xen_blkfront192095
dm_mirror119690
dm_region_hash96441dm_mirror
dm_log83222dm_mirror,dm_region_hash
dm_mod8471111dm_mirror,dm_log
显示模块的详细描述信息
命令定义
语法
选项
实战演示
#modinfoext4
filename:/lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/ext4/ext4.ko
license:GPL
description:FourthExtendedFilesystem
author:RemyCard,StephenTweedie,AndrewMorton,AndreasDilger,Theodoreandothers
srcversion:CB1B990F5A758DFB0FB12F1
depends:mbcache,jbd2
vermagic:2.6.32-573.22.1.el6.i686SMPmod_unloadmodversions686
#modinfobtrfs
filename:/lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/btrfs/btrfs.ko
license:GPL
alias:devname:btrfs-control
alias:char-major-10-234
srcversion:B412C18B0F5BF7F1B3C941A
depends:libcrc32c,zlib_deflate,lzo_compress,lzo_decompress
vermagic:2.6.32-573.22.1.el6.i686SMPmod_unloadmodversions686
装载或卸载内核模块
命令定义
#modules.dep为解决依赖的配置文件,modules.dep.bin二进制文件运行
#ls/lib/modules/2.6.32-358.6.1.el6.i686/
buildmodules.blockmodules.ieee1394mapmodules.ofmapmodules.symbols.binweak-updates
extramodules.ccwmapmodules.inputmapmodules.ordermodules.usbmap
kernelmodules.depmodules.isapnpmapmodules.pcimapsource
modules.aliasmodules.dep.binmodules.modesettingmodules.seriomapupdates
modules.alias.binmodules.drmmodules.networkingmodules.symbolsvdso
语法
选项
-v
-C
-c
-n
-i
-q
-r
-f
-l
-a
-t
-s
内核模块依赖关系文件及系统信息映射文件的生成工具
语法
参数
装载或卸载内核模块
- 不解决依赖关系,需要自己手动卸载
insmod命令
rmmod命令
命令解析
语法格式
参数选项
-f
-w
-s
内核把自己内部状态信息及统计信息,以及可配置参数通过 proc 伪文件系统加以输出。
#ls/proc/
111732229855354760973filesystemsloadavgscsiversion
10122333648600buddyinfofslocksselfvmallocinfo
10711323230374961businterruptsmdstatslabinfovmstat
1082142343138562cgroupsiomemmeminfosoftirqsxen
1085152431314395287cmdlineioportsmiscstatzoneinfo
1116253174531739cpuinfoirqmodulesswaps
115017252318405438cryptokallsymsmountssys
116218253324156808deviceskcoremtdsysrq-trigger
1163192632042566830diskstatskeysnetsysvipc
11651908273343567853dmakey-userspagetypeinfotimer_list
116722833044579driverkmsgpartitionstimer_stats
11692029334455994execdomainskpagecountsched_debugtty
117121298533446695fbkpageflagsschedstatuptime
语法格式
命令参数
默认配置文件
命令使用方式
参数说明
两种修改方式
配置文件中常用的几个参数
#cat/etc/sysctl.conf
#KernelsysctlconfigurationfileforRedHatLinux
#ControlsIPpacketforwarding
net.ipv4.ip_forward=0
#Controlssourcerouteverification
net.ipv4.conf.default.rp_filter=1
#Donotacceptsourcerouting
net.ipv4.conf.default.accept_source_route=0
#ControlstheSystemRequestdebuggingfunctionalityofthekernel
kernel.sysrq=0
#ControlswhethercoredumpswillappendthePIDtothecorefilename.
#Usefulfordebuggingmulti-threadedapplications.
kernel.core_uses_pid=1
#ControlstheuseofTCPsyncookies
net.ipv4.tcp_syncookies=1
#Disablenetfilteronbridges.
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0
#Controlsthedefaultmaxmimumsizeofamesagequeue
kernel.msgmnb=65536
#Controlsthemaximumsizeofamessage,inbytes
kernel.msgmax=65536
#Controlsthemaximumsharedsegmentsize,inbytes
kernel.shmmax=4294967295
#Controlsthemaximumnumberofsharedmemorysegments,inpages
kernel.shmall=268435456
#Auto-enabledbyxs-tools:install.sh
net.ipv4.conf.all.arp_notify=1
#查看所有可读变量
sysctl-a
#修改对应参数
sysctl-wkernel.sysrq=0
sysctl-wkernel.core_uses_pid=1
sysctl-wnet.ipv4.conf.default.accept_redirects=0
#如果希望屏蔽别人ping你的主机,配置文件修改
net.ipv4.icmp_echo_ignore_all=1
#编辑完成后,请执行以下命令使变动立即生效
/sbin/sysctl-p
/sbin/sysctl-wnet.ipv4.route.flush=1
sysfs 伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息。有些参数是可以修改的,用于调整硬件工作特性。
方法一
#移动ramdisk文件到/root目录下
mv/boot/initramfs-2.6.32...img/root
#为当前正在使用的内核重新制作ramdisk文件
mkinitrd/boot/initramfs-$(uname-r).img$(uname-r)
方法二
#移动ramdisk文件到/root目录下
mv/boot/initramfs-2.6.32...img/root
#为当前正在使用的内核重新制作ramdisk文件
dracut/boot/initramfs-$(uname-r).img$(uname-r)
#使用file命令查看ramdisk文件发现是以gz压缩存放的
file/boot/initramfs-2.6.32-504.el6.x86_64.img
#改名称,解压
cd/boot/
mvinitramfs-2.6.32-504.el6.x86_64.imginitramfs-2.6.32-504.el6.x86_64.img.gz
gzip-dinitramfs-2.6.32-504.el6.x86_64.img.gz
#使用file命令查看发现是以cpio存放的文本文件
fileinitramfs-2.6.32-504.el6.x86_64.img
#解压这个文本文件
#之后会在initrd目录下生成相应的文件,一个微型的/root
mkdirinitrd
cdinitrd
cpio-id<../initramfs-2.6.32-504.el6.x86_64.img
#这个时候就可以查看init脚本文件了
catinit
#在sbin文件中存放着相关的命令
lssbin
(1) 准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取到目标主机系统功能的相关信息
(4) 获取内核源代码包
简易安装
简单依据模板文件的制作内核
#下载对应的Linux内核版本进行解压缩
#会在/usr/src目录下创建debug、kernels和linux-3.10.67目录
tarxflinux-3.10.67.tar.xz-C/usr/src
#为了方便多内核共存,使用连接指向
#会在当前目录下创建一个链接文件linux->linux-3.10.67
cd/usr/src
ln-svlinux-3.10.67linux
#创建模板
cdlinux
#查看链接指向的文件内容
ls
#拷贝系统自带的模板文件
cp/boot/config-$(uname-r).config
#打开图形界面配置内核选项,选择添加、删除内核模块
#添加的默认选项来自.config配置文件
makemenuconfig
#使用screen来不中断安装
screen
#采用几个线程进行编译
make-jn
#安装内核
makemodules_install
#makeinstall中将会安装内容
#安装bzImage为/boot/vmlinuz-VERSION-RELEASE
#生成initramfs文件
#编辑grub的配置文件
makeinstall
#重启系统,并测试使用新内核,不是默认启动内核
init6
(1) 配置内核选项
(2) 编译-make [-j #]
#(a)只编译某子目录中的相关代码
cd/usr/src/linux
makedir/
#(b)只编译一个特定的模块
cd/usr/src/linux
makedir/file.ko
#例如:只为e1000编译驱动
makedrivers/net/ethernet/intel/e1000/e1000.ko
#编译的目标平台与当前平台不相同;
makeARCH=arch_name
#要获取特定目标平台的使用帮助
makeARCH=arch_namehelp
#事先清理操作
#清理大多数编译生成的文件,但会保留config文件等
makeclean
#清理所有编译生成的文件、config及某些备份文件
makemrproper
#mrproper、patches以及编辑器备份文件
makedistclean
作者:Escape
新闻来源:开源Linux,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
2026-07-22

2026-06-11
2026-06-24