- 從零開始寫Linux內核:一書學透核心原理與實現
- 海納
- 2273字
- 2025-04-09 18:37:35
1.2 配置環境
開發一個操作系統需要兩種基本的工具:匯編語言和C語言的編譯器,以及驗證和測試操作系統的模擬器。本書的實驗主要是使用現代的工具鏈從零開始構建一個早期的操作系統內核,所以開發編譯的環境就選擇了工具鏈相對豐富的Linux系統和GCC編譯器。接下來,先配置開發用的工具鏈,再配置模擬器。
1.2.1 配置開發環境
本書采用Linux系統作為代碼的開發以及構建環境,而構建出來的操作系統需要通過虛擬機進行模擬運行。本節將介紹如何搭建開發環境和運行環境。
在開發操作系統時,我們需要使用GNU bintools來進行源碼構建,如as(匯編器)、ld(鏈接器)等工具,因此本書選擇了Ubuntu 20系統作為開發環境。讀者可以選擇使用其他的Linux系統發行版或者在Windows系統上安裝WSL(Windows Subsystem for Linux)。
當構建完成以后,就得到了內核鏡像文件。執行鏡像文件需要通過虛擬機進行模擬運行,本書所使用的虛擬機主要是 QEMU 或者 Bochs。在Windows、Linux還有macOS等主機上都可以找到它們的安裝文件。所以,虛擬機的運行主機環境(無論是Windows還是Linux)都是可以的。
考慮到很多讀者的常用PC系統是Windows環境,本節主要介紹WSL的安裝方法。WSL作為Windows官方內置的Linux子系統,具有安裝方便、占用資源少、擁有高效的文件傳輸方式等優勢,也是筆者在Windows系統上進行開發的主要方式,因此推薦給大家。
WSL為Windows的開發人員提供了一套比較完整的GNU/Linux開發環境,包括了大部分的命令行工具以及應用程序。相比虛擬機運行的模式而言,能夠有更好的運行效率。而且,WSL的安裝過程相比在VMWare等虛擬機中安裝Linux,無疑高效、簡單了很多。
WSL的安裝對Windows的版本是有要求的:Windows 10系統必須滿足2004及更高版本(內部版本是19041或更高版本),或者采用Windows 11系統。讀者可以通過“Win+R”鍵在運行對話框中輸入winver命令來查看Windows的具體版本。
在確認Windows版本滿足WSL的需求之后,就可以在PowerShell或者cmd的命令行窗口中進行安裝了。注意,PowerShell或者cmd需要先使用管理員權限打開。接下來通過執行如下命令來安裝WSL:
wsl--install
該命令會下載并安裝最新的Linux kernel,并安裝Ubuntu作為默認的Linux發行版。安裝好WSL之后,讀者可以通過在命令行窗口中執行wsl命令來進入Linux系統。第一次安裝需要配置Linux系統的環境,這里就不再贅述了。
因為WSL是Windows下的子系統,所以相互之間傳送文件是比較容易的,在WSL環境中可以對Windows文件系統的文件直接進行讀寫。如果想在WSL中訪問Windows的文件,例如C盤的文件,則只需要執行“cd/mnt/c/”便可以進入Windows的C盤。如果想在Windows下訪問WSL的home目錄,只需要在home目錄下執行“explorer.exe”即可。在開發內核的過程中,構建的結果可以很容易地在WSL以及Windows主機之間互傳。
1.2.2 配置運行環境
操作系統的運行不同于普通應用程序,需要BIOS支持,所以我們在運行與調試自己寫的操作系統時需要采用虛擬機進行模擬運行。當系統在虛擬機上驗證通過以后,再部署到真實的機器上執行。
目前,常用的虛擬機有VMWare、Virtual PC、QEMU、Bochs等。其中,QEMU和Bochs因為輕便易用,成為開發操作系統的首選。接下來就介紹Bochs和QEMU的安裝與使用方式。
首先介紹Bochs。Bochs是一個模擬器,它用純軟件的辦法完全模擬x86 CPU和外圍設備,所以,Bochs的運行性能相對較差。但也正是因為Bochs是純軟件實現對硬件的模擬,所以使其對操作系統進行代碼級的調試變得相對容易。
Bochs是完全開放源碼的軟件,讀者可以通過搜索引擎下載到Windows、Linux等各種版本的二進制安裝文件。這就意味著,編譯和運行調試可以采用雙系統的方式,即在Linux下完成編譯,在Windows等圖形界面支持比較好的系統上進行調試。
Bochs的安裝過程非常簡單,只需要一路單擊Next按鈕即可。需要注意的是,在安裝的過程中要選擇Full選項,這樣DLX Linux Demo才會出現在Bochs的安裝目錄下。
安裝完成以后,在Bochs的安裝目錄下,可以找到一個名為dlxlinux的文件夾。將這個文件夾復制一份,并且改名為linux011。之后進入這個文件夾,編輯bochsrc.bxrc文件。這個文件是Bochs的配置文件,虛擬機運行所依賴的軟盤、硬盤、顯卡等信息都可以在這個文件中進行配置。
這個文件的大多數內容都不必修改,關鍵的配置只有兩行。
第一行是floppya:1_44=floppya.img,status=inserted。這一行指定Bochs所使用的虛擬鏡像文件,比如,操作系統鏡像叫作linux.img,那就需要把這一行中的floppya.img改為linux.img。
第二處需要修改的地方是boot:c。這一行代表了系統要從硬盤啟動,因為本書中的實驗都是以軟盤為基礎的,所以應該改為boot:a,這樣虛擬機就會從floppya開始啟動了。
文件的其余部分暫時保持不變,最終bochsrc.bxrc的內容如下所示[1]:
1 #########################################
2 #bochsrc.txt file for DLX Linux disk image.
3 #########################################
4
5 #how much memory the emulated machine will have
6 megs:32
7
8 #filename of ROM images
9 romimage:file=../BIOS-bochs-latest
10 vgaromimage:file=../VGABIOS-lgpl-latest
11
12 #what disk images will be used
13 floppya:1_44=linux.img,status=inserted
14 floppyb:1_44=floppyb.img,status=inserted
15
16 #hard disk
17 ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
18 ata0-master:type=disk,path="hd10meg.img",cylinders=306,heads=4,spt=17
19
20 #choose the boot disk.
21 boot:a
22
23 #default config interface is textconfig.
24 #config_interface:textconfig
25 #config_interface:wx
26
27 #display_library:x
28 #other choices:win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
29
30 #where do we send log messages?
31 log:bochsout.txt
32
33 #disable the mouse,since DLX is text only
34 mouse:enabled=0
35
36 #enable key mapping,using US layout as default.
37 #
38 #NOTE:In Bochs 1.4,keyboard mapping is only 100%implemented on X windows.
39 #However,the key mapping tables are used in the paste function,so
40 #in the DLX Linux example I'm enabling keyboard mapping so that paste
41 #will work.Cut & Paste is currently implemented on win32 and X windows only.
42
43 #keyboard:keymap=$BXSHARE/keymaps/x11-pc-us.map
44 #keyboard:keymap=$BXSHARE/keymaps/x11-pc-fr.map
45 #keyboard:keymap=$BXSHARE/keymaps/x11-pc-de.map
46 #keyboard:keymap=$BXSHARE/keymaps/x11-pc-es.map
QEMU也是一款模擬器軟件,采用動態二進制翻譯的技術來模擬不同架構的CPU,并提供對應的硬件設備模型。它能保證運行在其中的客戶OS(Guest OS)不用進行修改就能運行。QEMU與KVM技術一起,可以使得Guest OS系統的運行接近物理機的速度。相比Bochs,QEMU的特點是高效、跨平臺。
QEMU在Windows上的安裝很簡單,只需要在QEMU的官網上下載對應的安裝文件,并通過QEMU installer安裝即可。
安裝QEMU之后,打開QEMU所在的文件目錄,可以看到有一系列qemu-systemxxx.exe的可執行文件。這些文件對應的是需要模擬的不同架構的CPU類型。本書實驗開發的Linux 0.11的鏡像文件可以使用qemu-system-x86_64.exe或者qemu-systemi386.exe運行。
讀者也可以在Linux環境中進行開發、運行,因此需要在Linux上配置虛擬機,這是一項比較簡單的工作。在Linux環境下可以直接使用發行版對應的包管理工具進行安裝,下面以Ubuntu為例:
sudo apt install bochs bochs-x
安裝完之后可以在任意目錄新建bochsrc文件,文件內容可以參考前面的Windows的配置。這里要注意修改romimage和vgaromimage的路徑,如下所示:
1 #filename of ROM images
2 romimage:file=/usr/share/bochs/BIOS-bochs-latest
3 vgaromimage:file=/usr/share/bochs/VGABIOS-lgpl-latest
之后就可以直接通過命令“bochs-f bochsrc”運行Bochs。
- Hands-On DevOps with Vagrant
- 玩到極致 iPhone 4S完全攻略
- Windows Phone 7.5 Data Cookbook
- Python基礎教程(第3版)
- 嵌入式系統及其應用(第三版)
- 計算機系統:基于x86+Linux平臺
- 計算機應用基礎(Windows 7+Office 2016)
- VMware Horizon View Essentials
- Red Hat Enterprise Linux 6.4網絡操作系統詳解
- Introduction to R for Quantitative Finance
- VMware Horizon Mirage Essentials
- 電腦辦公(Windows 7+Office 2016)入門與提高
- 大規模Linux集群架構最佳實踐:如何管理上千臺服務器
- Getting Started with Citrix XenApp 6.5
- Microsoft Azure Administrator:Exam Guide AZ-103