Linux 內核實驗環境

Linux 內核實驗環境

可快速構建,支持 Docker, Qemu, Ubuntu, Mac OSX, Windows, Webhtml

由 Wu Zhangjin 建立於 2016/06/19linux

評論 打賞git

1 項目描述

該項目致力於快速構建一個基於 Qemu 的 Linux 內核開發環境。github

2 相關文章

3 五分鐘教程

3.1 準備

以 Ubuntu 和 Qemu 爲例。其餘 Linux 和 Mac OSX 系統請先安裝 Docker CE。Windows 系統,請先下載並安裝 Docker Toolboxvim

安裝完 docker 後若是想免 sudo 使用 linux lab,請務必把用戶加入到 docker 用戶組並重啓系統。網絡

 
  1. $ sudo usermod -aG docker $USER

因爲 docker 鏡像文件比較大,有 1G 左右,下載時請耐心等待。另外,爲了提升下載速度,建議經過配置 docker 更換鏡像庫爲本地區的,更換完記得重啓 docker 服務。架構

 
  1. $ grep registry-mirror /etc/default/docker
  2. DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn"
  3. $ service docker restart

若是 docker 默認的網絡環境跟本地的局域網環境地址衝突,請經過以下方式更新 docker 網絡環境,並重啓 docker 服務。ui

 
  1. $ grep bip /etc/default/docker
  2. DOCKER_OPTS="$DOCKER_OPTS --bip=10.66.0.10/16"
  3. $ service docker restart

若是上述改法不生效,請在相似 /lib/systemd/system/docker.service 這樣的文件中修改後再重啓 docker 服務。spa

 
  1. $ grep dockerd /lib/systemd/system/docker.service
  2. ExecStart=/usr/bin/dockerd -H fd:// --bip=10.66.0.10/16 --registry-mirror=https://docker.mirrors.ustc.edu.cn
  3. $ service docker restart

若是使用 Docker Toolbox,因爲安裝的默認 default 系統未提供桌面,因此須要先獲取該系統的外網地址,即 eth1 網口的 IP 地址,而後在外部系統訪問。

 
  1. $ ifconfig eth1 | grep 'inet addr' | tr -s ' ' | tr ':' ' ' | cut -d' ' -f4
  2. 192.168.99.100

若是是本身經過 Virtualbox 安裝的 Linux 系統,即便有桌面,也想在外部系統訪問時,則能夠經過設置 ‘Network -> Adapter2 -> Host-only Adapter’ 來添加一個 eth1 網口設備。

請務必注意,經過 Docker Toolbox 安裝的 default 系統中默認的 /root 目錄僅僅掛載在內存中,關閉系統後數據會丟失,請千萬不要用它來保存實驗數據。可使用另外的目錄來存放,好比 /mnt/sda1,它是在 Virtualbox 上外掛的一個虛擬磁盤鏡像文件,默認有 17.9 G,足夠存放常見的實驗環境。

3.2 工做目錄

再次提醒,在 Linux 或者 Mac 系統,能夠隨便在 ~/Downloads 或者 ~/Documents 下找一處工做目錄,而後進入,好比:

 
  1. $ cd ~/Documents

可是若是使用的是 Docker Toolbox 安裝的 default 系統,該系統默認的工做目錄爲 /root,它僅僅掛載在內存中,所以在關閉系統後全部數據會丟失,因此須要換一處上面提到的 /mnt/sda1,它是外掛的一個磁盤鏡像,關閉系統後數據會持續保存。

 
  1. $ cd /mnt/sda1

3.3 下載

 
  1. $ git clone https://github.com/tinyclub/cloud-lab.git
  2. $ cd cloud-lab && tools/docker/choose linux-lab

3.4 安裝

 
  1. $ tools/docker/run # 加載鏡像,拉起一個 Linux Lab 容器

3.5 快速嚐鮮

執行 tools/docker/vnc 後會打開一個 VNC 網頁,根據 console 提示輸入密碼登錄便可,以後打開桌面的 Linux Lab 控制檯並執行:

 
  1. $ make boot

默認會啓動一個 versatilepb 的 ARM 板子,要指定一塊開發板,能夠用:

 
  1. $ make list # 查看支持的列表
  2. $ make BOARD=malta # 這裏選擇一塊 MIPS 板子:malta
  3. $ make boot

3.6 下載更多源碼

 
  1. $ make core-source -j3 # 同時下載 linux-stable, qemu 和 buildroot

3.7 配置

 
  1. $ make root-defconfig # 配置根文件系統
  2. $ make kernel-checkout # 檢出某個特定的分支(請確保作該操做前本地改動有備份)
  3. $ make kernel-defconfig # 配置內核
  4.  
  5. $ make root-menuconfig # 手動配置根文件系統
  6. $ make kernel-menuconfig # 手動配置內核

3.8 編譯

 
  1. $ make root # 編譯根文件系統,稍微有點慢,須要下載帶 sysroot 的編譯器
  2. $ make kernel # 編譯內核,採用 Ubuntu 和 emdebian.org 提供的交叉編譯器

3.9 保存全部改動

 
  1. $ make save # 保存新的配置和新產生的鏡像
  2.  
  3. $ make kconfig-save # 保存到 boards/BOARD/
  4. $ make rconfig-save
  5.  
  6. $ make root-save # 保存到 prebuilt/
  7. $ make kernel-save

3.10 啓動新的根文件系統和內核

須要打開 boards/BOARD/Makefile 屏蔽已經編譯的 KIMAGROOTFS,此時會啓動 output/ 目錄下剛編譯的 rootfs 和內核:

 
  1. $ vim boards/versatilepb/Makefile
  2. #KIMAGE=$(PREBUILT_KERNEL)/$(XARCH)/$(BOARD)/$(LINUX)/zImage
  3. #ROOTFS=$(PREBUILT_ROOTFS)/$(XARCH)/$(CPU)/rootfs.cpio.gz
  4. $ make boot

3.11 啓動串口

 
  1. $ make boot G=0 # 使用組合按鍵:`CTL+a x` 退出,或者另開控制檯執行:`pkill qemu`

3.12 選擇 Rootfs 設備

 
  1. $ make boot ROOTDEV=/dev/nfs
  2. $ make boot ROOTDEV=/dev/ram

3.13 擴展

經過添加或者修改 boards/BOARD/Makefile,能夠靈活配置開發板、內核版本以及 BuildRoot 等信息。經過它能夠靈活打造本身特定的 Linux 實驗環境。

 
  1. $ cat boards/versatilepb/Makefile
  2. ARCH=arm
  3. XARCH=$(ARCH)
  4. CPU=arm926t
  5. MEM=128M
  6. LINUX=2.6.35
  7. NETDEV=smc91c111
  8. SERIAL=ttyAMA0
  9. ROOTDEV=/dev/nfs
  10. ORIIMG=arch/$(ARCH)/boot/zImage
  11. CCPRE=arm-linux-gnueabi-
  12. KIMAGE=$(PREBUILT_KERNEL)/$(XARCH)/$(BOARD)/$(LINUX)/zImage
  13. ROOTFS=$(PREBUILT_ROOTFS)/$(XARCH)/$(CPU)/rootfs.cpio.gz

默認的內核與 Buildroot 信息對應爲 boards/BOARD/linux_${LINUX}_defconfigboards/BOARD/buildroot_${CPU}_defconfig,若是要添加本身的配置,請注意跟 boards/BOARD/Makefile 裏頭的 CPU 和 Linux 配置一致。

3.14 更多用法

詳細的用法這裏就不羅嗦了,你們自行查看幫助。

 
  1. $ make help

3.15 實驗效果圖

Linux Lab Demo

相關文章
相關標籤/搜索