【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的设备模型中对应的是 ...
随机推荐
- Chapter 5. The Gradle Wrapper 关于gradle wrapper
Most tools require installation on your computer before you can use them. If the installation is eas ...
- ASP.NET+ashx+jQuery动态添加删除表格
aspx: <script src="../script/jquery-1.4.4.min.js" type="text/javascript" lang ...
- 推断类型var
1.为什么使用推断类型var var可以根据变量的初始值自动推断局部变量类型,当无法确定所用变量的具体类型时可使用var 2.如何使用推断类型var 客户端代码 static void Main(st ...
- web程序记录当前在线人数
在页面上显示当前在线人数 效果: 1.Global.asax文件: <%@ Application Language="C#" %><%@ Import Name ...
- 【转】[转]order by 1是什么意思?
[转][转]order by 1是什么意思? ORDER BY 1 表示 所select 的字段按第一个字段排序 ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字, 可 ...
- 黑马入学基础测试(三)求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
.获得用户的输入 计算 3打印就行了. 这里用到了java.util.Scanner 具体API 我就觉得不常用.解决问题就ok了.注意的是:他们按照流体的方式读取.而不是刻意反复 ...
- HTML基础(2) 格式标签 文本标签
格式标签: 1.<p></p> 用来显示段落 2.<br> 控制换行 3.<nobr> </nobr> 防止浏览器将过长内容自动换行显示 ...
- window.event对象详细介绍
1.event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromEleme ...
- Redhat linux DNS配置指南(SCANIP配置手册)
在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...
- 第4条:多用类型常量,少用#define预处理指令
定义常量的几种方式: 1.#define ANIMATION_DURAION 0.3 //定义了一个动画时长的常量, 预处理过程会把碰到的所有ANIMATION_DURAION一律替换 ...