一,前言
我原来想开启学习qemu的目的除了感觉好奇想探秘意外,有如下几个目的
1,掌握qemu创建开发板的方法,我之前认为是8小时内就可以完成的,这样有利于我自己定制各种开发板玩。
结果分析源码后才知道8h绝对完成不了,只能基于原来开发板做小修改。
2,借着掌握qemu源码来进一步熟悉linux内核的进程切换原理及启动流程
结果发现其实关系不大,所以熟悉linux内核进程切换原理及启动流程最简单的是去看linux0.11源码及相关学习资料,网上很多。
3,了解优秀基于linux的c应用开发是如何设计的
结果如愿以偿,get到了一些小tip,对glibc库也加深了了解,最重要的学习到了c语言面向对象的另外一种设计方法。
4,想搞清楚qemu和kvm还有hypervise及virtio驱动这些技术的关系及区别
结果基本都了解了,知道了硬件虚化(直接映射io),半虚化,全虚化(效率最低,特别是mmu多层切换)的概念,知道了kvm是内核的通过ioctrl来控制,知道了virtio主要是知道设备是虚拟的然后使用的特殊驱动,用fifo设计来降低io负载,也都属于半虚化。
5,想搞清楚做qemu的人都是哪些工种,是否和功能安全有关
结果了解到主要是做服务器容器开发为主,双系统并行运行用到hypervise调度共享底层资源,但是从功能安全角度没有独立硬件,混合操作硬件的反而是不安全的。
二,内容
2.1 第二轮qemu源码分析
Qemu源码分析(1)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7402306
Qemu源码分析(2)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7483657
Qemu源码分析(3)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7493755
Qemu源码分析(4)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7494473
Qemu源码分析(5)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7502695
qemu源码分析(6)--Apple的学习笔记
https://blog.51cto.com/AppleCai/7516182
Qemu源码分析(7)--Apple的学习笔记
https://blog.51cto.com/AppleCai/7586221
Qemu源码分析(8)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7629931
qemu源码分析(9)--Apple的学习笔记
https://blog.51cto.com/AppleCai/7664864
Qemu源码分析(10)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7694211
Qemu源码分析(11)—Apple的学习笔记
https://blog.51cto.com/AppleCai/7701587
2.2 qemu过程中学习的linux内核相关复习
qemu中的glib库api试用--Apple的学习笔记
https://blog.51cto.com/AppleCai/7419784
基于wsl的ubuntu vscode调试环境搭建--Apple的学习笔记
https://blog.51cto.com/AppleCai/7529769
Linux的双链表复习—Apple的学习笔记
https://blog.51cto.com/AppleCai/7614626
MMU复习--Apple的学习笔记
https://blog.51cto.com/AppleCai/7615238
通过linux0.11学习操作系统原理--Apple的学习笔记
https://blog.51cto.com/AppleCai/7684036
三,总结
学以致用乐趣无穷。我已经把学到的log方法移植到了我自己项目中,且尝试了qemu中QObject的面向对象设计方法,过程中复习了rcu看了qemu简单版的rcu实现源。这是第二次qemu拔草,依然有新鲜感,不过暂时发现它对我的工作没多大帮助,而我想了解的5项内容也都基本完成。所以close file,进行资料打包封存。
注:我的qemu第一轮学习地址