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

来源:https://www.cnblogs.com/thirty-eight-thousand/archive/2018/01/01/8168403.html
-Advertisement-
Play Games

實驗材料準備 1,下載實驗材料hit-oslab-linux-20110823.tar.gz(包含linux-0.11源碼,bochs模擬器等) 網址:http://www.ritchiehuang.cn/ 2,下載安裝gcc-3.4(編譯linux-0.11需要用到低版本gcc) 網址:old-r ...


實驗材料準備

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

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

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

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

下載內容:(統一下載存放在新建的gcc-3.4文件夾下,由於我的ubuntu是64位所以下載amd64)

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。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 運行完畢後刪除自己: public class DelSelf { /// <summary> /// 刪除自身,只刪除Application對象所取得的文件 /// </summary> /// <param name="args">刪除延時必須大於0,也不需太長,太小可能導致刪不掉!請根據電腦 ...
  • 一、課程介紹 本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的第四部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給大家進行學習,不斷的收集、整理和完善此系列課程!本高級系列課程適合人群如下: 1、有一定的NET開發基礎並對WebApi、Task、WebSo ...
  • 一、課程介紹 本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的第三部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給大家進行學習,不斷的收集、整理和完善此系列課程!本次高級系列課程適合人群如下: 1、有一定的NET開發基礎並對Socket技術有一定瞭解和認識 ...
  • 併發(英文Concurrency),其實是一個很泛的概念,字面意思就是“同時做多件事”,不過方式有所不同。在.NET的世界裡面,處理高併發大致有以下幾種方法: 1,非同步編程 非同步編程就是使用future模式(又稱promise)或者回調機制來實現(Non-blocking on waiting)... ...
  • Linux多進程CS伺服器簡單實現 server端 多進程實現多用戶連接,即每個用戶一個連接,這裡仍然用server將收到的字元串轉大寫後返回給客戶端。 代碼實現 測試結果 可以實現多個客戶端同時連接伺服器,伺服器每接受一個客戶就創建一個子進程,用戶端斷開後,進程由父進程自動回收子進程。 存在問題 ...
  • linux驅動 alsa模型: Linux ALSA音效卡驅動之一:ALSA架構簡介 Linux ALSA音效卡驅動之二:音效卡的創建 Linux ALSA音效卡驅動之三:PCM設備的創建 Linux ALSA音效卡驅動之四:Control設備的創建 Linux ALSA音效卡驅動之五:移動設備中的ALSA(A ...
  • Linux單用戶CS模型TCP通訊完全註釋手冊 server 描述 實現一個簡單的Linux單用戶CS通訊,客戶端發送一串字元串,伺服器將其轉換為大寫後返回。 server 代碼 運行效果 客戶端輸入:hello,world 服務端轉換為大寫後返回,客戶端收到伺服器發回的數據後進行列印:HELLO, ...
  • http://www.cnblogs.com/targethero/p/5080499.html https://www.cnblogs.com/xiaojiang1025/p/6131381.html interrupts 一個電腦系統中大量設備都是通過中斷請求CPU服務的,所以設備節點就需要在 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...