大概在 2008 年 5 月份開始閱讀趙博的《Linux內核徹底註釋》,並在當時 蘭大開源社區 的博客系統上連載閱讀筆記。html
每閱讀完一部分就會寫一份筆記,當時社區的反響仍是蠻大了,所以結識了不少技術方面的好友。linux
可是大概在 2009 年初,本身出去實習了。由於實習工做任務繁重,因此這部分閱讀工做未能繼續。另外,那個博客網站由於升級故障,致使數據被破壞,到現在都沒法訪問。ios
還好當時有作數據備份,2013 年左右在本身機器上從新把網站恢復出來,博客系統的數據總算找回來。而且已經陸續把部分重要文章整理到了現在的 泰曉科技 平臺上,但願更多的同窗受益。git
計劃逐步把當時的閱讀筆記整理出來並抽空閱讀剩下的部分。github
這裏先分享如何快速搭建一個 Linux 0.11 的實驗環境,這是閱讀這本書很是重要的準備工做,由於做爲實踐性很強的操做系統課程,實驗環境是必要條件,不然沒法深刻理解。docker
好了,若是想快速上手,能夠直接跳到 下一節。vim
趙老師書裏頭介紹的是在 Redhat 環境下用 Bochs 仿真系統來跑 Linux 0.11,經過實驗發現諸多問題,不斷摸索,閱讀計劃不斷推遲,由於蠻多時間浪費在實驗和調試環境的打造上了,分享一下這段歷史吧:目前已經成功地把linux-0.11移植到gcc 4.3.2,當時仍是作了一些工做的:微信
最終達成的效果是,能夠很是方便地在當時最新的 Ubuntu 系統上學習和調試 Linux 0.11,爲後續進一步研究 Linux 0.11 提供了最基礎的準備。網絡
廢話很少說了,從 2008 年到如今,本身在 Linux 方面的學習有了必定的進步,回頭再看看曾經奮鬥的歷程,稍微有點小小的感動。app
由於當時的博客以及檔案的下載地址都已經失效,因此不少網友還時長會發郵件過來諮詢。通常是直接把機器上備份的一些檔案郵寄給你們。
最近也稍有在 Google 上檢索 Linux 0.11,很是有幸看到有蠻多的 github 倉庫備份並改進了我當時上傳的代碼。很是精彩的例子有:
很是感謝你們的工做,上面均可以直接在當前的 Ubuntu 環境下工做,第一份甚至都已經支持 Mac OS X ;-)
不過也還有可稍微改進的地方:
把實驗須要的 rootfs 鏡像直接經過壓縮的方式上傳到倉庫
這樣就能夠造成一個完整的實驗環境,壓縮的好處是能夠加快網絡下載的速度;另外,爲了不額外的解壓工做,在 Makefile 裏頭,我這個腳本控固然是代勞了。
合併更多不曾發佈的內容
整個實驗環境目前只有 30 M,壓縮成 xz 只有 18 M,很是小。
先準備個電腦,XP 已死,建議用 Ubuntu 或者 OS X,這裏主要介紹 Ubuntu,OS X 看 README.md吧。
apt-get install vim cscope exuberant-ctags gcc gdb binutils qemu
git clone https://github.com/tinyclub/linux-0.11-lab.git
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)
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
打開一個控制檯,從硬盤啓動並進入 debug 模式:
make debug-hd
經過 gdb 調試:
gdb images/kernel.sym
(gdb) target remote :1234
(gdb) b main
(gdb) c
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
生成的圖片見最後。
是否是夠簡單便捷?
遇到任何問題歡迎參與回覆互動,或者關注咱們的新浪微博/微信公衆號互動:@泰曉科技。
也能夠直接到趙老師的站點上參與交流和討論:http://www.oldlinux.org/oldlinux/