通过内核模块

时间:2017-08-02 11:41:34

标签: c arm virtualization openwrt hypervisor

我正在开发一个项目,我有一个带有ARMv7处理器(Cortex A15)和OpenWRT OS的路由器。我在路由器上有一个shell,可以使用insmod加载内核模块。

我的目标是在C中编写内核模块,更改HVBAR寄存器,然后执行hvc指令以使处理器处于hyp模式。 这是一个科学项目,我想检查一下我是否可以将自己的虚拟机管理程序放在正在运行的系统上。但在我开始编写自己的虚拟机管理程序之前,我想检查是否以及如何将处理器置于hyp模式。

根据这张图片来自armv7-a手册B.9.3.4,系统必须处于非安全模式,而不是用户模式,SCR.HCE位必须为1.

enter image description here

我的问题是如何使用C内核模块和内联汇编来准备处理器,然后执行hvc指令。我想用内核模块做这个,因为我从PL1开始。这个伪代码描述了我想要实现的目标:

  1. 调用smc //进入监控模式
  2. 将SRC.HCE设置为1 //以启用hvc指令
  3. 将SRC.NS设置为1 //以将系统设置为不安全
  4. call hvc#0 //调用hvc指令以产生虚拟机监控程序异常

0 个答案:

没有答案