写点什么

符号接在 busybox 中的妙用

作者:ScratchLab
  • 2023-06-22
    河北
  • 本文字数:694 字

    阅读完需:约 2 分钟

符号接在 busybox 中的妙用

嵌入式文件系统通常基于 busybox 制作,制作好之后,文件系统中的 busybox 是一个可执行文件,ls、pwd、mv 等命令是指向 busybox 的符号链接。


当执行 ls、pwd、mv 时,实际执行的是 busybox 件,但是 busybox 却可以知道要执行哪个指令,这是怎么做到的呢?


当执行 ls 时,虽然,实际调用 busybox,但是 busybox 获得的命令行参数却是 ls,因此,busybox 可通过命令行参数来确定调用的是哪个命令。


下面,我们模拟一个 busybox,新建 busybox 文件,内容如下:

#!/bin/sh
if [ "`basename $0`" = "ls" ]; then lsfi
if [ "`basename $0`" = "pwd" ]; then pwdfiif [ "`basename $0`" = "whoami" ]; then        whoamifi
复制代码

在 Shell 脚本中,$0、$1、$2 为命令行参数,在 C 语言程序中,argv[0]、arg[1]、arg[2] 为命令行参数。


basename 用于去除一个 pathname 中的 path,例如:执行 basename /usr/bin/ls 可以得到 ls。创建 ls、pwd、whoami 符号链接,命令如下:

chmod a+x busyboxln -s busybox lsln -s busybox pwdln -s busybox whoami
复制代码

执行 ./pwd 时,busybox 开始运行,其命令行参数 $0 为 pwd,因此,会调用系统的 pwd 命令。


我写了一个小项目桃花源(英文名为 peach),该项目是一个迷你虚拟机,用于学习 Intel 硬件虚拟化技术。学习该项目可使读者对 CPU 虚拟化、内存虚拟化技术有个感性、直观的认识,为学习 KVM 打下坚实的基础。peach 实现了如下功能:


  • 使用 Intel VT-x 技术实现 CPU 虚拟化

  • 使用 EPT 技术实现内存虚拟化

  • 支持虚拟 x86 实模式运行环境

  • 支持虚拟 CPUID 指令

  • 支持虚拟 HLT 指令,Guest 利用 HLT 指令关机


代码仓库如下:

https://github.com/pandengyang/peach.git
复制代码


用户头像

ScratchLab

关注

苔花如米小,也学牡丹开。 2019-03-04 加入

专注创作有助于理解CPU体系结构、虚拟化的文章。

评论

发布
暂无评论
符号接在 busybox 中的妙用_ScratchLab_InfoQ写作社区