当前位置:首页 > 虚拟机 > 正文

虚拟机源码


一、手把手教你搭建ARM64QEMU环境

上一篇文章介绍了ARM32QEMU环境搭建流程,下面我们继续学习如何搭建ARM64QEMU开发环境。


首先准备开发环境:


您的电脑系统:Windows10
虚拟机:VMware17
虚拟机操作系统:Ubuntu20.04
模拟目标64位CPU:Cortex-A57
使用版本:qemu-8.2.0、LinuxKernel5.10.209和busybox-1.36.1

构建步骤如下:


下载,到qemu网站下载qemu-8.2.0源码。
确保您的Python版本高于3.8。
安装所需的Python客户端和glib2.0环境。
在qemu目录下,配置源码,创建编译目录并配置。
从获取Linuxkernel5.10源代码,解压并编译生成文件。
将核心组装在一起并将它们存储在指定的presul中。
使用罗盘盒创建根系统文件:下载最新版本源码,设置交叉工具链编译,重新配置安装。
创建根目录并将奇怪的安装内容复制到其中,包括环境变量和构建节点。
在/etc/init.d/rcS脚本中,rcS会挂载系统文件、处理热线、设置eth0的静态IP。
了解并配置其他配置文件,例如/etc/fstab和/etc/profile。
如果需要,可以尝试基于内存的文件系统,使用cpio工具压缩initramfs或gzip。
如果需要持久性,请创建一个严格的文件系统。
最后,您命令使用哪一个核心并通过端口打开它。

更详细的步骤和例子,可以参考我的文章《Linux随笔》,关键词“busybox”有资源。作者潘小帅,对Linux底层技术充满热情,希望分享原创文章。感谢您的帮助和关注!


二、Lua5.4源码剖析——虚拟机6之OpCode大全

深入探索Lua5.4虚拟机的奥秘——OpCode揭晓


在Lua5.4的世界里,80多个精心打造的OpCode组成了其强大的指令集,它们就像乐谱上的音符,使节目的旋律充满活力。下面我们进入Lua5.4虚拟机,对这些关键指令代码单元一一分析。


数据加载动作

首先,我们来到数据加载阶段,OpCode在此起舞:


OP_MOVE:移动值​​稍微从一个寄存器到另一个寄存器就像在调色板上移动颜色一样。
OP_LOADI/OP_LOADF/OP_LOADK/OP_LOADKX:数字的音符——整数、浮点数、常量、UpValue,一一弹奏。
OP_LOADTRUE/OP_LOADFALSE:布尔值的二进制选择,为逻辑运算注入动力。
OP_LOADNIL/OP_GETUPVALUE/OP_GETTABUP:赋值的无限路径,从零开始,到无穷大结束。
算术运算的交响曲

然后我们进入算术运算的章节,OpCode在这里搅动:


从简单的OP_ADDK(R[A]:=R[B]+K[C])到OP_SUBK、OP_MULK、OP_MODK,到OP_POWK和OP_DIVK,每一个都是音符之间的和谐对话。
直接的数值运算,如OP_ADDI(R[A]=R[B]+sC),边界清晰,不需要像音乐即兴创作那样预先存储。
寄存器之间的算术运算,如OP_ADD、OP_SUB等,就像弦乐四重奏的协奏曲。
位运算和表运算

接下来我们进入位运算和表运算章节,它们是程序逻辑的精密齿轮:


OP_BANDK、OP_BORK和OP_BXORK与数字或寄存器保持二进制对话,就像钟声的和谐共鸣。
OP_SHL和OP_SHR,位移旋律,增加数据结构的深度。
OP_NEWTABLE创建一个新表,OP_GETI/GETFIELD/GETTABLE查询信息,OP_SETI/SETFIELD/SETTABLE进行更改,就像编排数据舞蹈一样。
元方法和函数调用

接下来是元方法和函数调用的移动,其中OpCode充当指挥:


MMBIN、MMBINI和MMBINK,元方法调用的三种旋律,赋予对象魔法。
OP_CALL和OP_TAILCALL,函数调用的开始和结束,就像指挥棒的挥动和闭合。
OP_VARARGPREP和OP_VARARG处理可变参数并为函数调用添加变体。
跳转和控制流

最后,我们来到指令的跳转和控制流部分。OP_JMP就像一根棍子,引导着程序的旋律:
OP_JMP的精确跳转就像运动节奏的变化一样,控制着程序的进程。
Lua5.4中,增加了goto,使得程序流程更加灵活。
等式判断与循环

等式判断与循环的操作码就像交响乐的高潮,丰富有力:


OP_EQ、OP_LT、OP_LE、OP_GTI、OP_GEI,比较判断,赋予逻辑深度。
OP_TEST和OP_TESTSET是条件判断和赋值的智能结合。
OP_FORPREP和OP_TFORPREP,开始并准备循环,OP_FORLOOP和OP_TFORCALL,执行旋律重复。
杂项OpCode的美丽点缀

最后,8个杂项OpCode为整个运动画上了完美的句号:


OP_UNM:负数值,反转旋律的音符。
OP_BNOT:位反转,逻辑反转。
OP_NOT:条件否定,增加逻辑复杂度。
OP_LEN:查找对象的长度并探索数据的深度。
OP_CONCAT:拼接字符串,连接旋律片段。
OP_SETLIST:创建列表,初始化的前奏。

彻底理解Lua5.4OpCode就像享受一场丰富的音乐盛宴,每一个音符都蕴藏着程序的智慧和力量。让我们深入研究虚拟机这个奇妙的世界,继续探索编程更深层次的奥秘。祝您玩得开心,赚大钱!