正如標題所暗示的,是那裏瞭解Linux內核需要系統化的知識任何源?必要的硬件知識,瞭解Linux內核(或任何內核)
如果沒有這樣的事,有什麼硬件的話題,我應該覆蓋(我認爲這只是各地的計算機)?什麼樣的深度(我想深入瞭解,而不是電路設計水平)?
正如標題所暗示的,是那裏瞭解Linux內核需要系統化的知識任何源?必要的硬件知識,瞭解Linux內核(或任何內核)
如果沒有這樣的事,有什麼硬件的話題,我應該覆蓋(我認爲這只是各地的計算機)?什麼樣的深度(我想深入瞭解,而不是電路設計水平)?
我建議你買一個嵌入式板卡,如Beagleboard。他們將爲您提供所用芯片組的必要文檔(本例中爲TI ARM Cortex A8)。開始閱讀這個芯片組手冊。此外,還有許多已經在beagleboard上實施的Android,Ubuntu項目。以他們爲參考,看看他們是如何將驅動程序寫入特定的主板等的。這會讓您瞭解內核/驅動程序如何與H/W進行交互。
來到內核的S/W部分,我建議您一般閱讀good book on Operating systems,尤其是Linux/Unix OS。這會讓你明白什麼是內核以及它如何管理內容。然後,你可以玩你的桌面Linux的writing small kernel modules,插入和刪除它,調試它等。
此外,與您保持方便的參考kernel source,使互聯網成爲您最好的朋友。
內核正確不需要超出CPU架構的基礎硬件很多知識。內核主要管理內存,文件,分頁,交換和任務調度等資源。內核和可加載設備驅動程序之間的接口是純粹的計算機科學。這些驅動程序擁有95%的特定於硬件的代碼,但管理虛擬內存比較複雜,而這些虛擬內存在更深層次上是特定於硬件的。
我會先通過簡單的系統調用(如gettimeofday()
或sysinfo()
)來跟蹤內核的架構。然後,根據您的興趣,按照read()
,write()
,sbrk()
,mmap()
的邏輯。 fork()
是一個有趣和有趣的,但可以相當彎曲。調度程序也是一個值得挑戰的事情,但值得努力。祝你好運!
謝謝。但是,我得到了大部分的概念(至少在基本級別之外,即我知道進程是task_struct的概念,內核如何在任務結構之間切換)。但是,我想深入學習,而不是學習API,因爲顯然,內核開發人員必須足夠了解硬件才能編寫控制硬件的代碼。 – Amumu
不過,在使用電路板和讀取芯片組手冊之前,硬件知識的先決條件是什麼?我知道基本的PC體系結構(它有什麼組件,CPU和內存等組件是如何交互的......)和基本的內核使用(編譯,創建內核模塊,操作系統的工作方式(上下文切換,線程,文件系統管理等)。 )),但直接與硬件交互仍然是我的一個神話。 – Amumu
關於RAM,閃存,任何芯片組概述的基本知識已足夠。我建議你開始游泳,以便游泳。我很幸運能夠在像Analog Devices這樣的H/W公司工作,所以我不得不做很多事情。但如果你不夠幸運,那麼你必須從一個基本的棋盤開始。 –