基於mykernel 2.0編寫一個作業系統核心
阿新 • • 發佈:2020-05-13
資源下載:[https://github.com/mengning/mykernel](https://github.com/mengning/mykernel)
> 實驗內容:
>
> 1、配置實驗環境,完成Linux核心編譯。
>
> 2、對系統原始碼進行修改,基於mykernel 2.0實現一個簡單的作業系統核心。
>
> 3、簡要分析作業系統核心核心功能及執行工作機制。
>
> 實驗環境:
>
> VMWare虛擬機器下的Ubuntu18.04.4,實驗採用的核心版本為linux-5.4.34。
---
## 1 核心編譯
### 1.1 準備工作
#### 1.1.1 修改映象源地址
為了節省資源下載時間,使用國內映象源。
```
cd /etc/apt/
sudo cp sources.list sources.list.bk
sudo gedit sources.list
```
```c
deb http://mirrors.aliyun.com/ubuntu bionic main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-updates main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu bionic-backports main multiverse restricted universe
```
將sources.list修改儲存後,更新apt源。
```
sudo apt-get update
```
#### 1.1.2 新增hosts對映
新增GitHub資源域名與對應IP的對映。
```
sudo vi /etc/hosts
```
```
151.101.76.133 raw.githubusercontent.com
```
#### 1.1.3 安裝axel
多執行緒下載工具,用於下載Linux核心。
```
sudo apt install axel
```
### 1.2 下載核心補丁
```
wget https://raw.github.com/mengning/mykernel/master/mykernel-2.0_for_linux-5.4.34.patch
```
補丁檔案如下,根據diff對比,主要做了以下改動:
- 在時鐘中斷時呼叫自定義的my_timer_handler函式,列印輸出>>>>>>>my_timer_handler here<<<<<<<<
- 在start_kernel.h與timer.h中分別宣告my_start_kernel與my_timer_handler函式
- 在main.c中呼叫my_start_kernel函式
- 在Makefile中新增mykernel的編譯路徑
- 建立mykernel的Makefile檔案
- 編寫myinterrupt.c與mymain.c檔案,mymain.c中模擬系統執行,每100000次迴圈輸出一次
```
diff -Naur linux-5.4.34/arch/x86/kernel/time.c linux-5.4.34-mykernel/arch/x86/kernel/time.c
--- linux-5.4.34/arch/x86/kernel/time.c 2020-04-21 15:05:05.000000000 +0800
+++ linux-5.4.34-mykernel/arch/x86/kernel/time.c 2020-04-25 21:58:16.436717811 +0800
@@ -16,6 +16,7 @@
#