我试图在运行ARM7TDMI处理器的旧电路板上从User
切换到Supervisor
模式。它有七种操作模式:用户, FIQ,IRQ,主管,中止,未定义和系统。用户是唯一的非特权模式。我希望进入主管模式。我使用qemu
来模拟这个电路板,并使用Gnu GCC编译器工具链。我在主板上也有Linux内核。在AMR7TDMI处理器中从`User`切换到`Supervisor`模式
从处理器手册的技术文档中我可以看到这样做,我需要生成一个SWI(软件中断)。这里是什么文件说
http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt2.pdf [第4.13节]
The software interrupt instruction is used to enter Supervisor mode in a controlled
manner. The instruction causes the software interrupt trap to be taken, which effects
the mode change.
我想我需要写的SWI我自己interupt处理程序。我可以看到一些帖子它
writing interrupt routines using gcc for arm
Simplest bare metal program for ARM
然而,当我按照列出的说明在上面,我收到了段错误。我在这里有点困惑。阅读我需要编写interupt处理程序的方式我意识到我需要调整Interupt Vector Table以包含我的新SWI处理程序。这对于用户空间计划来说似乎具有太多的安全风险。我的分段错误可能是因为我正在修复我的内存空间,或者只是因为我不允许对内存进行更改(即将我的处理程序添加到IVT)
任何人都可以指导我获得更好的资源,
关于如何解决这个问题的任何建议。我是嵌入式编程的新手,所以我认为我的知识不是很好。
关键的一点要注意的是,因为你正在运行Linux,_you_没有处理器的控制; Linux内核的确如此。因此你必须遵守Linux的规则。 – Notlikethat
@Notlikethat谢谢我实现了同样的;如果您有任何有关Linux内核开发的良好资源,请分享。再次感谢 – rockstar
您是否正在尝试做这个裸机(自己写这一切),还是将功能添加到Linux?这个问题听起来像是在同时问两个问题。 – unixsmurf