操做系統是什麼-熟悉實驗環境

實驗材料準備python

1,下載實驗材料hit-oslab-linux-20110823.tar.gz(包含linux-0.11源碼,bochs模擬器等)linux

網址:http://www.ritchiehuang.cn/c++

2,下載安裝gcc-3.4(編譯linux-0.11須要用到低版本gcc)shell

網址:old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/ubuntu

下載內容:(統一下載存放在新建的gcc-3.4文件夾下,因爲個人ubuntu是64位因此下載amd64)vim

1 cpp-3.4_3.4.6-6ubuntu3_amd64.deb
2 g++-3.4_3.4.6-6ubuntu3_amd64.deb
3 gcc-3.4_3.4.6-6ubuntu3_amd64.deb
4 gcc-3.4-base_3.4.6-6ubuntu3_amd64.deb
5 libstdc++6-dev_3.4.6-6ubuntu3_amd64.deb

實驗相關簡述緩存

1,x86模擬器器Bochs架構

Bochs是一個免費且開放源代碼的IA-32(x86)架構PC機模擬器。在它模擬出的環境中能夠運行Linux、DOS和各類版本的Windows等多種操做系統。而Bochs自己具備很高的移植性,能夠運行在多種軟硬件平臺之上。若是您想擁抱自由的Linux,那麼Bochs幾乎是您的不二選擇。若是您想繼續把本身綁定在Windows平臺上,那麼除了Bochs,您還能夠選用VMware或者Microsoft Virtual PC。它們是最著名虛擬機軟件,並且均可以避免費使用。由於Bochs的是模擬器,其原理決定了它的運行效率會低於虛擬機。可是,Bochs有虛擬機無可比擬的調試操做系統的能力.編輯器

2,實驗環境的工做模式工具

hit-oslab實驗環境簡稱oslab,是一個壓縮文件(hit-oslab-linux-20110823.tar.gz),能夠將這個文件拷貝到本身的實驗工做目錄下,用tar zxvf hit-oslab-linux-20110823.tar.gz命令解壓展開便可工做。oslab工做在一個宿主操做系統之上,咱們使用的Linux,在宿主操做系統之上完成對Linux 0.11的開發、修改和編譯以後,在linux-0.11目錄下會生產一個名爲Image的文件,它就是編譯以後的目標文件。該文件內已經包含引導和全部內核的二進制代碼。若是拿來一張軟盤,從它的0扇區開始,逐字節寫入Image文件的內容,就能夠用這張軟盤啓動一臺真正的計算機,並進入Linux 0.11內核。oslab採用bochs模擬器加載這個Image文件,模擬執行Linux 0.11,這樣省卻了從新啓動計算機的麻煩。

bochs目錄下是與bochs相關的執行文件、數據文件和配置文件。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文件內虛擬的文件系統。

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下編譯,而後覆蓋現有的二進制內核

實驗環境搭建(ubuntu-14.04.1-desktop-amd64)

1,在~(用戶Home文件夾)下建立oslab文件夾,將hit-oslab-linux-20110823.tar.gz解壓到oslab下

mkdir oslab
cd oslab
tar -zxvf hit-oslab-linux-20110823.tar.gz

2,gcc-3.4安裝

cd gcc-3.4
sudo apt-get --purge remove gcc
sudo chmod 777 *
sudo dpkg -i *.deb

3,as86,ld86安裝(用於編譯和連接linux/boot下的bootsect.s和setup.s,它們採用as86彙編語法;而linux-0.11下的其餘彙編語言文件採用gas的語法AT&T)

搜索包含as86,ld86的包:

apt-cache search as86 ld86

執行結果以下:

bin86 - 16-bit x86 assembler and loader

安裝bin86:

sudo apt-get install bin86

4,通常環境設置

64位系統須要安裝32位兼容庫

sudo apt-get install libc6-dev-i386 

C語言編譯環境

sudo apt-get install build-essential

安裝IDE

sudo apt-get install vim cscope exuberant-ctags

編譯內核

cd ~/oslab/oslab/linux-0.11
make

編譯中斷,輸出錯誤信息:

In file included from /usr/include/linux/fs.h:10,
                 from tools/build.c:28:
/usr/include/linux/ioctl.h:4:23: asm/ioctl.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:4:23: asm/types.h: No such file or directory
In file included from /usr/include/linux/types.h:8,
                 from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/posix_types.h:35:29: asm/posix_types.h: No such file or directory
In file included from /usr/include/linux/fs.h:11,
                 from tools/build.c:28:
/usr/include/linux/types.h:27: error: syntax error before "__le16"
/usr/include/linux/types.h:28: error: syntax error before "__be16"
/usr/include/linux/types.h:29: error: syntax error before "__le32"
/usr/include/linux/types.h:30: error: syntax error before "__be32"
/usr/include/linux/types.h:31: error: syntax error before "__le64"
/usr/include/linux/types.h:32: error: syntax error before "__be64"
/usr/include/linux/types.h:34: error: syntax error before "__sum16"
/usr/include/linux/types.h:35: error: syntax error before "__wsum"
In file included from tools/build.c:28:
/usr/include/linux/fs.h:43: error: syntax error before "__u64"
/usr/include/linux/fs.h:45: error: syntax error before "minlen"
make: *** [tools/build] Error 1

google搜索得知是由於64位linux的asm目錄爲:

/usr/include/x86_64-linux-gnu/asm

make找不到文件從而致使編譯中斷

解決方法(創建連接):

sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm

運行

運行編譯好的內核,在oslab目錄下:

./run

出現錯誤:

./bochs/bochs-gdb: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory

打印動態連接配置:

ldconfig -p | grep libXpm.so.4

libXpm.so.4的連接信息:

libXpm.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libXpm.so.4

咱們須要的是32位庫.搜索庫對應的包名稱:

apt-file search libXpm.so.4

打印結果:

libxpm4: /usr/lib/x86_64-linux-gnu/libXpm.so.4
libxpm4: /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0

獲得其對應的包名爲libxpm4,安裝對應的32位庫:

sudo apt-get install libxpm4:i386

 基本操做及注意事項

彙編級調試在oslab目錄下執行命令

./dpg-asm

C語言級調試在oslab目錄下,打開第一個終端窗口執行命令

./dbg-c

打開第二個終端窗口執行命令

./rungdb

Ubuntu和Linux0.11之間的文件交換

oslab下的hdc-0.11-new.img是0.11內核啓動後的根文件系統鏡像文件,至關於在bochs虛擬機裏裝載的硬盤。在Ubuntu上訪問其內容的方法是

sudo ./mount-hdc

以後,hdc目錄下就是和0.11內核如出一轍的文件系統了,能夠讀寫任何文件(可能有些文件要用sudo才能訪問)。讀寫完畢,不要忘了卸載這個文件系統:

sudo umount hdc

通過sudo ./mount-hdc這樣處理之後,咱們能夠在Ubuntu的hdc目錄下建立一個xxx.c文件,而後利用Ubuntu上的編輯工具(如gedit等)實現對xxx.c文件的編輯工做,在編輯保存之後。執行sudo umount hdc後,再進入Linux 0.11(即run啓動bochs之後)就會看到這個xxx.c,這樣就避免了在Linux 0.11上進行編輯xxx.c的麻煩,由於Linux 0.11做爲一個很小的操做系統,其上的編輯工具只有vi,使用起來很是不便。

另外在Linux 0.11上產生的文件,能夠按這種方式」拿到「Ubuntu下用python程序進行處理,固然這個python程序在Linux 0.11上顯然是很差使的,由於Linux 0.11上搭建不了python解釋環境。

注意1:不要在0.11內核運行的時候mount鏡像文件,不然可能會損壞文件系統。同理,也不要在已經mount的時候運行0.11內核。

注意2:在關閉Bochs以前,須要先在0.11的命令行運行「sync」,確保全部緩存數據都存盤後,再關閉Bochs。

相關文章
相關標籤/搜索