操作系統實戰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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM