qemu分析之linux-user 2

本文介绍了在QEMU中进行Linux-user模式分析的过程,特别是针对不同架构CPU间的转换问题。作者探讨了使用同架构glue代码作为桥接的方法,并尝试利用现有ppc glue代码进行调用。同时,深入分析了QEMU的TB缓存、原子读写操作以及中间代码生成。在实践中遇到了数据大小端问题、地址映射错误等挑战,作者将持续解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最后更新2021/12/30

终于走到ppc代码call out的位置。如果是同架构cpu,glue代码做转换还相对容易一些,直接可以跳转过去,而且代码是统一的,相对简单一些。如果不同架构CPU,ABI不同,指令代码不同,这个glue code需要好好研究一下。看来未来一段时间,都要搞这个东西了。

忽然想到了一个”捷径“,可以用原有写好的ppc (同架构)glue代码做桥接。具体来说,就是把ppc glue code作为guest代码load进来,类似库函数实现。而ppc glue code里面具体调用syscall的时候,用qemu linux-user标准的sc方案,这样就自动转为qemu原有模式,这段代码已经是OK的。

那么,试一试?
继续分析linux-user,不分析清楚不会编啊!

========================================

  1. 为了找到地址所在的tb,用了hash方案。首先通过当前执行指令地址(pc)获得hash:tb_jmp_cache_hash_func(*pc),然后根据hash查表获得tb:atomic_rcu_read(&cpu->tb_jmp_cache[hash])。如果没有cache,那会自动读入么?
  2. atomic_rcu_read, write…找到出处了,
### 安装 QEMU 用户模式和系统模式组件 为了在 Ubuntu 上安装 QEMU 的用户模式 (`qemu-user`) 和系统模式 (`qemu-system`) 组件,可以按照以下方式操作: #### 使用 `apt-get` 安装 QEMU 用户模式 通过执行以下命令来安装 QEMU 用户模式支持的包: ```bash sudo apt-get update sudo apt-get install qemu-user ``` 这会安装多个目标架构的支持工具,例如 `qemu-arm`, `qemu-mips` 等[^2]。 #### 使用 `apt-get` 安装 QEMU 系统模式 对于 QEMU 系统模式的支持,则需要安装 `qemu-system` 包及其子包。可以通过如下命令完成安装: ```bash sudo apt-get update sudo apt-get install qemu-system ``` 此命令将会安装一系列针对不同体系结构的仿真器,比如 `qemu-system-x86_64`, `qemu-system-arm`, `qemu-system-mips` 等。 需要注意的是,在某些情况下可能还需要额外配置二进制格式支持以便更好地兼容其他平台的应用程序。尽管现代版本中通常不再需要手动安装 `qemu-binfmt`,但仍可创建相应目录作为备用措施: ```bash sudo mkdir -p /etc/qemu-binfmt ``` 如果希望从源码编译最新版 QEMU 而不是依赖于官方仓库中的预构建版本,也可以参考下载链接并解压源代码档案文件后再继续后续步骤[^3]: ```bash wget https://download.qemu.org/qemu-7.2.0.tar.xz tar xvJf qemu-7.2.0.tar.xz cd qemu-7.2.0/ ``` 当尝试运行嵌入式固件时可能会遇到缺少必要库的情况;此时应确保所有依赖项均已正确加载到环境中或者调整路径使得 QEMU 可以定位这些资源[^4]。 最后提醒一下关于启动虚拟机实例的具体参数设置,请参照实际需求指定合适的选项以及镜像文件位置等信息[^5]。 ```bash qemu-system-mips \ -kernel vmlinux-3.2.0-4-4kc-malta \ -hda debian_wheezy_mips_standard.qcow2 \ -append "root=/dev/sda1 console=ttyS0" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ensighine

如需特定专题,踢我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值