Linux Lab 是一套用于 Linux 內核學習、開發和測試的即時實驗室,可以極速搭建和使用,功能強大,用法簡單!
Linux Lab Boot example
經過 3 年多的開發與迭代,Linux Lab 已經發布了 v0.2 版,其易用性和功能逐漸強大,非常推薦各位 Linux 內核和嵌入式 Linux 開發者嘗試。
下面列舉了十大使用 Linux Lab 的理由。
省時:節省數周的環境搭建時間
無論是新人還是有經驗的老手,搭建 Linux 的學習和實驗環境都是比較費時費力的,一方面要安裝基礎系統,一方面要下載各種交叉編譯工具,有時候還要去下載最新的源代碼。在國內這個大的局域網下,要整完整套環境,少則幾天,多則數周,最重要的通常還得多次重復去搭建,不光費時還很繁瑣,系統一變更,又得重復做。
Linux Lab 把這幾個工作簡化成了三條命令(Windows、Mac OSX 和非 Ubuntu Linux 系統需要自行安裝 Docker),數十分鐘就可以執行完,而且每次都可以拿到體驗一致的環境:
$ git clone https://gitee.com/tinylab/cloud-lab.git $ cd cloud-lab $ tools/docker/run linux-lab
目前 Linux Lab 已經在 github 和 gitee 上收獲累計 500 多個 Stars,并有數百人的用戶群,按 500 人,每人節省 4 周即 30 天粗略估算,Linux Lab 已經累計節省了 500 * 30 天 = 15000 天 = 41 年。
省錢:節省不菲的開發板購買費用
截止到目前,Linux Lab 已經支持世界上最主流和流行的 5 大處理器架構(X86、ARM、MIPS、PowerPC、RISC-V),也支持國產的 CSKY 和 Loongson,支持 15 款相應的開發板。
按人均一塊板子,每塊開發板 ¥300 粗略計算,已經為大家節省了 500 * ¥300 = ¥150000 = ¥15 萬。
對于個人而言,有了 Linux Lab,可以自由使用現有的 7 大架構,15 款開發板中的任意一款,累積節省 15 * ¥300 = ¥4500,并且這些開發板可以反復使用,永遠不會壞,而且還有更多板子在持續添加中,用戶也可以自己輕松擴展新板子。
$ make list-short [ aarch64/raspi3 ]: ARCH = arm64 LINUX ?= v5.1 [ aarch64/virt ]: ARCH = arm64 LINUX ?= v5.1 [ arm/versatilepb ]: ARCH = arm LINUX ?= v5.1 [ arm/vexpress-a9 ]: ARCH = arm LINUX ?= v5.1 [ i386/pc ]: ARCH = x86 LINUX ?= v5.1 [ mipsel/malta ]: ARCH = mips LINUX ?= v5.1 [ ppc/g3beige ]: ARCH = powerpc LINUX ?= v5.1 [ riscv32/virt ]: ARCH = riscv LINUX ?= v5.0.13 [ riscv64/virt ]: ARCH = riscv LINUX ?= v5.1 [ x86_64/pc ]: ARCH = x86 LINUX ?= v5.1 [ csky/virt ]: ARCH = csky LINUX ?= v4.9.56 [ loongson/ls1b ]: ARCH = mips LINUX ?= v5.2 [ loongson/ls232 ]: ARCH = mips LINUX ?= v2.6.32-r190726 [ loongson/ls2k ]: ARCH = mips LINUX ?= loongnix-release-1903 [ loongson/ls3a7a ]: ARCH = mips LINUX ?= loongnix-release-1903
更為重要的是,有些開發板在市面上可能根本就買不到,要不不開賣了,要不沒地方買。
省心:一致和可預期的操作結果
以往要研究 Linux,最害怕的是慢得讓人發瘋的洲際網絡,不知道從哪里才能找到靠譜可用的編譯器,抑或是某個版本內核 ok,另外一個版本又不行,或者某個命令又罷工了,或者是配置不對。
Linux Lab 不僅提供了一致的環境,還提供了驗證好的編譯器、Qemu 啟動腳本、甚至有預編譯好的內核和文件系統映像包以及配套的配置文件,而且 Linux Lab 把所有依賴的資源盡量都遷移到了我們的“局域網”內。
- Linux,采用清華的 Mirror
- U-boot, Buildroot 和 Qemu 都采用碼云的 Mirror
- Docker 鏡像,可采用 USTC、阿里云等 Mirror
- 編譯器,每個架構有驗證好 2~3 款可用的編譯器
- 內核和文件系統,每個架構都有提前編譯好的版本,按開發板各自存放在獨立的碼云倉庫中
幾乎所有的動作都有預先驗證過的簡單接口,并且都經過了較為充分的測試和驗證。能極大程度地降低不確定性帶來的恐慌和彷徨,減少苦惱。
幾乎所有的板子都添加了串口、網絡、LCD 驅動支持,也添加了從 Ramdisk、NFS、磁盤 加載文件系統功能,還添加了簡潔的調試和測試功能。用戶可以在這個很高的起點上再根據需求做進一步的客制化,非常省心省力。
強大:可擴展的計算機基礎技術學習環境
Linux Lab 的初衷是學習 Linux 內核,但是發展至今,不僅可以用來學習 Linux 內核,還可以用來學習 C、匯編、Shell、處理器架構、U-boot、Qemu 等,而且還可以做進一步的擴展。
另外,作為 Linux Lab 的基礎設施,Cloud Lab 提供了更大擴展性,目前不僅有 Linux 0.11 Lab, CS630 Qemu Lab 這樣的 Lab 實例,而且有 Markdown Lab, RT-Thread Lab 這樣的 Lab 實例,還可以類似添加更多的專屬 Lab 環境,有巨大的可擴展能力。
- Linux 0.11 Lab,用于學習 0.11 版本的 Linux 內核
- CS630 Qemu Lab,用于學習 Linux AT&T 匯編語言
- RT-Thread Lab,用于研究國產 RT-Thread OS
- Markdown Lab,用于學習和使用 Markdown,可以用來撰寫文章、幻燈、簡歷或圖書
簡潔:統一簡單易記的操作接口
Linux Lab 把各種常見操作抽象為簡單易記的接口,把背后繁瑣的細節和費時的工作全部隱藏并且優化好,用戶只需要記住簡單的命令即可。并且這些命令適應已經支持的 Linux、U-boot、Buildroot 和 Qemu。
make 接口 | 作用 |
---|---|
*download | 下載 |
*checkout | 檢出某個版本 |
*patch | 打補丁 |
*defconfig | 使能默認配置文件 |
*olddefconfig | 啟用老的配置 |
*menuconfig | 打開圖形配置界面 |
*save | 保存配置和鏡像 |
boot | 通過 Qemu 引導 |
debug | 通過 Qemu 調試 |
test | 通過 Qemu 測試 |
小巧:模塊化和清晰透明的架構
Linux Lab 本身被拆分成三大部分:實驗環境、實驗代碼和環境管理,而實驗代碼又經過精心地設計,避免臃腫。
Linux Lab 與其他 Lab 實例共享環境管理代碼:Cloud Lab,僅需關心自身的實驗環境和實驗代碼,而實驗代碼部分又盡可能地只保留板級公共代碼,板子特定的代碼不僅可以作為獨立的倉庫發布,而且可以獨立使用。所以,Linux Lab 不僅結構清晰,而且代碼小巧。
模塊 | 大小 |
---|---|
Cloud Lab | 8.5M |
Linux Lab | 7.3M |
linux-lab Docker 鏡像 | 4.13G |
boards/csky | 358M |
boards/loongson/ls3a7a/bsp | 7.8M |
boards/loongson/ls232/bsp | 5.0M |
boards/loongson/ls1b/bsp | 40M |
boards/loongson/ls2k/bsp | 29M |
boards/aarch64/raspi3/bsp | 152M |
boards/aarch64/virt/bsp | 68M |
boards/arm/versatilepb/bsp | 142M |
boards/arm/vexpress-a9/bsp | 60M |
boards/riscv64/virt/bsp | 49M |
boards/riscv32/virt/bsp | 40M |
boards/mipsel/malta/bsp | 48M |
boards/i386/pc/bsp | 23M |
boards/x86_64/pc/bsp | 20M |
boards/ppc/g3beige/bsp | 57M |
各板級或架構有獨立的倉庫,并且有獨立的 Qemu 啟動腳本(boot.sh)、內核映像、文件系統映像以及相應配置文件,可以獨立使用和參考:
- boards/csky
- boards/loongson
- boards/aarch64/raspi3/bsp
- boards/aarch64/virt/bsp
- boards/arm/versatilepb/bsp
- boards/arm/vexpress-a9/bsp
- boards/i386/pc/bsp
- boards/mipsel/malta/bsp
- boards/ppc/g3beige/bsp
- boards/riscv32/virt/bsp
- boards/riscv64/virt/bsp
- boards/x86_64/pc/bsp
易達:隨時隨地使用和訪問
Linux Lab 不僅提供了本地的 VNC/SSH 訪問方式,而且提供了遠程的 WebVNC 和 WebSSH 訪問方式,而且提供了內網穿透的功能(需要專屬 Docker 容器配合),可以類似 teamviewer 那樣從外網進入局域網。所以,理論上,搭建完 Linux Lab,再配合現代路由器或者云服務器,就可以做到,隨時隨地訪問一致的開發環境。
$ tools/docker/release linux-lab LOG: Current Lab is linux-lab Lab: linux-lab-60029, User: ubuntu * VNC (Normal): http://localhost:6080/?u=7827c9&p=chln3p * VNC (View): http://localhost:6080/?r=7827c93tsrkd * SSH (Web): http://localhost:4433/?ssh=ssh://ubuntu:tffsm7@172.17.0.3:22 LOG: Released to: /media/falcon/develop/cloud-lab/releasings/index.html LOG: Labs online: http://localhost:6080/labs/index.html
簡單地,如果在一臺云服務器上運行 Linux Lab,只需要把外網可訪問的服務 IP 地址或者域名寫入到 Cloud Lab 根目錄下的 .host_name 即可獲得合適的 URL 地址:
$ cd /path/to/cloud-lab $ echo example.com > .host_name $ tools/docker/release linux-lab LOG: Current Lab is linux-lab Lab: linux-lab-60029, User: ubuntu * VNC (Normal): http://example.com:6080/?u=7827c9&p=chln3p * VNC (View): http://example.com:6080/?r=7827c93tsrkd * SSH (Web): http://example.com:4433/?ssh=ssh://ubuntu:tffsm7@172.17.0.3:22 LOG: Released to: /media/falcon/develop/cloud-lab/releasings/index.html LOG: Labs online: http://example.com:6080/labs/index.html
兼容:三大系統環境下使用幾乎一致
Linux Lab 基于 Docker,只要安裝有 Docker,就可以直接在 Linux、Mac OSX 和 Windows 三大系統下使用,并且使用體驗幾乎一致。
- Docker for Linux
- Docker for Mac
- Docker for Windows * 依賴特定的 Windows 版本,請查看上述文檔 * 需要配合 “Git Bash Here” 使用。安裝完 Git for Windows 后,在任意目錄點擊鼠標右鍵可見。
如果是老版本的 Windows,可以用 Docker Toolbox,也可以通過 Virtualbox 或 Vmware 自行安裝 Ubuntu。
通用:支持幾乎所有版本的 Linux 內核
可以自由切換“任意”內核版本,從 2.6 到 5.4,已經驗證的版本從早期的 2.6.35 到 5.2,都提供有相應的配置文件和預編譯好的映像:
$ ls boardsbsp/kernel/ | grep -v riscv | sort -u v2.6.35 v2.6.35.14 v2.6.36 v2.6.37 v3.10 v3.18.39 v4.19 v4.5.5 v4.6.7 v5.0.10 v5.0.13 v5.0.21 v5.1 v5.2
結合 Linux 0.11 Lab,還可以研究"上古時代"的 0.11 等老內核版本。
教學:提供了多種教學輔助功能
Linux Lab 提供了如下教學輔助功能,適合在高校、培訓機構、在線課程等場景下使用:
-
提供了 Normal 和 Viewonly 這兩種訪問方式,可以互動,也可以廣播,適合多種教學場景
-
允許一鍵創建任意多個獨立的 Lab 實體,允許多個學生同時使用
-
提供了多種實驗過程的錄制工具,包括命令行的錄制工具 showterm 和桌面的錄制工具:showdesk.io
接下來,看看同學們在 arm64 aarch64/virt 板子上運行 5.1 Linux 的小視頻吧: