【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的设备模型中对应的是 ...
随机推荐
- linux find grep使用
在当前目录下所有文件中查找内容包含 string 的文件: find ./ -name "*" -exec grep "string" {} \; 注意:在最后 ...
- Windows Server 2008 R2 安装及配置指南
一.安装需求: 1. 硬件需求条件 硬件 需求 处理器 最低:1.4 GHz(x64处理器) 注意:Windows Server 2008 for Itanium-Based Systems 版本需要 ...
- android检查自动升级
好像大半年没发点啥了,也不知道自己瞎忙啥,闲下来发给最近的东东<安卓在线升级> 类已经封装好了,简单的调用就OK了.这里的数据交互,我是用.NET写的一个webservice来交互.废话也 ...
- php快速定位多维数组的深度
原文地址:php快速定位多维数组的深度作者:陌上花开 自定义一个函数: function array_depth($array) { $max_depth = 1; foreach ($array ...
- 无法加载协定为“ServiceReference1.ReportWsSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。
前言 引用websevice时,有时会出现如下错误: 异常详细信息: System.InvalidOperationException: 无法加载协定为“ServiceReference1.Repor ...
- (转)Asp.net的HttpCookie写入汉字读取时为乱...
今天有个问我:在Asp.net的HttpCookie中写入汉字,读取值为什么全是乱码?其实这是因为文字编码而造成的,汉字是两个编码,所以才会搞出这么个乱码出来!其实解决的方法很简单:只要在写入Cook ...
- VS编译出现 HTTP 错误 403.14 - Forbidden 决绝办法
决绝办法: 运行cmd命令,在控制台面板计入Iis Express目录下.运行提示的的就可以了 appcmd set config /section:system.webServe ...
- C语言之分配
#include "stdio.h" void main() { ] = {,,}; *sizeof(int));//malloc calloc relloc arr2[] = ; ...
- 读懂IL代码(三)
由于要写毕业论文的缘故,最近比较没有时间写,总是要抽出时间抽出时间.诶,这样的生活比较烦躁. 这一篇主要写委托.类.方法的IL代码,一一来说明. 委托:搞过C#的都应该清楚,委托实际上是一个类.编译器 ...
- C#字符串颠倒输出
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...