可快速構建,支持 Docker, Qemu, Ubuntu, Mac OSX, Windows, Webhtml
由 Wu Zhangjin 建立於 2016/06/19linux
該項目致力於快速構建一個基於 Qemu 的 Linux 內核開發環境。github
使用文檔:README.mddocker
以 Ubuntu 和 Qemu 爲例。其餘 Linux 和 Mac OSX 系統請先安裝 Docker CE。Windows 系統,請先下載並安裝 Docker Toolbox。vim
安裝完 docker 後若是想免 sudo
使用 linux lab,請務必把用戶加入到 docker 用戶組並重啓系統。網絡
$ sudo usermod -aG docker $USER
因爲 docker 鏡像文件比較大,有 1G 左右,下載時請耐心等待。另外,爲了提升下載速度,建議經過配置 docker 更換鏡像庫爲本地區的,更換完記得重啓 docker 服務。架構
$ grep registry-mirror /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn"
$ service docker restart
若是 docker 默認的網絡環境跟本地的局域網環境地址衝突,請經過以下方式更新 docker 網絡環境,並重啓 docker 服務。ui
$ grep bip /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --bip=10.66.0.10/16"
$ service docker restart
若是上述改法不生效,請在相似 /lib/systemd/system/docker.service
這樣的文件中修改後再重啓 docker 服務。spa
$ grep dockerd /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --bip=10.66.0.10/16 --registry-mirror=https://docker.mirrors.ustc.edu.cn
$ service docker restart
若是使用 Docker Toolbox,因爲安裝的默認 default
系統未提供桌面,因此須要先獲取該系統的外網地址,即 eth1 網口的 IP 地址,而後在外部系統訪問。
$ ifconfig eth1 | grep 'inet addr' | tr -s ' ' | tr ':' ' ' | cut -d' ' -f4
192.168.99.100
若是是本身經過 Virtualbox 安裝的 Linux 系統,即便有桌面,也想在外部系統訪問時,則能夠經過設置 ‘Network -> Adapter2 -> Host-only Adapter’ 來添加一個 eth1 網口設備。
請務必注意,經過 Docker Toolbox 安裝的 default
系統中默認的 /root
目錄僅僅掛載在內存中,關閉系統後數據會丟失,請千萬不要用它來保存實驗數據。可使用另外的目錄來存放,好比 /mnt/sda1
,它是在 Virtualbox 上外掛的一個虛擬磁盤鏡像文件,默認有 17.9 G,足夠存放常見的實驗環境。
再次提醒,在 Linux 或者 Mac 系統,能夠隨便在 ~/Downloads
或者 ~/Documents
下找一處工做目錄,而後進入,好比:
$ cd ~/Documents
可是若是使用的是 Docker Toolbox 安裝的 default
系統,該系統默認的工做目錄爲 /root
,它僅僅掛載在內存中,所以在關閉系統後全部數據會丟失,因此須要換一處上面提到的 /mnt/sda1
,它是外掛的一個磁盤鏡像,關閉系統後數據會持續保存。
$ cd /mnt/sda1
$ git clone https://github.com/tinyclub/cloud-lab.git
$ cd cloud-lab && tools/docker/choose linux-lab
$ tools/docker/run # 加載鏡像,拉起一個 Linux Lab 容器
執行 tools/docker/vnc
後會打開一個 VNC 網頁,根據 console 提示輸入密碼登錄便可,以後打開桌面的 Linux Lab
控制檯並執行:
$ make boot
默認會啓動一個 versatilepb
的 ARM 板子,要指定一塊開發板,能夠用:
$ make list # 查看支持的列表
$ make BOARD=malta # 這裏選擇一塊 MIPS 板子:malta
$ make boot
$ make core-source -j3 # 同時下載 linux-stable, qemu 和 buildroot
$ make root-defconfig # 配置根文件系統
$ make kernel-checkout # 檢出某個特定的分支(請確保作該操做前本地改動有備份)
$ make kernel-defconfig # 配置內核
$ make root-menuconfig # 手動配置根文件系統
$ make kernel-menuconfig # 手動配置內核
$ make root # 編譯根文件系統,稍微有點慢,須要下載帶 sysroot 的編譯器
$ make kernel # 編譯內核,採用 Ubuntu 和 emdebian.org 提供的交叉編譯器
$ make save # 保存新的配置和新產生的鏡像
$ make kconfig-save # 保存到 boards/BOARD/
$ make rconfig-save
$ make root-save # 保存到 prebuilt/
$ make kernel-save
須要打開 boards/BOARD/Makefile
屏蔽已經編譯的 KIMAG
和 ROOTFS
,此時會啓動 output/
目錄下剛編譯的 rootfs 和內核:
$ vim boards/versatilepb/Makefile
#KIMAGE=$(PREBUILT_KERNEL)/$(XARCH)/$(BOARD)/$(LINUX)/zImage
#ROOTFS=$(PREBUILT_ROOTFS)/$(XARCH)/$(CPU)/rootfs.cpio.gz
$ make boot
$ make boot G=0 # 使用組合按鍵:`CTL+a x` 退出,或者另開控制檯執行:`pkill qemu`
$ make boot ROOTDEV=/dev/nfs
$ make boot ROOTDEV=/dev/ram
經過添加或者修改 boards/BOARD/Makefile
,能夠靈活配置開發板、內核版本以及 BuildRoot 等信息。經過它能夠靈活打造本身特定的 Linux 實驗環境。
$ cat boards/versatilepb/Makefile
ARCH=arm
XARCH=$(ARCH)
CPU=arm926t
MEM=128M
LINUX=2.6.35
NETDEV=smc91c111
SERIAL=ttyAMA0
ROOTDEV=/dev/nfs
ORIIMG=arch/$(ARCH)/boot/zImage
CCPRE=arm-linux-gnueabi-
KIMAGE=$(PREBUILT_KERNEL)/$(XARCH)/$(BOARD)/$(LINUX)/zImage
ROOTFS=$(PREBUILT_ROOTFS)/$(XARCH)/$(CPU)/rootfs.cpio.gz
默認的內核與 Buildroot 信息對應爲 boards/BOARD/linux_${LINUX}_defconfig
和 boards/BOARD/buildroot_${CPU}_defconfig
,若是要添加本身的配置,請注意跟 boards/BOARD/Makefile
裏頭的 CPU 和 Linux 配置一致。
詳細的用法這裏就不羅嗦了,你們自行查看幫助。
$ make help