
我正在從頭開始製作 Linux 作業系統。我遇到了這文章,它創建了一個最低限度的 Linux 作業系統,一旦 Linux 核心啟動,它只會列印 hello world。
所以我的問題是,這樣的 helloworld 程式在哪個空間[核心或用戶空間]運行?良心說是核心空間,那麼要如何讓它運作在使用者空間呢?
對於不想閱讀那篇冗長文章的人來說,這裡的作用很簡單。
- 我用 ext4 檔案格式格式化了我的 USB 隨身碟 [Linux 系統上的 /dev/sdb]。
- 將其安裝到 /mnt/mylinux 資料夾。
- 在其中建立資料夾 /boot 和 /bin。
- 將 Linux 核心的副本 [我從 github 原始碼編譯。
- 將 grub2 安裝在 /dev/sdb 的 /boot 資料夾中,並建立 grub.cfg 檔案來指定我的 init 程式。
我的初始化程序。
#include <stdio.h>
#include <unistd.h>
int main(void){
while(1){
printf("Hello World\n");
sleep(1);
}
}
我的 init 程式是靜態編譯的並放置在 /bin 資料夾中。
所以當我啟動這個驅動器時,它開始列印:Hello World
答案1
就您而言,它是一個用戶空間:您使用標準庫,因此您使用用戶空間 API 來完成任務。
如果你的程式是由核心執行的,那麼你只有內部核心 API(即 kprintf),並且對你可以執行的操作有很多限制。此外,您需要放入內核或作為內核模組。核心不會將外部程式碼作為內核空間執行。
注意:存在混合情況,但始終由核心啟動,以實現持久進程,而不是阻止核心。在這種情況下,程式碼由調度程序處理,並在進程列表中可見(通常是低 PID 號,但不是 1)。