Daniel Jslin

May the source be with you

List, HList, and Hash Table

List

List 可以說是 Linux kernel 中最基礎的資料結構,它的定義如下 (include/linux/types.h):

struct list_head {
    struct list_head *next, *prev;
};

List 的操作定義在: include/linux/list.h

  • list_empty(head) - tests whether a list is empty
  • list_add(new_entry, head) - adds a new entry. Insert a new entry after the specified head.
  • list_del(entry) - deletes entry ...

核心參數解析

Linux 核心啟動時會解析由 bootloader 傳來的參數,來設定核心運作時的行為。

傳給核心的參數是以空格分隔的字串,通常的型式如下:

param[=value_1][,value_2]...[,value_10]

"param" 是關鍵字,後面跟著設定值,以逗號分隔。一個關鍵字後面最多可以有 10 個值,但是可以透過再次使用同一關鍵字的方式,傳遞超過 10 個以上的參數。

舉例來說,bootloader 可以透過 ...

深入淺出 start_kernel()

當 bootloader 載入核心映像檔(zImage, or bzImage) 之後,在核心映像檔最開頭的 bootstrap code 會負責關閉中斷,初始化記憶體設定等硬體初始化工作,最後解壓縮內核。 不同的硬體架構會有不同的設定方式,大致的流程如下圖所示:

start_kernel booting arch/*/boot/ low_level_init arch/*/kernel/head*.S, head*.c booting->low_level_init   Booting   - disable interrupt   - prepare memory   - clean bss section   - decompress zImage (or bzImag)   start_kernel init/main.c: start_kernel() low_level_init->start_kernel   Low-level initialization ...

核心的進入點: start_kernel()

larger call graph

start_kernel

start_kernel() 是 Linux kernel "正式的"進入點,但是 start_kernel() 通常不是在核心被載入後就立刻被執行,在它開始執行之前還有些準備工作要先完成。 在核心被載入後,通常最開始被執行的是的放在 Linux kernel image 最開頭的 bootstrap code, 負責關閉中斷,記憶體設定等硬體初始化準備工作,甚至還包含將壓縮的內核解壓縮 ...

Linux Kernel 探險地圖

Linux kernel 就像是一個龐大的迷宮,如果沒有適當的引導,常讓想要了解它的新手不知道要如何開始。 所幸,Linux kernel 是指標性的開放源碼專案,有許多的前輩高人留下相當多的資料,也有許多人持續在研究它,並且將成果及心得公開在網路上,這對有心想要了解它的人是很好的參考資料來源。

雖然網路上已經有許多資料可供參考,但是它們沒辦法也沒必要解答我所有的疑問,許多細節之處必須親身碰過才會有感覺。 像我這樣對 Linux kernel 有與趣,想了解它是如何運作及如何被設計的人 ...

May The Source Be With You

'may-the-source-be-with-you'

image by anonymous

對軟體工程師而言,我們很幸運生在一個開放源始碼如此蓬勃發展的時代,有許多優秀的開源軟體專案可以讓我們好好利用及研究。 就如同一個優秀的文學家經由閱讀其他文學大師的作品來提升自已一樣,軟體工程師也是經由觀摩其他優秀的軟體設計來讓自已的能力提升。 另一方面,開放源碼運動亦造就了軟體開發社群的蓬勃發展,經由分享及社群參與,軟體開發人員之間得以互相切磋討論,集合眾人的力量完成更大的目標,並以開源的方式讓更多人參與。 社群與開放源碼運動之間形成一個密不可分的正向循環,生生不息。 這兩點正是本部落格的目標:藉由分析並學習優秀的開源軟體設計來讓自已的能力提升;藉由分享帶來回饋與交流,形成一個正向循環。

開源軟體就如同 Star Wars 裡絕地武士的原力一般,如果我們對它夠了解,它將會給我們帶來力量, 它就是我們軟體工程師的原力來源。 May the source be with you.