zoukankan      html  css  js  c++  java
  • 【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。
    建立好后通过浏览器访问,如下图所示。

  • 相关阅读:
    INSERT INTO插入行记录
    BULK INSERT导入数据库
    第三章 必须知道的一些基础知识[DDT书本学习 小甲鱼]【3】
    第三章 必须知道的一些基础知识[DDT书本学习 小甲鱼]【2】
    第二章 用Python设计第一个游戏[DDT书本学习 小甲鱼]
    第一章 就这么愉快地开始吧 [DDT书本学习 小甲鱼]
    Linux——添加用户操作
    Linux——常用命令
    Linux——ls
    redis基本命令
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4395143.html
Copyright © 2011-2022 走看看