隨著linux的逐步普及,現在有不少人對於Linux的安裝及設置已經比較熟悉了。與Linux 的蓬勃發展相適應,想深入了解Linux的也越來越多。而要想深入了解Linux,就需要閱讀和分析linux內核的源代碼。 Linux的內核源代碼
當第一個原始的程序員在最開始的窯洞計算機之牆上鑿過第一個程序時,那是一個在羚羊圖案上畫上“Hello, world”的程序。羅馬人的編程書籍上用“Salut, Mundi”程序開始。我不知道
申明:此系列原作者Ori Pomerantz 翻譯:cherami 簡介 現在,你想寫內核模塊。你了解C語言並且已經寫過一些普通的程序,現在你想接觸真正的動作在哪兒,那個單一的瘋狂的可以刪除整個文件系統的指針及內核轉儲意味著重新啟動在
對稱多處理 最簡單的提高硬件的性能的辦法是在主板上插上多個CPU(閱讀是最便宜的方法)。要麼讓不同的CPU做不同的工作(非對稱多處理),要麼讓它們並行運行同一工作(對稱多處理,縮寫為SMP)。有效的使用非對稱多處理需要專門研究計算機將要
中斷處理程序 除了上一章外,迄今為止,我們在內核中所做的每件事都是作為對一個進程請求的回應,要麼通過處理特殊的文件,發送 ioctl,要麼發出系統調用。但是內核的工作並不僅僅是回應進程請求。另一個每個字節都很重要的工作是和連接到機器的硬
任務調度 常常的,我們有‘家務管理’的任務需要在某個時間做或者偶爾經常如此。如果任務由進程完成,我們可以將它放在 crontab 文件中。如果任務由內核模塊完成,我們有兩種可能。第一個是在 crontab 文件中
代替 printk 在本書開始的時候,我說過 X 和內核模塊編程不能混合。在開發內核模塊時那是對的,但在實際使用中你想可以向任何向模塊發送命令的終端(Teletype, 最初是用於和Unix系統溝通的鍵盤和打印機的組合,而今天它是用於U
阻塞進程 當某人要求你什麼事而你當時不能時你在做什麼?如果你是人而你被別人打擾,你唯一能說的是:‘現在不行,我正忙著呢。 走開!’。但是如果你是一個內核模塊而你被一個進程打擾,你有另外的可能。你可以讓那個進程睡眠
系統調用 迄今為止,我們做的唯一的事就是用好已定義的內核機制去登記 /proc 文件和設備驅動處理程序。如果你想做內核程序員認為你想做的,例如寫設備驅動程序,這就對了。但是如果你想做一些不平常的事,在某些地方改變系統的行為呢?那麼這大多
啟動參數 在前面的很多例子中,我們不得不硬性的將一些東西寫如內核模塊,例如在 /proc 中的文件名或設備的主設備號,因此我們可以對它 ioctl。 這和 Unix及 Linux的編寫用戶可以定制的靈活的程序精神是相矛盾的。 在程序或
和設備文件對話(寫和 IOCTL) 設備文件應該表現物理設備。大多物理設備既作為輸出也作為輸入,因此必須有某個機制使內核中的設備驅動程序得到來自進程的輸出以便發送到設備。通過為輸出打開設備文件並向其寫而做到這個,就像寫一個普通文件。在下
/proc 文件系統 在Linux中有額外的機制可以為內核和內核模塊將信息發送給進程 -- /proc 文件系統。最初設計的目的是允許更方便的對進程信息進行訪問(因此得名),現在它被每一個有有趣的東西報告的內核使用,例如 /proc/m
在網絡中,不少服務器采用的是Linux系統。為了進一步提高服務器的性能,可能需要根據特定的硬件及需求重新編譯Linux內核。編譯Linux內核,需要根據規定的步驟進行,編譯內核過程中涉及到幾個重要的文件。比如對於RedHat Linux,
方法之三:以數據結構為基點,觸類旁通 結構化程序設計思想認為:程序 = 數據結構 + 算法。數據結構體現了整個系統的構架,所以數據結構通常都是代碼分析的很好的著手點,對Linux內核分析尤其如此。比如,把進程控制塊結構分析清楚了,就對進
二. 向量的設置和相關數據的初始化: 在實模式下的初始化過程中,通過對中斷控制器8259A-1,9259A-2重新編程,把硬中斷設到0x20-0x2F。即把IRQ0�;IRQ15分別與0x20-0x2F號中斷向量對應起來;當
II、實模式下的初始化 實模式下的初始化,主要是指從內核引導成功後,到進入保護模式之前系統所做的一些處理。在內核源碼中對應的程序是 /Arch/i386/boot/setup.S;以下部分主要是針對此文件進行的分析。這部分的分析主要是要
Linux的最大的好處之一就是它的源碼公開。同時,公開的核心源碼也吸引著無數的電腦愛好者和程序員;他們把解讀和分析Linux的核心源碼作為自己的最大興趣,把修改Linux源碼和改造Linux系統作為自己對計算機技術追求的最大目標。 Li
Linux內核是一個整體是結構,因此向內核添加任何東西,或者刪除某些功能,都十分困難。為了解決這個問題引入了內核機制。從而可以動態的想內核中添加或者刪除模塊。 模塊不被編譯在內核中,因而控制了內核的大小.然而模塊一旦被插入內核,他就和
以下代碼均在linux i86 2.0.x的內核下面測試通過。它也許可以在之前的版本通過,但並沒有被測試過。因為從2.1.x內核版本就引入了相當大的改變,顯著地內存管理上的差別,但這些不是我們現在要討論的內容。 用戶空間與內核空間 l