如何检查内核抢占配置?


11

我想检查我的Linux内核是抢占式还是非抢占式。我如何使用诸如之类的命令检查此内容uname -a

Answers:


10

内核是否可抢占取决于您要抢占的对象,例如在Linux内核中,可以通过多种方式分别启用/禁用抢占。

如果你的内核CONFIG_IKCONFIGCONFIG_IKCONFIG_PROC启用,你可以找到通过你抢占的配置/proc/config.gz(如果你没有这个,有些发行版附带的内核配置中/boot代替):

$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set

如果有CONFIG_IKCONFIG,但CONFIG_IKCONFIG_PROC仍然可以使用extract-ikconfig


我在树莓派中制作了一个内核模块,该模块与外部传感器对话以询问温度。为了与传感器对话,我应该将gpio引脚的输入和输出设置为指定的时间(以毫秒为单位)。并且模块工作正常。调度程序不会将内核模块抢占其他进程,因为如果抢占了内核,则计时将是错误的,并且从传感器获得的结果将是错误的。
mikmik 2014年

2

可抢占的内核(低延迟桌面)PREEMPT在其版本名称(uname -a)中进行了标记。这也出现在/proc/version“ version magic”字符串中,该字符串用于确定是否可以/不能在给定内核上加载模块,例如

mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 ' 
              should be '3.4.35 preempt mod_unload ARMv7 p2v8 '

对于CONFIG_PREEMPT_VOLUNTARYafaik,没有这样的标记。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.