符号接在 busybox 中的妙用
嵌入式文件系统通常基于 busybox 制作,制作好之后,文件系统中的 busybox 是一个可执行文件,ls、pwd、mv 等命令是指向 busybox 的符号链接。
当执行 ls、pwd、mv 时,实际执行的是 busybox 件,但是 busybox 却可以知道要执行哪个指令,这是怎么做到的呢?
当执行 ls 时,虽然,实际调用 busybox,但是 busybox 获得的命令行参数却是 ls,因此,busybox 可通过命令行参数来确定调用的是哪个命令。
下面,我们模拟一个 busybox,新建 busybox 文件,内容如下:
复制代码
在 Shell 脚本中,$0、$1、$2 为命令行参数,在 C 语言程序中,argv[0]、arg[1]、arg[2] 为命令行参数。
basename 用于去除一个 pathname 中的 path,例如:执行 basename /usr/bin/ls 可以得到 ls。创建 ls、pwd、whoami 符号链接,命令如下:
复制代码
执行 ./pwd 时,busybox 开始运行,其命令行参数 $0 为 pwd,因此,会调用系统的 pwd 命令。
我写了一个小项目桃花源(英文名为 peach),该项目是一个迷你虚拟机,用于学习 Intel 硬件虚拟化技术。学习该项目可使读者对 CPU 虚拟化、内存虚拟化技术有个感性、直观的认识,为学习 KVM 打下坚实的基础。peach 实现了如下功能:
使用 Intel VT-x 技术实现 CPU 虚拟化
使用 EPT 技术实现内存虚拟化
支持虚拟 x86 实模式运行环境
支持虚拟 CPUID 指令
支持虚拟 HLT 指令,Guest 利用 HLT 指令关机
代码仓库如下:
复制代码
评论