模拟器开发以及嵌入式系统内核调试
一、模拟器的开发
1. 什么是模拟器
模拟器是一组应用程序,它运行于一个OS之上(linux或windows),提供对目标板功能的模拟,包括中断系统,RAM,FLASH系统,以及目标OS到宿主OS任务的映射。
2. 模拟器与虚拟机的区别
模拟器不同于虚拟机,虚拟机从设备的角度来模拟一个目标板,微细到提供对每条处理器指令的支持,而模拟器则从功能的角度进行模拟,重点在于对目标OS运行状态的监视,以及执行逻辑的监视。方便调试系统内核,以及开发初期的可行性调研。另外模拟器是在C语言级别上提供模拟,所以无论目标OS基于什么CPU,只要是C语言写的,模拟器就能提供对它的模拟。
3. 如何在windows环境下开发模拟器
3.1.模拟器的基本构造
一个基本的模拟器只要提供对中断系统的模拟,任务映射的模拟,内存以及堆栈的模拟就可以在其上面运行嵌入式实时内核了,当然我们还需要一个输入输出的设备,来干预及监视嵌入式内核的运行。
3.2.中断系统
中断系统是模拟器的核心,因为任务的调度本质上都是通过中断完成的(非抢占式系统例外)。以simuos为例,有8个中断源,包括异常、时钟、串口、键盘等。为了减轻模拟器的负担,实际上只产生一个中断事件,然后通过查询的方式来进行中断的路由。
3.3.任务映射
任务映射是模拟器与虚拟机的主要区别,虚拟机不需要任务映射,因此它也不可能了解嵌入式内核的运行逻辑与运行状态,只能通过观察寄存器来推断。而模拟器将每一个目标OS的任务都记录下来,然后统一管理它们的运行,而达到监视和干预的目的。
3.4.其他
LCD和键盘的模拟。
二、实时内核移植
1. 移植的前提
移植的唯一前提是我们必须拥有目标OS的源代码。
2. 移植时的注意事项
注意中断系统的挂接,注意任务管理器的安装。
3. 以ucosii举例(抢占式)
ucosii为优先级抢占式实时系统内核,广泛应用于工控领域,由于其源码开放
所以倍受学生和广大嵌入式爱好者的青睐。但是对于初学者而言,嵌入式系统就象一个黑盒子,虽然有代码在手但却不能感观体验到其运行时所带来的魅力。将其移植到模拟器上,我们不但能观察ucosii的任务管理方式,还能随时设置断点来对自己的程序进行调试。移植的源代码及demo程序请自行下载:
4. 以rtke举例(非抢占式)
rtke是菲利普手机解决方案中应用的实时内核,该内核的最大缺点就是非抢占式,一个task必须自己放弃CPU的使用权才能使其他高优先级的任务得到调度。因此在其上面写程序必须十分小心,另外通过模拟器我们可以跟踪到每个消息发往何处,每个信号量的使用状况,当前内存的状态等等。Demo程序请自行下载:
三、VC环境下调试
1. 模拟器下调试的优缺点
优点是直观方便,缺点是由于模拟器并不是真实的硬件环境,因此许多依赖于硬件的代码无法进行调试,但是对于调试系统内核和普通的应用程序已经是够用了,尤其是在解决系统死锁的问题上是最有用的利器。
2. 调试手段与方法
可以利用模拟器本身提供的调试工具进行分析系统状态,也可以在OS代码中加入自己的trace信息来跟踪系统的运行,具体请参照上面提供的两个例子。
四、小结
通过对模拟器simuos的开发,以及对几个实时内核的移植,我们发现在嵌入式领域我们缺乏的是基础教育,每个从事嵌入式开发的工程师大多都是工作以后才对嵌入式系统有一个比较完整和深刻的认识的,如果每所大学能让我们的学生在上学期间亲手移植一个甚至是几个嵌入式系统内核,那么我们的毕业生的技术素质将会有显著的提高。Simuos这个项目就是为这个目的而开发的,希望它能给正在学习或打算学习嵌入式开发的同学或工程师带来帮助。
评论