操作系統實戰45講01:運行HelloOS【轉】

轉自:https://blog.csdn.net/chenchengwudi/article/details/116707122

目錄

1. HelloOS說明

1.1 HelloOS構成

1.2 HelloOS編譯

2. 部署HelloOS

2.1 設置grub進入引導菜單

2.2 增加HelloOS啓動選項

2.3 啓動HelloOS


1. HelloOS說明
1.1 HelloOS構成
HelloOS爲極客時間《操作系統實戰45講》中引入的示例OS,在L02中由如下文件構成,

 

 

 

各文件內容簡介如下,

① entry.asm

供grub調用的引導程序,用於設置CPU工作模式與工作環境,並調用C語言編寫的main函數


② main.c

實現main函數,此處用於打印字符串

 

 

③ vgastr.c / vgastr.h

實現字符串在顯示器上的輸出

 

 

 

說明1:寫入字符ASCII碼的目標地址爲0xb8000起始的內存,映射到該地址的,是顯卡字符模式下的顯存

說明2:每顯示一個字符將p_strdst + 2,是因爲顯存中每個字符對應2B,分別爲字符編碼和字符顯示屬性

 

 

 

參考資料:關於在顯卡文本模式下輸出字符,可參考下文的chapter 2

https://blog.csdn.net/chenchengwudi/article/details/116066133


④ hello.lds

鏈接器腳本,用於指導鏈接過程,設定不同程序段的佈局


⑤ Makefile

編譯腳本,用於指導編譯過程


1.2 HelloOS編譯
HelloOS編譯過程如下圖所示,

 

 

 


說明1:nasm彙編器

X86體系結構的彙編語言編譯器有多種,如MASM / FASM / TASM / AS86 / NASM等,此處使用的nasm彙編器有如下特點,

① 開源免費(有些彙編語言編譯器是需要付費的)

② 支持多種操作系統平臺

③ 允許彙編語言源程序中只包含指令(作爲對比,MASM編譯器需要在源程序中定義很多組件才能開始編程)

Ubuntu中默認未安裝nasm彙編器,可使用如下命令安裝,


sudo apt-get install nasm

說明2:鏈接器-map選項

在Makefile中,在鏈接生成HelloOS.elf時,使用了-map選項

 

 

 


該選項將使得在鏈接過程中,生成鏈接佈局文件,通過該文件可知HelloOS的內存映射佈局

編譯HelloOS時生成的map文件如下圖所示,

 

 

 


2. 部署HelloOS
說明:實驗環境爲VMware + Ubuntu 16.04

2.1 設置grub進入引導菜單
我們將HelloOS作爲一個操作系統啓動項供grub啓動,因此需要能夠在PC啓動時進入grub引導菜單,並選擇啓動HelloOS

爲了能夠每次啓動時進入grub引導菜單,需要進行如下設置

① 修改/etc/default/grub

 

 

 


a. 註釋掉HIDDEN所在的2行

b. 將GRUB_TIMEOUT設置爲30(使用默認值10其實也可以)

c. 將GRUB_CMDLINE_LINUX_DEFAUL設置爲text


參考資料:https://jingyan.baidu.com/article/6dad50755e35d1a123e36ecc.html


② 執行如下命令,更新grub配置


sudo update-grub

2.2 增加HelloOS啓動選項
修改/boot/grub/grub.cfg,增加HelloOS啓動項

 

 

 

 

說明1:set root屬性需要根據實際情況填寫,應填寫/boot目錄所在分區,可使用df命令查看

 

 

 


mount命令也可查看

 

 

 

說明2:關於insmod part_msdos & insmod ext2的設置

此處需要加載的模塊信息,可以參考系統已有的啓動項設置

 

 

 

此處參考的是實驗用虛擬機中默認啓動Ubuntu的menuentry,這樣可以確保依據不同實驗平臺設置一致

比如對於使用GPT分區表的實驗環境,需要加載insmod part_gpt模塊

 

2.3 啓動HelloOS
此時重啓虛擬機,便可見到HelloOS啓動項

 

 

 


選擇該啓動項,即可啓動HelloOS

 

 

 


說明:在grub的命令行模式可以查看硬盤分區信息

在進入grub引導菜單後,按下'c'鍵可以進入命令行模式

 

 

 

在grub的命令行模式中,使用ls命令可以查看硬盤分區信息

 

 

 

使用ls命令也可以驗證set root參數設置是否正確

 

 

 


————————————————
版權聲明:本文爲CSDN博主「麥兜的學習筆記」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chenchengwudi/article/details/116707122

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章