全部学习汇总: GreyZhang/g_QEMU: QEMU is a good toolt for emulation and development. I need some basic knowledge and skills to support my hacking. (github.com)
本来是想简单看一下就过了,但是看了一下QEMU的简单介绍,十分强大。后续保不准我也会自己搞一套虚拟化环境,更加上这个还可以提供CAN bus的模拟环境,我觉得很有必要花点时间学习下了。
先看一下现在的FreeRTOS中的命令例子。
qemu-system-arm -machine mps2-an385 -cpu cortex-m3 -kernel [path-to]/RTOSDemo.out -nographic -serial stdio -semihosting -semihosting-config enable=on,target=native -s -S
以上是执行QEMU仿真运行程序的命令,其中-s -S的作用现在已经知道了,主要的作用是为了支持调试器的接入。接下来的命令参数的分析可以走一个简化的路线,忽略这两个参数的具体研究。
-machine
这个参数我大概看了一下,其实指定的并不是MCU,而是基于MCU的某一个板子。加一个help能够看到更多的支持信息。从查看的帮助信息中,能够看到很多熟悉的开发板。
这几个开发板的额名字大概还是挺过的,尤其是飞思卡尔,现在的NXP这两个。这里面也有FreeRTOS采用的这个板子,这是这次学习OS要用的环境,也就不画出来了。
这几个也都是听过的,而且我自己有树莓派2B以及i.MX6 Quad的开发板。
不知道图中画出来的部分是否是正点原子的那个板子,如果是的话,这个板子我也是有的。看起来,没有早点了解QEMU,还是多花了不少钱的。毕竟,我现在囤积的大批的板子很多都是为了简单了解而买的。
-cpu
这个参数选择的应该是MCU的内核架构,这里的架构选择的是Cortex M3。
而上面的这个图中是现在工具支持的所有的CPU。
-kernel
这个参数我没有找到明确的关于现在的这个例程中用法的说明,大部分时候这个是关于linux等操作系统内核的。不过,我在另一个板子的介绍信息中找到了一段描述应该就是这里的用法。
这里的用法是用于指明烧录固件的,正好也符合我现在使用的场景。
在查找kernel的介绍的过程中,有一个意外的收获。那就是发现QEMU其实还是可以模拟CAN总线的,如果CAN总线也可以模拟出来的话,那么做CAN协议的一些开发测试就有了更多的便利之处了。关于这部分的使用,后面还是得好好了解一下。
-nographic
这个是为了阻止图形化edQEMU主程序启动,去掉之后可以出现一个QEMU的窗口。我倒觉得这个去掉让窗口出来很好。这样就可以直接通过这个窗口退出,而不用在终端杀死进程。或许,在终端退出还有更好的方式,在找到之前暂且还是去掉吧。去掉之后,能够看到的一个窗口如下;
在这个窗口上,按照提示输出help之后的确是看到了一些帮助信息。这种现实的效果让我联想到了gdb,我也条件反射一般输入了一个q,没想到还真是QEMU的一个退出命令。再次尝试,输入quit也是退出的命令。
进一步,我回到了无窗口的模式。测试了一下,快速输入quit之后回车,其实也可以退出QEMU。输入q,回车快速跟上也是可以的,但是我发现两者其实都有一定的失败几率。而无窗口模式下,运行有一个启动过程。暂且没有找到什么明确的说明如何启动,但是我发现R或者rrr或者shif等若干按键甚至组合都可以让程序启动。
-serial stdio
这个没有去查找,但是从字面的意思上应该是让串口的信息路由大标准的输入输出上。
-semihosting -semihosting-config enable=on,target=native
通过上面的描述,这个应该是实现了半主机的功能。可以允许QEMU直接访问HOST的文件系统。关于这部分,我了解的不多。以前以为这样的功能就是为了能够提供printf这样的功能而设计的,现在看来似乎不是。因为我字节把这个参数去掉之后,printf的功能依然是有效的。