linux内核的基本原理

avatar shenyifan 2023-10-25 09:20 275次浏览 评论已关闭

Linux 核心是一种开源类 Unix 宏内核操作系统Linux 内核是 Linux 操作系统的主要部件也是计算机硬件及其过程之间的核心接口它负责两者之间的通信,并尽可能有效地管理资源它被称为核心,因为它在操作系统中就像果实硬壳中的种子,并控制硬件的所有主要功能。

核心的主要用途如下 4 项工作:内存管理:跟踪记录中存储了多少内存以及存储在哪里过程管理:确定哪些过程可以使用中央处理器,何时使用,持续多久设备驱动程序:调解程序/解释程序之间的硬件和过程系统调用和安全保护:从流程中接受服务请求

在正确实施的情况下,内核对用户来说是看不见的它在自己的小世界(称为内核空间)中工作,并分配内存并跟踪所有内容的存储位置用户看到的内容被称为用户空间这些应用程序通过系统呼叫接口(SCI)与内核互动Linux系统内核概述

1. 内核简介单内核系统的设计,但充分借鉴了微内核设计系统的优势,将模块化机制引入内核Linux 核心的重要组成部分主要包括以下部分:kernel核心,一般为 bzImage通常在 /boot 在目录下,名字是 vmlinuz-VERSION-RELEASE。

kernel object核对象一般放置在内核对象中 /lib/modules/VERSION-RELEASE/[ ] ==> N ==> 内核没有编译[M] ==> M ==> 作为模块文件进行编译[*] ==> Y ==> 编译进内核

辅助文件(ramdisk)initrdinitramfs2. 内核模块2.1 uname 命令使用格式uname [OPTION]…参数解释-n 显示节点名称-r 显示VERSION-RELEASE

-s 内核名称-v 内核版本-n 节点名-m 硬件名称-i 硬件平台-p 处理器类型-o 操作系统#uname-m i686 #uname-r 2.6.32-573.22.1.el6.i686 #uname-a LinuxmyServer2.6.32-573.22.1.el6.i686…i66i386GNU/Linux

2.2 lsmod 命令核心装载的核心模块显示命令定义显示的内容来自: /proc/modules 文件使用 lsmod 类似的命令经常被使用 lsmod | grep -i ext4 这样的命令来查询系统是否加载了某些模块。

#cat/proc/modules iptable_filter21730-live0xed9b200000 ip_tables95671iptable_filter,Live0xed9a900000 ext3203718-Live0xed9600000 jbd653151ext3,Live0xed9040000 xenfs43601-Live0xed8e6000000 ipv627109714-Live0xed88000 xen_netfront158710-Live0xed7d9000000 ext4398122-Live0xed764000 jbd2759271ext4,Live0xed6d900000 mbcache60172ext3,ext4,Live0xed6b7000 xen_blkfront192095-live0xed6900000 dm_miror119690-Live0xed6800000 dm_region_hash96441dm_mirror,Live0xed67e00000 dm_log832222dm_mirror,dm_region_hash,Live0xed6720000 dm_mod8471111dm_mirror,dm_log,Live0xed64e0000 #lsmod|grepext4 ext43398122 jbd27927ext4 mbcache60172ext3,ext4

字段含义第 1 列:表示模块的名称第 2 列:表示模块的大小第 3 列:表示依赖模块的数量第 4 列:表示依赖模块的内容#lsmod ModuleSizeUsedby iptable_filter2173 ip_tables95671iptable_filter ext32037181 jbd65151ext3 xenfs43601 ipv627109714 xen_netfront1587 ext43398122 jbd27927ext4 mbcache60172ext3,ext4 xen_blkfront192095年 dm_miror11969年 dm_region_hash96441dm_mirror dm_log832222dm_mirror,dm_region_hash dm_mod8471111dm_mirror,dm_log

2.3 modinfo 命令详细描述显示模块的信息命令定义modinfo 列出 Linux 命令行指定的模块在内核中的信息modinfo 可查询系统中未安装的模块信息modinfo 可查询系统中未安装的模块信息。

如果模块名不是文件名,它就会出现 /lib/modules/version 搜索目录,就像 modprobe 一样modinfo 默认情况下,模块的每个属性列出如下格式:fieldname : value。

语法modinfo [选项] [ modulename|filename… ]选项-n 只显示模块文件路径-p 显示模块参数-a author-d description-l license-0 使用“\0”字符分隔 field 价值,而不是新行,对脚本更有用

实战演示#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:CB1B90F5A758FBFB12F1 depends:mbcache,jbd2 vermagic:2.6.32-573.22.1.el6.686SMPmod_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:B412C18BF7F1BF4 depends:libcrc32c,zlib_deflate,lzo_compress,lzo_decompress vermagic:2.6.32-573.22.1.el6.686SMPmod_unloadmodversions686

2.4 modprobe 命令装载或卸载核心模块命令定义配置文件/etc/modprobe.conf/etc/modprobe.d/*.conf解决依赖modprobe需要最新的modules.dep文件,depmod可以用来生成

该文件列出了每个模块所需的其他模块,modprobe依赖于自动添加或删除模块#modules.dep是解决依赖性的配置文件,modules.dep.bin二进制文件运行 #ls/lib/modules/2.6.32-358.6.1.el6.i686/ buildmodules.blockmodules.eee1394mapmodulese.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

语法modprobe [ -c ]modprobe [ -l ] [ -t dirname ] [ wildcard ]modprobe [ -r ] [ -v ] [ -n ] [ -i ] [ modulename … ]

选项-v显示程序在做什么,通常在出现问题的情况下,modprobe 才显示信息-C默认配置文件(//etc/modprobe.conf 或 /etc/modprobe.d)-c输出配置文件并退出-n可以和 -v 选项一起使用,调试很有用

-i会使这个选项 modprobe 忽略文件中的配置,输入命令行 install 和 remove-q一般 modprobe 删除或插入模块时,如果找不到,会提示错误在没有任何错误信息的情况下,使用该选项会忽略指定的模块。

-r会导致这个选项 modprobe 删除,而不是插入一个模块通常没有理由删除内核模块,除非有一些 bug 的模块-f使用这个选项更危险和同时使用 –force-vermagic,–force-modversion 一样

-l列出所有模块-a在所有命令行中插入模块-t强制 -l 显示 dirname 中的模块-s写入错误信息 syslog2.5 depmod 命令内核模块依赖于生成关系文件和系统信息映射文件的工具语法depmod [-adeisvV][-m ][–help][模块名]

参数-a 对所有可用模块进行分析-d 执行排错模式-e 输出不能参考的符号-i 不要检查符号表的版本-m 使用指定的符号表文件-s 在系统记录中记录错误-v 在执行过程中显示详细信息-V 显示版本信息

–help 显示帮助2.6 insmod 和 rmmod 命令装载或卸载核心模块依赖关系不解决,需要手动卸载insmod命令向 Linux 在内核中插入一个模块insmod 将模块插入内核的小程序大多数用户使用 modprobe 因为它更智能

insmod [ filename ] [ module options… ]rmmod命令命令解析删除核心中的一个模块rmmod 是一个可以从内核中删除模块的小程序,大多数用户使用modprobe -r删除模块

语法格式rmmod [ modulename ]参数选项-f除非CONFIG编译内核_MODULE_FORCE_UNLOAD只有设置这个命令才有效果,否则不会有效果设计为不能删除的模块,可以使用该选项删除正在使用的模块,或标记为unsafe的模块

-wrmmod 拒绝删除使用的模块在使用该选项后,指定的模块将被孤立,直到不使用-s将错误信息写入syslog,而不是标准错误(stderr)3. /proc 目录核心将自己的内部状态信息和统计信息,通过可配置参数 proc 伪文件系统加以

来源:深易凡软件库

发表评论
请先登录后再评论~