1. 程式人生 > >基於mykernel 2.0編寫一個作業系統核心

基於mykernel 2.0編寫一個作業系統核心

資源下載:[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 @@ #