linux学习4,全靠它,三分钟把系统内核完全跑起来,busybox介绍
极客复述
下载和编译 Linux 内核源码
在第二节中,我们一起下载和编译了 Linux 内核源码,并使用 qemu 模拟运行了编译好的内核。然而,由于缺乏文件系统,内核在启动后期出现了“kernel panic”。因此,在上一节中,我们创建了 disk.img
文件作为“虚拟磁盘”,并将其格式化为 Linux 经典的 ext2 文件系统。
建立能够启动 Linux 内核的文件系统
尽管我们已经有了 ext2 文件系统的 disk.img
“虚拟磁盘”,但其中是空的,没有基本目录如 bin
、etc
、proc
等。因此,虽然解决了内核因缺少文件系统引起的“kernel panic”,但最终仍然报错。而且,我们自己编写的 init
程序并没有实际意义,因此 Linux 内核没有完全启动也是预料之中的。本节的目标是建立能够启动 Linux 内核的文件系统,即向 disk.img
中填充 Linux 启动所需的基本文件,包括真正的 init
程序。实现这个目标有多种方法,我们选择使用 BusyBox。
BusyBox 是一个开源项目,通常用于嵌入式等小型系统。除了 init
程序外,BusyBox 还包含许多常用的命令工具,如 ls
、cat
等。BusyBox 非常轻量级,可以编译出完全独立无依赖的 BusyBox 套件。
下载和编译 BusyBox
要使用 BusyBox,第一步当然是下载它的源码。这里我们选择的是 BusyBox 的 1.27.2 版本。下载后,解压并按照默认配置进行编译。上述命令的意义在第一节已经介绍得很清楚。最后一条命令执行完毕后,会弹出图形配置界面,依次选择:
Busybox Settings
->Build Options
->Build BusyBox as a static binary (no shared libs)
- 勾选这一项的原因是因为我们的磁盘镜像中没有任何其他库,所以 BusyBox 需要被静态编译成一个独立、无依赖的可执行文件,以免运行时发生链接错误。
然后进行编译,编译完成后,我们将 BusyBox 安装到新建的 install
目录下。
将 BusyBox 塞入虚拟磁盘
安装完成后,BusyBox 就被安装到 install
目录中。现在,我们将它们复制到 disk.img
“虚拟磁盘”中。首先,将 disk.img
挂载到 rootfs
,然后直接将编译好的 BusyBox 复制进去即可。现在,我们的虚拟磁盘越来越像 Linux 的文件系统了。init
是我们在上一节编写的应用程序,它不能用作启动 Linux。而 linuxrc
则是从 BusyBox 编译出的 init
程序,我们在使用 qemu 模拟运行 Linux 内核时,可以将 init
程序指定为 linuxrc
。复制完 BusyBox 后,不要忘记卸载 disk.img
,以刷新改动。
使用 qemu 模拟运行 Linux 内核
现在,让我们再次使用 qemu 模拟运行编译好的 Linux 内核和修改好的文件系统。这次终于没有报错了,提示我们按回车激活控制台。到这里,我们终于将 Linux 操作系统完全跑起来了,可以执行 Linux 的基本命令了。还记得 init
这个应用程序吗?现在它也可以正常执行了。
欢迎在评论区一起讨论和质疑。本文是原创手打,每天最浅显地介绍 C 语言、Linux 等嵌入式开发。如果喜欢我的文章,请关注,可以看到最新更新和之前的文章哦。