简介
minios
是使用QEMU实现的一个迷你 Linux 系统。它由 Linux 内核和 Rootfs 组成,Rootfs中包含了一系列的第三方基础库,比如 Libc , BusyBox 。这些都是操作系统运行的基础组件。利用 minios ,可以快速的构建一个 Linux 最小系统,包含有console和一系列的 busybox 命令。利用
minios
,可以快速的构建一个
Linux
最小系统,包含有console和一系列的 busybox 命令。
用户需求比如:
- 验证
内核特性,可以通过修改Linux
来使能对应的内核特性,快速编译defconfig
来验证功能。minios
- 验证驱动,可以添加驱动代码到
环境中,编译驱动并加载验证。minios
- 验证应用,上层应用也可以使用
来进行验证,支持nfs文件系统挂载。minios
本项目创建初衷是便于嵌入式开发的,所以整个构建都是使用交叉编译的形式进行,支持两个平台,ARM/ARM64。
组件
minios
组件包括编译器,内核,C标准库,Busybox工具库。用户可以根据自己的需要进行扩展,添加内核特性/驱动/应用到
minios
中。编译完成后,
minios
可以直接在QEMU虚拟机中运行起来,验证对应的组件功能。
minios
的代码是托管在github上的,可以通过如下方式克隆仓库:
git clone https://github.com/rikeyone/mini-os
下载仓库后,可以看到该仓库是由如下一些脚本和目录组成:
build.sh install.sh kernel lib README.md run.sh scripts sdk
该仓库中只包含一系列shell脚本,并没有实际意义上的代码,这是因为我把必要的组件进行了单独的管理,分别放置于不同的github仓库中了。类似于android的代码管理方式,不同的组件使用不同的仓库进行管理。这样避免了各个第三方库之间的开源协议冲突,避免一些官司,当然也可能是我多虑了,毕竟小众的项目可能根本不会涉及到官司,不管如何也是为了让我的项目更加规范。这样
minios
也可以按照预期的开源协议进行发布。
安装
在下载
minios
仓库后在目录有3个主要用途的shell脚本,分别是
install.sh
build.sh
run.sh
。在编译
minios
之前需要先安装一些必要软件,比如开发环境/编译器等。直接执行:
sudo ./build.sh
运行时会申请root权限,因为需要安装到系统目录中。
编译
编译
minios
时,直接运行目录中的build脚本:
./build.sh [-a][-m module][-p platform]
各个参数的含义如下:
-a: build all modules.
-m: build expect module:kernel/rootfs/busybox/libc/initramfs.
-p: build platform, support arm and arm64, default is arm64.
-h: help informations.
实际上在该项目中还存在一个
scripts
目录,当我们运行build脚本时实际上是调用到该目录中的一系列的脚本来做具体任务的。
build_busybox.sh build_kernel.sh build_rootfs.sh qemu_gdb_start.sh qemu_sd_start.sh qemu_stop.sh
build_initramfs.sh build_libc.sh envsetup.sh qemu_nfs_start.sh qemu_start.sh
我们可以指定全编译类型或者单独触发某一个子模块的编译。在build各个模块时,会先判断该模块是否已经下载了代码,如果没有代码会先下载对应模块的代码仓库,这次下载的是真正意义上的代码。
编译实例:
编译 arm64 平台(默认)上的
minios
:
./build.sh -a
编译 arm64 平台(默认)上的子模块:
./build.sh -m kernel
./build.sh -m rootfs
运行
运行 arm64 平台的
minios
:
sudo ./run.sh
运行 arm 平台的
minios
:
sudo ./run.sh -p arm
停止运行
停止运行 arm64 平台的
minios
:
sudo ./run.sh -s
停止运行 arm 平台的
minios
:
sudo ./run.sh -s -p arm
以上就是
minios
的一些基本信息,想要学习Linux的同学,赶紧尝试一下吧!
欢迎扫码关注我的公众号!