qemu虚化原理入门--Apple的学习笔记

一,前言

由于之前玩了下qemu觉得效果不错。然后看了下源码,很少的代码就能实现这样的功能,以前只知道虚拟机是和主机共享硬件,其它都不知道了。但是qemu它不单单是虚拟机共享,它还能仿真其它arm内核的芯片。所以好奇它的原理,花点时间了解下,并且学习下它的代码设计思路,取其精华去其糟粕。

二,解决疑问

  1. qemu是如何仿真其它芯片的。
    我们和程序可以运行的原因是通过编译器编译为了机器能识别的二进制码。所以qemu利用了此原理,将需要仿真的targe的二进制bin文件翻译为主机对应的二进制码,所以就可以仿真不同框架的代码了。target->TCG->host。所有不同种类的芯片cpu代码都先翻译为TCG格式,然后翻译为当前的主机cpu代码。
  2. qemu是如何仿真的。
    qemu可以借助KVM加速模拟速度,属于半虚化。KVM是主机内核的虚化模块,qemu通过访问KVM则可以和主机共享IO。关于全虚化就是qemu自行模拟所有IO,当然速度会比半虚化慢。我现在初步理解了下qemu和KVM的关系。


    image.png
  3. qemu如何二次开发添加自定义开发板的
    这个要打开qemu代码看了。简单的了解了下,打开HW文件夹里面有开发板信息,打开后可以看到都是从type_init开始的。看上去和linux的设备驱动模型有点像。官网和网上都搜索下了相关资料。看了下0.9版本1.3版本2.8版本感觉早期版和现在版本区别比较大。最选择看2.8版本。因为我下载了一个2.8版本的STM32特制板源码,通过对比来学习它如何添加设备的,重点内容会比较突出。


    image.png
  4. qemu的实现机制
    网上了解下qemu源码每个文件夹的主要功能。qemu其实是app代码,要配合内核中的KVM使用来虚拟cpu和内存。然后vl.c里面的main是它的主函数 。先看了下代码,它的main函数通过回调函数注册完成后,在mainloop函数用了glib的poolfd事件触发机制。然后关于内核/dev/kvm需要创建虚拟机vcpu相关部分我还不太清楚。
    我现在的理解,简单来说注册了fd的模拟IO读写,然后poolfd后进行对应的回调函数进行截取或模拟,就实现了qemu的虚拟机功能。

三,GDB调试qemu

重新编译qemu使其带调试信息,在ubuntu16.04的虚拟机中运行
./configure --target-list=arm-softmmu --enable-debug
make
很顺利的编译完成,然后运行如下命令

  1. cd /home/tftpboot/
  2. export PATH=/work/qemu2_8/qemu-2.8.0/arm-softmmu:$PATH
  3. 直接运行qemu检验效果
    qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/tftpboot/my/zImage -dtb /home/tftpboot/my/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
  4. GDB调试命令
    gdb --tui --args /work/qemu2_8/qemu-2.8.0/arm-softmmu/qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/tftpboot/my/zImage -dtb /home/tftpboot/my/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3

先用gdb调试了下,效果如下
vexpress_machine_init,vexpress_a9_class_init,vexpress_instance_init


image.png

image.png

四 后续还会有源码分析

周末天好,我先出去运动运动了。关于qemu2.8的源码分析,欲知详情,且看下回分解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容