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怎么玩儿的更多相关文章

  1. qemu源码架构

    前言:本文主要概括了QEMU的代码结构,特别从代码翻译的角度分析了QEMU是如何将客户机代码翻译成TCG代码和主机代码并且最终执行的过程.并且在最后描述了QEMU和KVM之间联系的纽带. 申明:本文前 ...

  2. Using QEMU for Embedded Systems Development

    http://www.opensourceforu.com/2011/06/qemu-for-embedded-systems-development-part-1/ http://www.opens ...

  3. qemu/kvm/qemu-kvm/virsh的区别

    转自:http://www.2cto.com/os/201305/209596.html qemu/kvm/qemu-kvm/virsh的区别   qemu是一套虚拟机管理系统,kqemu是qemu的 ...

  4. kvm和qemu的关系

    KVM (Kernel Virtual Machine) is a Linux kernel module that allows a user space program to utilize th ...

  5. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  6. 虚拟机体验之 QEMU 篇

    引言 说起虚拟机,大家都不陌生.需要使用虚拟机的场景也非常的多,比如有志于写操作系统的同志,往往需要一个虚拟机来运行和调试他写的系统:再比如喜欢研究网络体系结构的朋友,需要在自己的电脑上虚拟出 N 个 ...

  7. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  8. kvm/qemu/libvirt学习笔记 (1) qemu/kvm/libvirt介绍及虚拟化环境的安装

    kvm简介 kvm最初由Quramnet公司开发,2008年被RedHat公司收购.kvm全称基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux的一个内核模块 ...

  9. QEMU VCPU热插特性

    最近学习QEMU中VCPU热插特性,需要了解QEMU中VCPU热插的整个流程,VCPU热插是QEMU主板的一个feature. 1:这里先分析一下QEMU的主板模拟,主板在QEMU的设备模型中对应的是 ...

随机推荐

  1. Chapter 5. The Gradle Wrapper 关于gradle wrapper

    Most tools require installation on your computer before you can use them. If the installation is eas ...

  2. ASP.NET+ashx+jQuery动态添加删除表格

    aspx: <script src="../script/jquery-1.4.4.min.js" type="text/javascript" lang ...

  3. 推断类型var

    1.为什么使用推断类型var var可以根据变量的初始值自动推断局部变量类型,当无法确定所用变量的具体类型时可使用var 2.如何使用推断类型var 客户端代码 static void Main(st ...

  4. web程序记录当前在线人数

    在页面上显示当前在线人数 效果: 1.Global.asax文件: <%@ Application Language="C#" %><%@ Import Name ...

  5. 【转】[转]order by 1是什么意思?

    [转][转]order by 1是什么意思? ORDER BY 1 表示 所select 的字段按第一个字段排序 ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字, 可 ...

  6. 黑马入学基础测试(三)求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55

    .获得用户的输入 计算      3打印就行了.   这里用到了java.util.Scanner   具体API  我就觉得不常用.解决问题就ok了.注意的是:他们按照流体的方式读取.而不是刻意反复 ...

  7. HTML基础(2) 格式标签 文本标签

    格式标签: 1.<p></p>  用来显示段落 2.<br> 控制换行 3.<nobr> </nobr> 防止浏览器将过长内容自动换行显示 ...

  8. window.event对象详细介绍

    1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromEleme ...

  9. Redhat linux DNS配置指南(SCANIP配置手册)

    在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...

  10. 第4条:多用类型常量,少用#define预处理指令

    定义常量的几种方式: 1.#define ANIMATION_DURAION 0.3         //定义了一个动画时长的常量, 预处理过程会把碰到的所有ANIMATION_DURAION一律替换 ...