首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道linux内核运行EL2 (非安全)或EL3 (安全)模式?

如何知道linux内核运行EL2 (非安全)或EL3 (安全)模式?
EN

Stack Overflow用户
提问于 2016-09-21 11:03:57
回答 1查看 1.8K关注 0票数 2

我在哪里可以知道Linux内核是以非安全(EL2)或安全(EL3)模式运行呢?

我怎样才能改变这种模式?

我在ARMv8 64位上运行。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2018-11-23 11:34:00

我在哪里可以知道Linux内核是以非安全(EL2)或安全(EL3)模式运行呢?

我要给出一个厚颜无耻的回答。

修改what is the current execution mode/exception level, etc?并黑进您感兴趣的区域:

代码语言:javascript
复制
diff --git a/init/main.c b/init/main.c
index 18f8f0140fa0..840f886d17b3 100644
--- a/init/main.c
+++ b/init/main.c
@@ -533,6 +533,10 @@ asmlinkage __visible void __init start_kernel(void)
    char *command_line;
    char *after_dashes;

+   register u64 x0 __asm__ ("x0");
+   __asm__ ("mrs x0, CurrentEL;" : : : "%x0");
+   pr_info("EL = %llu\n", (unsigned long long)(x0 >> 2));
+
    set_task_stack_end_magic(&init_task);
    smp_setup_processor_id();
    debug_objects_early_init();

在启动开始时输出。

代码语言:javascript
复制
EL = 1

默认的Linux内核v4.19引导日志也告诉我们,在默认情况下:

代码语言:javascript
复制
CPU: All CPU(s) started at EL1

我怎样才能改变这种模式?

传统上,内核只运行在EL1上,EL2留给Xen这样的管理程序,EL3留给引导加载程序(如ARM可信固件)。

然而,随着ARMv8.1Vhe扩展的引入,EL2内核变得高效,并被添加到Linux中:What are Ring 0 and Ring 3 in the context of operating systems?不确定哪个配置打开了它,请看一看。

EL3,我不认为有什么主线。也有一些人试图将内核代码调整为booloader,例如:https://github.com/kexecboot/kexecboot

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39614772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档