回文章列表
作者jserv.bbs@bbs.sayya.org (松鼠) 看板: linux
標題Re: [問題] Kernel與root-filesystem的關係是怎樣的?
時間SayYA 資訊站 (2008/03/04 Tue 15:07:31)
※ 引述《JohnLinq.bbs@ptt.cc (林約翰)》之銘言:
> 我用Kernel 2.6.22.6 (defconfig) (在Ubuntu 7.04上編譯出來的)
> 搭配Mandrake 9.1的bash 加 在Mandrake 9.1上編譯出來的Busybox
> 可以正常開機進入bash shell,正常使用Busybox。
> 這樣是不是表示說Kernel跟root-filesystem可以隨意混合搭配呢?

這個問題的答案是 "Yes and No"

Linux kernel 屬於典型的作業系統核心設計,提供若干 system calls,而 C 語言
既然是這類 UNIX-like 的系統的母語,在上層的 application (userspace) 透過
Standard C Library 的 function wrapper 將函式對應成底層的系統呼叫序列。

所以問題就在於,上、下層的系統呼叫是否匹配。以 GNU glibc 來說,花了很多
心力在作 linux kernel 不同版本間的相容性匹配處理,以確保絕大部分的應用程式
能與 kernel version 無關 (像是 2.4 <-> 2.6 kernel),但多少還是會有些微的
技術問題。

root filesystem 當然得提供以上關鍵元件,如果採用 C 語言作為母語。至於說
直接使用 assembly 去建構系統 (如 AsmUtil),那要注意到 system call 的處理
模式。

> Kernel是不需要Library而能夠獨立運作的。(沒錯吧?)

Kernel 基本上是 static link 的,先不談 kernel module。

> Kernel主動跟外界溝通的方式(主動去叫別人作事),是呼叫程式名稱嗎?
> Kernel被動跟外界溝通的方式(被別人叫來作事),是通過Kernel API溝通是嗎?

所謂的 kernel API 其實包含兩個層面,一個是 C style function call,另一個
是 system call,端看從哪個角度來看。

小弟以前整理的 slides 與 hacking,可參考:

    http://jserv.sayya.org/helloworld/

這是從 "Hello World!" 等級的小程式去探討 Linux 的系統設計。
--
Jim Huang aka "jserv"
Planet OrzLab: http://orzlab.blogspot.com/
website: http://jserv.sayya.org/
blog: http://blog.linux.org.tw/jserv/
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: info.sayya.org
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻