【PPC】Qemu怎么玩儿
1. 编译Qemu
这里不建议使用自动安装,手工编译下。Qemu源代码的质量很高,什么环境都能编译过。
tar -xzvf qemu.tar.gz
mkdir build-qemu
cd build-qemu
chmod +x ../qemu/configure
../qemu/configure --prefix=/home/turf/Software/qemu/tools --target-list=ppc-softmmu,ppc-linux-user --enable-debug --enable-debug-tcg --enable-debug-info
这里target-list指明了需要编译的目标平台的可执行文件,缺省为全部平台,同时,为了支持调试,enable-debug等。
configure后,build-qemu会生成所需的.c及.h文件的链接文件,以及Makefile。其实,build-qemu就是一个可使用IDE调试的工程(后面会以CDT为例,导入调试)。
make && make install
2. 运行Qemu
../tools/qemu-ppc [XXX] program
使用qemu-ppc --help可看到所支持的命令行选项。这里主要使用以下几个:
(1)-L path:path使用绝对路径,指明动态链接库的位置,比如C库(编译的时候强烈建议大家静态编译,这样仿真内存不会出现莫名其妙的错误);
(2)-cpu model:指定CPU型号,使用qemu-ppc -cpu ?可列出支持的CPU,针对PPC的cpu差别不大,共有极大类。具体实现有所区别;
(3)-singlestep:主要命令,qemu使用TCG技术将目标机型指令解释为宿主机指令,构建函数,执行后得到结果。默认为按块解释,singlestep则更改为单条指令解释;
(4)-D logfile:制定生成的log文件的路径,使用绝对路径;
(5)-d options:制定log文件的类型,具体支持的类型可见源代码。这里主要使用out_asm,in_asm,exec,cpu:
1)out_asm:宿主机解释的指令;
2)in_asm:目标机的指令;
3)exec:执行的状态;
4)cpu:cpu的状态;
在未修改的qemu版本会生成很多log信息,重点关注error信息。(比如不支持的系统调用,以及处理器异常状态等。)
基本上如下图所示:

3. 把Qemu导入CDT,断点调试。
这一步是阅读或者修改Qemu源代码的关键。我选择的IDE就是Eclipse CDT。
File->Import->Existing projects into workspace-Next,如下图。
Select root directory选择build-qemu文件夹,单击Finish。如下图
然后,可以正常build。由于Qemu的执行可能需要很多额外的参数,可采用如下方式指定较为方便:
Run->Debug Configuration。将所选参数添加入Arguments即可。

调试主要是设置断点,观察log。
4. 构建LXR for qemu交叉索引。
这绝对是个阅读源代码的利器,至少节约我阅读理解Qemu的一半时间。LXR主要是将关键字索引存在数据库里,然后帮助你构建交叉索引。
可以百度linux LXR有个在线网站阅读Linux源代码利器。那么如何构建本地的LXR。
lxr的版本很重要,我选择的好像是1.2.0。这东西有很多个bug,而且都是perl编译不过。该起来也麻烦。
依赖库和安装说明可参见lxr/doc/INSTALL。也介绍了配置选项。依赖软件抓要包括:
(1)Perl5.10
apt-get install cpanminus
cpanm DBI
cpanm File::MMagic
(2)apache2
apt-get install apache2
(3)MySQL
(4)swish-e(或者glimpse)帮助搜素的。
执行 ./genxref --checkonly可对依赖软件进行检查。
执行./scripts/configure-lxr.pl -v对lxr进行配置。配置完成会生成apache conf以及initdb.sh。这里建议大家在mutiple tree和single tree中一定要选择M。
执行./custom.d/initdb.sh初始化所需数据库。
Generate Index。(注意源代码保存路径保存到配置的指定文件夹下,将文件夹名改为版本号)。
把apache-lxrserver.conf扔到相应的apache conf文件夹后重启apache daemon。
建立好后通过浏览器访问,如下图所示。
【PPC】Qemu怎么玩儿的更多相关文章
- qemu源码架构
前言:本文主要概括了QEMU的代码结构,特别从代码翻译的角度分析了QEMU是如何将客户机代码翻译成TCG代码和主机代码并且最终执行的过程.并且在最后描述了QEMU和KVM之间联系的纽带. 申明:本文前 ...
- Using QEMU for Embedded Systems Development
http://www.opensourceforu.com/2011/06/qemu-for-embedded-systems-development-part-1/ http://www.opens ...
- qemu/kvm/qemu-kvm/virsh的区别
转自:http://www.2cto.com/os/201305/209596.html qemu/kvm/qemu-kvm/virsh的区别 qemu是一套虚拟机管理系统,kqemu是qemu的 ...
- kvm和qemu的关系
KVM (Kernel Virtual Machine) is a Linux kernel module that allows a user space program to utilize th ...
- [原] KVM 虚拟化原理探究(2)— QEMU启动过程
KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...
- 虚拟机体验之 QEMU 篇
引言 说起虚拟机,大家都不陌生.需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统:再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出 N 个 ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
- kvm/qemu/libvirt学习笔记 (1) qemu/kvm/libvirt介绍及虚拟化环境的安装
kvm简介 kvm最初由Quramnet公司开发,2008年被RedHat公司收购.kvm全称基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux的一个内核模块 ...
- QEMU VCPU热插特性
最近学习QEMU中VCPU热插特性,需要了解QEMU中VCPU热插的整个流程,VCPU热插是QEMU主板的一个feature. 1:这里先分析一下QEMU的主板模拟,主板在QEMU的设备模型中对应的是 ...
随机推荐
- 需要重新启动计算机.必须重新启动计算机才能安装 SQL Server
在开始运行中输入regedit找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager 在右边窗口找到PendingFi ...
- jquery easyui textbox onblur事件,textbox blur事件无效解决方案
jquery easyui textbox onblur事件,textbox blur事件无效解决方案 >>>>>>>>>>>> ...
- Gradle插件
1.方法数统计 classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.1' apply plugin: 'com.getkeep ...
- Actioncontext跟ServletActionContext的区别---未完待续
//public class BaseAction extends ActionSupport{ public static HttpServletRequest getRequest(){ retu ...
- 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则
转载:http://space.itpub.net/17007506/viewspace-616852 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室( ...
- BUG Error:Execution failed for task ':app:dexDebug'.
Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessExceptio ...
- jsp - java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
使用jsp连接数据库真的不那么容易,之前使用纯java连接sql Server 2008,都是很正常的,但是在使用jsp调用的时候,总是报错ClassNotFoundException.很郁闷 jar ...
- 读书笔记之 - javascript 设计模式 - 门面模式
门面模式有俩个作用: 简化类的接口 消除类与使用它的客户代码之间的耦合 在javascript中,门面模式常常是开发人员最亲密的朋友.它是几乎所有javascript库的核心原则,门面模式可以使库提供 ...
- php 目录及文件操作
// bool is_dir(string $filename) 判断给定文件名是否是一个目录.// resource opendir(string $path[,resource $context] ...
- node初步二 小爬虫
小爬拉勾网 获取想要的信息: 一.分三步 1 获得数据 2 处理数据 3展示数据 二 .代码 :创建文件reptile.js;写入 var http=require('http'); var chee ...