Archives
x-load 已经可以在qemu-omap3中运行起来。对x-load主要做了两个地方的修改:
1. 对判断外部输入时钟频率的部分,做了修改。x-load判断外部时钟频率的方法是先设置32KHZ的基准时钟,然后设置GP1的时钟源为SYS_CLK。然后读取GP1 Timer在20个cycle内的差值,进而判断时钟。这个方法在emulator中有的时候并不是很准。因为emulator除了执行指令外,还需要做其他事情。有的时候,emulator去读取GP1 Timer 的时候,实际上运行的时间已经不止ARM 20个cycle的时间,因此读取出来的counter值偏大。而x-load仍然认为刚才是跑了20个cycle。因此,得到的频率比实际的频率大。在 qemu-omap3中,目前认为外部时钟的频率是12MHZ13MHZ,因此,去掉了x-load中判断外部时钟频率的部分,在x-load中直接赋值外部时钟频率12MHZ13MHZ.
2. 去掉了nand flash中进入ECC检查的部分。也就是注释掉drivers/k9f1g08r0a.c中的宏ECC_CKECK_ENABLE
//57 #define ECC_CHECK_ENABLE
下面是x-load运行的信息:
# ./qemu-system-arm -M beagle -mtdblock beagle-nand.bin -serial stdio -nographic
Texas Instruments X-Loader 1.41
Starting OS Bootloader...
运行到u-boot的时候还有点问题。go on working.
x-load本质是一个U-BOOT的精简版。为什么需要x-load这个玩意呢,而不是直接用u-boot呢?那是因为U-boot太大了,塞不进内部的RAM?那为啥要把X-LOAD塞进内部的RAM,而不是load到外部的RAM呢?
问题就在这里了。当OMAP3530上电的时候,memory controller还没有初始化,怎么去读写外部的RAM呢?必须要有人能先初始化memory controller啊。任务就交给x-Load了。它必须负责初始化外部的RAM控制器,把u-boot从NAND或者MMC中读出到外部RAM,然后跳到u-boot的入口处执行。
问题又来了,那么x-load又是由谁来load的呢?OMAP3530里面带了一个内部RAM,大小为64K。当OMAP3530上电后,会从NAND Flash或者MMC中读取x-load到内部的RAM。然后执行x-load,x-load然后执行上面所说的任务,最后把控制入口交给u-boot。
要编译x-load,先安装toolchain。然后
In file include/configs/omap3530beagle.h
/* For X-loader to be flashed on to NAND disable the below macro */ //#define CFG_CMD_MMC Comiple the x-loader as shown below make CROSS_COMPILE=arm-none-linux-gnueabi- distclean make CROSS_COMPILE=arm-none-linux-gnueabi- omap3530beagle_config [...]
计划一个新的项目omap3emu:OMAP3的emulator。
等会等会,怎么又要做一个emulator啊?现在的emulator已经够多的了。
确实。qemu,skyeye,armware都有非常不错的ARM支持。其中以qemu的支持最为广泛。那么为什么还需要omap3emu呢?
1. 虽然已经有蛮多的ARM Emulator,但是,还没有能模拟ARM V7架构的Opensource的emulator。
2. 在上一篇文章中也提到,通过这个模拟器,可以进一步熟悉了解ARM的体系结构,为Lguest移植到ARM打下基础。我认为,学习一个新的体系结构最好的方法就是写一个emulator。
3. QEMU的执行速度虽然很快,但是由于其采用了JIT的方法来生成代码,导致不能了解每一步的代码执行情况,或者说debug的时候,比较困难。而 omap3emu打算先提供一个step by step的解释型的执行引擎,虽然很慢,但是对于调试emulator本身和上面的软件都是比较方便的。
4. 打算通过这个omap3emu来验证<虚拟机-系统与进程的通用平台>中介绍的各种优化方法到底有多大的用途,能获得多大的性能提升。在目前硬件发展越来越快的今天,也许其中所介绍的优化方法已经不再适用。
5. omap3emu作为移植lguest到OMAP3上面的前期工具。
6. 3D虚拟化方面的尝试。目前,多数的Emulator对于显卡的处理方式多为模拟。尝试采用虚拟化的方式来加速emulator中guest的3D/2D应用。 GUEST 3D/2D Application -- 虚拟化 -- host的3D加速。
omap3emu需要能在Linux和XP上运行,采用SDL作为LCD的模拟。编译系统采用scons。
编译器: Linux:gcc XP: VS2008 Express edition
项目的主页在googlecode上面。
目前的重点还是放在了qemu-omap3上面。从头开始做omap3emu 所需要的时间/精力太大。不是我目前能承受的。
Recent Comments