五分鐘內搭建 Linux 0.11 的實驗環境

1 故事

大概在 2008 年 5 月份開始閱讀趙博的《Linux內核徹底註釋》,並在當時 蘭大開源社區 的博客系統上連載閱讀筆記。html

每閱讀完一部分就會寫一份筆記,當時社區的反響仍是蠻大了,所以結識了不少技術方面的好友。linux

可是大概在 2009 年初,本身出去實習了。由於實習工做任務繁重,因此這部分閱讀工做未能繼續。另外,那個博客網站由於升級故障,致使數據被破壞,到現在都沒法訪問。ios

還好當時有作數據備份,2013 年左右在本身機器上從新把網站恢復出來,博客系統的數據總算找回來。而且已經陸續把部分重要文章整理到了現在的 泰曉科技 平臺上,但願更多的同窗受益。git

計劃逐步把當時的閱讀筆記整理出來並抽空閱讀剩下的部分。github

這裏先分享如何快速搭建一個 Linux 0.11 的實驗環境,這是閱讀這本書很是重要的準備工做,由於做爲實踐性很強的操做系統課程,實驗環境是必要條件,不然沒法深刻理解。docker

2 更多細節

好了,若是想快速上手,能夠直接跳到 下一節vim

2.1 往事回首

趙老師書裏頭介紹的是在 Redhat 環境下用 Bochs 仿真系統來跑 Linux 0.11,經過實驗發現諸多問題,不斷摸索,閱讀計劃不斷推遲,由於蠻多時間浪費在實驗和調試環境的打造上了,分享一下這段歷史吧:目前已經成功地把linux-0.11移植到gcc 4.3.2,當時仍是作了一些工做的:微信

  • 能夠在 32 位和 64 位的 Linux/x86 系統上編譯
  • 支持最新的 Gcc 4.3.2,並同時支持 Gcc 3.4, 4.1, 4.2, 4.3,也就是說無論你機器上安裝的是這裏頭的哪一個版本,該代碼均可以正常編譯
  • 在最新的 Ubuntu 和 Debian 系統上測試經過
  • 在 bochs 2.3.7 和 qemu 0.9.1 上正常啓動
  • 其中的 boot/bootsect.s 和 boot/setup.s 已經用 AT&T 語法重寫,並把原來的版本剔除,所以無須再安裝 bin86
  • Makefile 文件被調整和增長了一些內容,更方便用戶調整編譯選項和移植,並更方便地進行實驗
  • 用 Shell 重寫了 tools/build.c,更容易理解

最終達成的效果是,能夠很是方便地在當時最新的 Ubuntu 系統上學習和調試 Linux 0.11,爲後續進一步研究 Linux 0.11 提供了最基礎的準備。網絡

2.2 八年以後

廢話很少說了,從 2008 年到如今,本身在 Linux 方面的學習有了必定的進步,回頭再看看曾經奮鬥的歷程,稍微有點小小的感動。app

由於當時的博客以及檔案的下載地址都已經失效,因此不少網友還時長會發郵件過來諮詢。通常是直接把機器上備份的一些檔案郵寄給你們。

最近也稍有在 Google 上檢索 Linux 0.11,很是有幸看到有蠻多的 github 倉庫備份並改進了我當時上傳的代碼。很是精彩的例子有:

  • https://github.com/yuanxinyu/Linux-0.11
  • https://github.com/run/linux0.11

很是感謝你們的工做,上面均可以直接在當前的 Ubuntu 環境下工做,第一份甚至都已經支持 Mac OS X ;-)

不過也還有可稍微改進的地方:

  • 把實驗須要的 rootfs 鏡像直接經過壓縮的方式上傳到倉庫

    這樣就能夠造成一個完整的實驗環境,壓縮的好處是能夠加快網絡下載的速度;另外,爲了不額外的解壓工做,在 Makefile 裏頭,我這個腳本控固然是代勞了。

  • 合併更多不曾發佈的內容

    • 把 calltree 二進制文件直接打包進去,這樣就能夠直接用了(注:calltree-2.3 源代碼也已經沒法在最新的 Ubuntu 系統編譯了!)
    • 添加了腳本 tools/tree2dotx,能夠把 calltree 的輸出轉換爲圖片
    • 把 floppy 和 ramdisk 的包也打包進去,方便閱讀相關代碼,不過惋惜的是,發現從 floppy 啓動一直死循環,後面再解決吧,應該是代碼問題
    • 其餘微小調整

整個實驗環境目前只有 30 M,壓縮成 xz 只有 18 M,很是小。

3 五分鐘教程

3.1 預備

先準備個電腦,XP 已死,建議用 Ubuntu 或者 OS X,這裏主要介紹 Ubuntu,OS X 看 README.md吧。

  1. apt-get install vim cscope exuberant-ctags gcc gdb binutils qemu

3.2 下載

  1. git clone https://github.com/tinyclub/linux-0.11-lab.git

3.3 編譯

  1. cd linux-0.11-lab && make

這個版本在Ubuntu 16.04.2 LTS gcc 版本 7.1.0 內核4.10.0-28下能夠編譯經過.亦能夠到這裏下載

http://cloud.189.cn/t/zeeYbqr6f6Rn(訪問碼:3635)

3.4 從硬盤啓動

  1. make start-hd

也可用bochs啓動:

 cp rootfs/hdc-0.11.img hdc-0.11.img 

bochrc

###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
 megs: 32

# filename of ROM images
 romimage: file=/opt/local/share/bochs/BIOS-bochs-latest #/opt/share/bochs/BIOS-bochs-latest
 vgaromimage: file=/opt/local/share/bochs/VGABIOS-lgpl-latest #/usr/share/vgabios/vgabios.bin


floppya: 1_44="Image", status=inserted
ata0-master: type=disk, path="hdc-0.11.img", mode=flat, cylinders=410, heads=16, spt=38
boot: c
log: bochsout.txt

# disable the mouse
 mouse: enabled=0

# enable key mapping, using US layout as default.
# keyboard_mapping: enabled=1, map=/opt/local/share/bochs/keymaps/x11-pc-us.map
  keyboard: keymap=/opt/local/share/bochs/keymaps/x11-pc-us.map

3.5 調試

打開一個控制檯,從硬盤啓動並進入 debug 模式:

  1. make debug-hd

經過 gdb 調試:

  1. gdb images/kernel.sym
  2. (gdb) target remote :1234
  3. (gdb) b main
  4. (gdb) c

3.6 查閱文檔

README.md

3.7 查看幫助

make help
> Usage:
 make --generate a kernel floppy Image with a fs on hda1
 make start -- boot the kernel in qemu
 make start-fd -- boot the kernel with fs in floppy
 make start-hd -- boot the kernel with fs in hard disk
 make debug -- debug the kernel in qemu & gdb at port 1234
 make debug-fd -- debug the kernel with fs in floppy
 make debug-hd -- debug the kernel with fs in hard disk
 make disk  -- generate a kernel Image & copy it to floppy
 make cscope -- genereate the cscope index databases
 make tags -- generate the tag file
 make cg -- generate callgraph of the system architecture
 make clean -- clean the object files
 make distclean -- only keep the source code files

3.8 生成函數調用關係圖
 

make cg
ls calltree/linux-0.11.jpg

生成的圖片見最後。

4 後話

是否是夠簡單便捷?

遇到任何問題歡迎參與回覆互動,或者關注咱們的新浪微博/微信公衆號互動:@泰曉科技。

也能夠直接到趙老師的站點上參與交流和討論:http://www.oldlinux.org/oldlinux/

Linux 0.11 Calltree

Read More:

相關文章
相關標籤/搜索