最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

操作系統(tǒng)實戰(zhàn)45講--最全HellOS實驗指南

2021-05-16 18:09 作者:GRNovmbrain  | 我要投稿

此篇專欄詳細記錄《極客時間-操作系統(tǒng)實戰(zhàn)45講》的第一個實驗HelloOS的實驗的全部過程。

筆者同時用虛擬機和物理機完成了實驗,基本將所有可能到的坑都踩了一遍,在此詳細記錄下所有的實驗步驟與要點供大家參考。

大家跟著每一步實現(xiàn),保證一定能夠?qū)嶒炌瓿?。先貼一張實驗成功圖。

專欄課程鏈接:https://time.geekbang.org/column/intro/411

一、初始環(huán)境配置

1.一個配置好的Linux系統(tǒng),筆者使用的是?Ubuntu 20.04.2.0 LTS,虛擬機使用的是Oracle VM

VirtualBox。在物理機上安裝了雙系統(tǒng)(Windows、Ubuntu),同時也使用虛擬機在Windows上安裝了Ubuntu。

對比在物理機和在虛擬機上完成實驗的兩種方式,我這里推薦在虛擬機上完成,可以少踩很多的坑。虛擬機上的實驗步驟基本和老師在文章中寫的一樣,而在物理機上就有很多出入,有很多地方因為個體電腦差異,需要進行一些修改,接下來對這兩種方式我都會進行講解。

具體虛擬機安裝與配置的問題,請大家參考網(wǎng)上的資料完成,我就不在這里進行贅述。以下我附上個人在配置時參考的一篇文章。

http://www.1zlab.com/wiki/python-opencv-tutorial/virtualbox-ubuntu-vm-install/

2.安裝nasm

sudo apt-get install nasm

3.安裝gcc,以下這個命令會一次性安裝包括gcc在內(nèi)的一系列編譯軟件

sudo apt install build-essential

以上nasm和gcc的安裝都是為之后make完成編譯和鏈接工作做準備

二、文件準備

1.將老師放在gitee上的代碼拷貝下來,網(wǎng)頁鏈接如下?

https://gitee.com/lmos/cosmos/tree/master/lesson02/HelloOS

2.打開terminal,使用"cd"命令進入拷貝下來的文件夾(或者我一般是進入對應文件夾后右鍵打開terminal),運行以下命令完成編譯鏈接得到HelloOS.bin

make -f Makefile

3.將生成的HelloOS.bin文件拷貝到/boot文件夾下。

其實不是一定強制要HellOS.bin放在/boot文件夾下才能夠完成啟動,這只是遵循慣例而已。將HellOS放在其他文件夾下,然后之后在grub.cfg文件中設置相應的HellOS.bin的地址即可。

拷貝可以使用"mv"命令,我以自己的情況舉例。在HelloOS.bin所在的文件夾打開terminal,使用以下命令進行文件移動

sudo mv HelloOS.bin /boot

4. 修改/etc/default/grub文件,將GRUB_TIMEOUT修改為30,設置進入默認啟動項的等候時間,默認值為10秒,我們將其延長。使用一下命令打開并編輯grub文件

sudo gedit /etc/default/grub

編輯完成后,使用以下命令更新文件設置

sudo update-grub

tips:sudo update-grub會將/boot/grub/grub.cfg文件給初始化,如果之前已經(jīng)添加過menuentry的同學需要重新添加。

menuentry 'HelloOS' {

.................

}

5. 在/boot/grub/grub.cfg中添加menuentry,這一步有非常多的坑,老師在文章中的講解比較簡單,但是在具體實現(xiàn)的時候有很多細節(jié)要注意。首先打開grub.cfg這個文件,使用以下命令


sudo gedit /boot/grub/grub.cfg

然后將下面這段專欄中已經(jīng)給出的配置粘貼到grub.cfg文件中,并保存

menuentry 'HelloOS' {

? ? ?insmod part_msdos #GRUB加載分區(qū)模塊識別分區(qū)

? ? ?insmod ext2 #GRUB加載ext文件系統(tǒng)模塊識別ext文件系統(tǒng)

? ? ?set root='hd0,msdos5' #注意boot目錄掛載的分區(qū),這是我機器上的情況

? ? ?multiboot2 /boot/HelloOS.bin #GRUB以multiboot2協(xié)議加載HelloOS.bin

? ? ?boot #GRUB啟動HelloOS.bin

}


5.1)設置 multiboot2?

multiboo2 '***' 填寫的HelloOS.bin的路徑,下面以HelloOS.bin放在/boot文件夾下進行舉例???

首先確認自己的/boot文件夾是獨立分區(qū)單獨掛載還是算在根分區(qū)的一部分(一般是配置系統(tǒng)時自己進行分區(qū)選擇的)。這一步設置不對,會在最后進入HelloOS系統(tǒng)時產(chǎn)生 "HelloOS.bin not found"這個錯誤

在命令行使用以下命令進行查看分區(qū)情況,我將這兩種情況下命令運行的結果都展示出來,大家對號入座即可。

df -h

/boot獨立分區(qū),單獨掛載情況

如果是單獨掛載的情況,multiboot2設置如下

multiboot2 /HelloOS.bin #GRUB以multiboot2協(xié)議加載HelloOS.bin

/boot是根分區(qū)一部分

如果是/boot是根分區(qū)一部分,multiboot2設置如下

multiboot2 /boot/HelloOS.bin #GRUB以multiboot2協(xié)議加載HelloOS.bin

總結一下,如果/boot是單獨分區(qū)的,就可以去掉/boot。

5.2)設置insmod和set root=' '

set root=‘***’里面填寫的是存放HelloOS.bin的文件夾,在?三、文件準備 2.?中其實說過,HelloOS.bin文件放在哪里都是可以的,不一定要放在/boot文件夾下。而set root=''中填寫的就是存放HelloOS.bin的文件夾所在的磁盤分區(qū)。

在專欄的文章中,老師沒有詳細解釋set root=''的具體設置方法,而是給了一個例子,這里我給大家展示最完備的方法。因為我的HelloOS.bin存放在/boot下,所以我們接下來尋找/boot文件夾所在的磁盤分區(qū)。同時又分成/boot單獨分區(qū)與/boot在根目錄下兩種情況進行講解

接下來我們要進入grub的命令行模式找尋HelloOS.bin所在文件夾的磁盤分區(qū)。重啟虛擬機,在重啟時長按esc鍵調(diào)出grub引導界面(如果是物理機的請自行搞定調(diào)出grub引導界面,能用在物理機上裝linux的伙伴肯定能搞定這點小事)

然后按c鍵進入grub命令行交互模式,并輸入ls+回車,列出所有磁盤分區(qū)。下面附上一篇文章鏈接介紹msdos與gpt這兩種分區(qū)的區(qū)別

https://blog.csdn.net/free050463/article/details/81876521

接下來我們分情況討論,大家自己對號入座 ,靈活修改

5.2.1)虛擬機 + /boot文件夾屬于根目錄一部分,沒有單獨分區(qū)


在列出磁盤分區(qū)后,我們遍歷所有磁盤分區(qū)里,將分區(qū)內(nèi)文件全部列出來,直到找到看到HelloOS.bin文件為止。同時因為/boot文件夾沒有單獨分區(qū),那么具體的命令如下

ls (hdx,msdosx)/boot/

那么我們就找到了HelloOS.bin所在的文件夾/boot的磁盤分區(qū),也就確定了set root=''里面的參數(shù)為如下

set root="hd0,msdos5"

這是最簡單的情況,我猜也是老師實驗環(huán)境的情況。

然后我們發(fā)現(xiàn)磁盤采用msdos分區(qū)方式,所以insmod part_msdos?這個配置也就不需要修改了。下面給出完整設置

menuentry 'HelloOS' {

? ? ?insmod part_msdos #GRUB加載分區(qū)模塊識別分區(qū)

? ? ?insmod ext2 #GRUB加載ext文件系統(tǒng)模塊識別ext文件系統(tǒng)

? ? ?set root='hd0,msdos5' #注意boot目錄掛載的分區(qū),這是我機器上的情況

? ? ?multiboot2 /boot/HelloOS.bin #GRUB以multiboot2協(xié)議加載HelloOS.bin

? ? ?boot #GRUB啟動HelloOS.bin

}

5.2.2)物理機 + /boot文件夾單獨分區(qū)

現(xiàn)在我們就來到了一個比較坑的情況。我先附上grub命令行截圖

? ? ?

通過觀察可以發(fā)現(xiàn),我的物理機磁盤使用gpt分區(qū)方式,所以首先需要做如下修改?

insmod part_gpt

然后,因為我的物理機上/boot是單獨分區(qū)的,所以在進行查找時命令不需要加上/boot,具體命令如下

ls (hdx,gptx)/

我們發(fā)現(xiàn)HelloOS.bin在(hd0,gpt5)下面,所以現(xiàn)在可以設置set root了

下面我附上完整設置

menuentry 'HelloOS' {

? ? ?insmod part_gpt?#GRUB加載分區(qū)模塊識別分區(qū)

? ? ?insmod ext2 #GRUB加載ext文件系統(tǒng)模塊識別ext文件系統(tǒng)

? ? ?set root='hd0,gpt5' #注意boot目錄掛載的分區(qū),這是我機器上的情況

? ? ?multiboot2 /HelloOS.bin #GRUB以multiboot2協(xié)議加載HelloOS.bin

? ? ?boot #GRUB啟動HelloOS.bin

}

6. 保存grub.cfg,然后重啟,在grub引導界面選擇HelloOS!大工告成,Oh làààààààà


大家覺得這篇文章有幫助的話可以關注一波up,同時我也在更新LeetCode題解視頻,可以來逛逛喲??!


操作系統(tǒng)實戰(zhàn)45講--最全HellOS實驗指南的評論 (共 條)

分享到微博請遵守國家法律
呼图壁县| 锡林郭勒盟| 赤峰市| 台中县| 蓝山县| 绵竹市| 罗甸县| 保山市| 鹤山市| 双牌县| 菏泽市| 平陆县| 伊金霍洛旗| 尚义县| 塔河县| 康保县| 长海县| 临安市| SHOW| 安国市| 沧州市| 阿城市| 综艺| 凤城市| 无锡市| 鄯善县| 比如县| 亳州市| 永寿县| 金溪县| 嘉义市| 万山特区| 宿松县| 神木县| 平阳县| 呈贡县| 锡林郭勒盟| 措勤县| 黎城县| 都江堰市| 二连浩特市|