簡介
minios
是使用QEMU實現的一個迷你 Linux 系統。它由 Linux 內核和 Rootfs 組成,Rootfs中包含了一系列的第三方基礎庫,比如 Libc , BusyBox 。這些都是操作系統運行的基礎組件。利用 minios ,可以快速的構建一個 Linux 最小系統,包含有console和一系列的 busybox 命令。利用 minios
,可以快速的構建一個 Linux
最小系統,包含有console和一系列的 busybox 命令。
用戶需求比如:
- 驗證
Linux
內核特性,可以通過修改defconfig
來使能對應的內核特性,快速編譯minios
來驗證功能。 - 驗證驅動,可以添加驅動代碼到
minios
環境中,編譯驅動並加載驗證。 - 驗證應用,上層應用也可以使用
minios
來進行驗證,支持nfs文件系統掛載。
本項目創建初衷是便於嵌入式開發的,所以整個構建都是使用交叉編譯的形式進行,支持兩個平臺,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的同學,趕緊嘗試一下吧!
歡迎掃碼關注我的公衆號!