bochs 是乙個免費且開放源**的 ia-32(x86)架構 pc 機模擬器。在它模擬出的環境中可以執行 linux、dos 和各種版本的 windows 等多種作業系統。而 bochs 本身具有很高的移植性,可以執行在多種軟硬體平台之上,這也是我們選擇它做為本書的指定模擬器的主要原因。
如果您想擁抱自由的 linux,那麼 bochs 幾乎是您的不二選擇。如果您想繼續把自己繫結在 windows 平台上,那麼除了 bochs,您還可以選用 vmware 或者 microsoft virtual pc。它們是最著名虛擬機器軟體,而且都可以免費使用。因為 bochs 的是模擬器,其原理決定了它的執行效率會低於虛擬機器。
預設環境:預設的環境,預設即預設的意思gcc 是和 linux 一起成長起來的編譯器。linux 最初的版本就是由 gcc 編譯的。現在 gcc 也是在自由軟體領域應用最廣泛的編譯器。
gdb 偵錯程式是 gcc 編譯器的兄弟。做為自由軟體領域幾乎是唯一的偵錯程式,它秉承了 unix 類作業系統的一貫風格,採用純命令列操作,有點兒類似 dos 下的 debug。
tar -zxvf
x : 從 tar 包中把檔案提取出來1.image 檔案z : 表示 tar 包是被 gzip 壓縮過的,所以解壓時需要用 gunzip 解壓
v :顯示詳細資訊
f ***.tar.gz : 指定被處理的檔案是 ***.tar.gz
oslab 工作在乙個宿主作業系統之上,我們使用的 linux,在宿主作業系統之上完成對 linux 0.11 的開發、修改和編譯之後,在 linux-0.11 目錄下會生產乙個名為 image 的檔案,它就是編譯之後的目標檔案。
該檔案內已經包含引導和所有核心的二進位制**。如果拿來一張軟盤,從它的 0 扇區開始,逐字節寫入 image 檔案的內容,就可以用這張軟盤啟動一台真正的計算機,並進入 linux 0.11 核心。
oslab 採用 bochs 模擬器載入這個 image 檔案,模擬執行 linux 0.11,這樣省卻了重新啟動計算機的麻煩。
2.bochs 目錄
bochs 目錄下是與 bochs 相關的執行檔案、資料檔案和配置檔案。
3.run 指令碼
run 是執行 bochs 的指令碼命令。
執行後 bochs 會自動在它的虛擬軟碟機 a 和虛擬硬碟上各掛載乙個映象檔案,軟碟機上掛載是 linux-0.11/image,硬碟上掛載的是 hdc-0.11.img。
因為 bochs 配置檔案中的設定是從軟碟機 a 啟動,所以 linux 0.11 會被自動載入。
而 linux 0.11 會驅動硬碟,並 mount 硬碟上的檔案系統,也就是將 hdc-0.11.img 內映象的檔案系統掛載到 0.11 系統內的根目錄 —— /。在 0.11 下訪問檔案系統,訪問的就是 hdc-0.11.img 檔案內虛擬的檔案系統。
4.hdc-0.11.img 檔案
hdc-0.11.img 檔案的格式是 minix 檔案系統的映象。
linux 所有版本都支援這種格式的檔案系統,所以可以直接在宿主 linux 上通過 mount 命令訪問此檔案內的檔案,達到宿主系統和 bochs 內執行的 linux 0.11 之間交換檔案的效果。
windows 下目前沒有(或者是還沒發現)直接訪問 minix 檔案系統的辦法,所以要借助於 fdb.img,這是乙個 1.44m 軟盤的映象檔案,內部是 fat12 檔案系統。將它掛載到 bochs 的軟碟機 b,就可以在 0.11 中訪問它。而通過 filedisk 或者 winimage,可以在 windows 下訪問它內部的檔案。
hdc-0.11.img 內包含有:
bash shell;
一些基本的 linux 命令、工具,比如 cp、rm、mv、tar;
vi 編輯器;
gcc 1.4 編譯器,可用來編譯標準 c 程式;
as86 和 ld86;
linux 0.11 的源**,可在 0.11 下編譯,然後覆蓋現有的二進位制核心。
pwd 命令確認當前目錄,首先要進入 linux-0.11 目錄,然後執行 make 命令:用 ls -l 列目錄內容。
「編譯核心」 比 「編寫核心」 要簡單得多。
make all 因為 all 是最常用的引數,所以可以省略,只用 make效果一樣。
在多處理器的系統上,可以用 -j 引數進行並行編譯,加快速度。make 命令會顯示很多很多的資訊,你可以盡量去看懂,也可以裝作沒看見。只要最後幾行中沒有 「error」 就說明編譯成功。例如雙 cpu 的系統可以:
make -j 2
make 命令會自動跳過未被修改的檔案,鏈結時直接使用上次編譯生成的目標檔案,從而節約編譯時間。但如果重新編譯後,你的修改貌似沒有生效,可以試試先make clean ,再 make all
或者一行命令:make clean && make all
。make clean 是刪除上一次編譯生成的所有中間檔案和目標檔案,確保是在全新的狀態下編譯整個工程。
在 bochs 中執行最新編譯好的核心很簡單,在 oslab 目錄下執行:
執行 run 指令碼
.
/run
如果出現 bochs 的視窗,裡面顯示 linux 的引導過程,最後停止在 [/usr/root/]#,表示執行成功
核心除錯分為兩種模式:彙編級除錯和 c 語言級除錯。
(1)彙編級除錯
彙編級除錯需要執行命令:
確認在 oslab 目錄下
$` cd ~/oslab/
執行指令碼前確定已經關閉剛剛執行的 bochs
.
/dbg-asm
彙編級除錯的啟動之後 bochs 是黑屏,這是正常的。
接下來講解一下 ubuntu 和 linux 0.11 之間的檔案交換如何啟動。
開始設定檔案交換之前,務必關閉所有的 bochs 程序。
oslab 下的 hdc-0.11-new.img 是 0.11 核心啟動後的根檔案系統映象檔案,相當於在 bochs 虛擬機器裡裝載的硬碟。在 ubuntu 上訪問其內容的方法是:
cd ~/oslab/
mount命令是經常會使用到的命令它用於掛載linux系統外的檔案
sudo命令以系統管理者的身份執行指令,
也就是說,經由 sudo 所執行的指令就好像是 root 親自執行。
sudo .
/mount
-hdc
之後,hdc 目錄下就是和 0.11 核心一模一樣的檔案系統了,可以讀寫任何檔案(可能有些檔案要用 sudo 才能訪問)。
進入掛載到 ubuntu 上的目錄
cd ~/oslab/hdc
讀寫完畢,不要忘了解除安裝這個檔案系統:
cd ~/oslab/
sudo umount hdc
經過 sudo ./mount-hdc 這樣處理以後,我們可以在 ubuntu 的 hdc 目錄下建立乙個 ***.c 檔案,然後利用 ubuntu 上的編輯工具(如 gedit 等)實現對 ***.c 檔案的編輯工作,在編輯儲存以後。
執行 sudo umount hdc 後,再進入 linux 0.11(即 run 啟動 bochs 以後)就會看到這個 ***.c,這樣就避免了在 linux 0.11 上進行編輯 ***.c 的麻煩,因為 linux 0.11 作為乙個很小的作業系統,其上的編輯工具只有 vi,使用起來非常不便。
注意 1:不要在 0.11 核心執行的時候 mount 映象檔案,否則可能會損壞檔案系統。同理,也不要在已經 mount 的時候執行 0.11 核心。
注意 2:在關閉 bochs 之前,需要先在 0.11 的命令列執行 「sync」,確保所有快取資料都存檔後,再關閉 bochs。
linux sync命令用於資料同步,會將存於 buffer 中的資料強制寫入硬碟中 sync命令是在關閉linux系統時使用的。
實驗0 了解和熟悉作業系統 作業系統
1.實驗目的 1 掌握作業系統的定義和概念 2 了解各類作業系統的發展歷史 2 實驗要求 使用網路搜尋了解各類計算機作業系統的知識,並整理成一篇文件。了解和掌握內容包括 計算機作業系統的定義和概念 作業系統的分類 常用幾種作業系統的優缺點分析 linux,windows ios和android屬於什...
實驗0 了解和熟悉作業系統
1.實驗目的 1 掌握作業系統的定義和概念 2 了解各類作業系統的發展歷史 2 實驗要求 使用網路搜尋了解各類計算機作業系統的知識,並整理成一篇文件。了解和掌握內容包括 計算機作業系統的定義和概念 答 計算機作業系統是管理系統資源,控制程式執行,改善人機介面,提供各種服務,並合理組織計算機工作流程和...
實驗0 了解和熟悉作業系統
一 計算機作業系統的定義和概念 資料摘取 作業系統 operating system,簡稱os 是電子計算機系統中負責支撐應用程式執行環境以及使用者操作環境的系統軟體,同時也是計算機系統的核心與基石。它的職責常包括對硬體的直接監管 對各種計算資源 如記憶體 處理器時間等 的管理 以及提供諸如作業管理...