首頁>技術>

Linux 核心支援很多種cpu架構,架構相關的程式碼放在核心 arch 子目錄中,如下圖:

以上眾多架構中有一個 um 架構,全名叫user mode,它不是一種實體的cpu架構,這個架構的linux核心可以像 helloworld程式一樣執行,運行於linux之上使用者空間中,取名User Mode Linux,簡寫UM

AMD 和 英特爾 的電腦上都可以執行UM linux 核心:

使用前準備:

下載解壓linux核心原始碼本文使用 linux-5.4.24,其他版本的使用方法可能有細微區別

模組" class="reference-link">配置編譯核心和模組
cd  linux-5.4.24make ARCH=um x86_64_defconfigmake ARCH=um linux -j6make ARCH=um modules -j6

編譯完成,生成 linux 檔案,這個就是要執行的核心程式

試執行
./linux

核心已經執行,下面會出錯,是因為沒有根檔案系統

下載根檔案系統

下載連結:https://pan.baidu.com/s/1lhIXpeyN-zRCAej-zOahLg 提取碼:l34s下載解壓,得到 root_fs,把root_fs放到linux-5.4.24 目錄中

執行User Mode Linux
./linux

可以正常啟動 ubuntu 18.04 LTS 系統

Minicom 連線 User Mode Linux

開啟 minicom 配置:

sudo minicom -s

詳細配置如下圖

輸入使用者名稱密碼:root/root,登入系統使用

檢視 uml 系統資訊:

Uml 核心版本是 5.4.24,就是剛剛編譯的核心版本Cpuinfo 資訊顯示:vendor_id 是 User Mode LinuxUml 根目錄大小1.5G,和 root_fs 檔案大小一樣Uml 記憶體一共26MB,很小Host 主機核心版本5.3.0,是電腦的版本:

UML 系統中執行使用者程式

隨便寫個程式,先在主機編譯執行成功。比如app_x86_64 執行

uml 系統關機:因為 uml linux 當作使用者程式執行的,所以直接給程序發訊號終止就可以

複製程式到 root_fs 硬碟:

sudo mount -o loop root_fs /mntsudo cp ../../project_mys_y6ulx/application/app_x86_64 /mntls /mntsudo umount /mnt

uml 重新開機,minicom 登入,檢視並執行根目錄中的app_x86_64,可以成功執行,並輸出ROBE=9.,和電腦主機執行的結果一樣

筆者已經把 uml 的 linux 程式也複製到 uml linux 跟檔案系統中了,執行 ./linux 也可以。

也就是在 linux 電腦上運行了一個 uml linux 系統,uml linux 系統中又運行了一個 uml linux 系統,這個系統沒有root_fs 檔案,最後報錯,panic 退出了,又回到上面<試執行>小標題中那個問題了

UML 可以在電腦上測試 linux 核心程式碼中於架構無關的部分,也是一種方法

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • C/C++語言開發環境,【5款免費程式設計器】請查收!