原创 device_tree分析

在內核中,經常會聽到“設備樹”這一概念,根據名字,大致可以理解爲內核將計算機系統中的設備按照樹型結構進行了組織。 首先,瞭解一下內核將會使用的設備樹二進制文件DTB。 DTB(Devicetree Blob)是DTS的二進制文件格

原创 linux——list.h

在Linux內核源碼中,爲了創建鏈表,其創建了list.h文件來創建鏈表。list.h的路徑爲/usr/src/kernels/include/linux。 list.h中有兩個宏定義: #define LIST_HEAD_INI

原创 Linux程序設計——信號

信號 在linux中,信號是系統爲了響應的某些條件,而生成的事件。 進程會根據收到的信號,作出相應的動作。信號可以被生成、捕獲、響應或忽略。 信號是因爲錯誤的條件而生成,它們由 shell 和中斷處理器生成來引起中斷,信號還可以作爲進程之

原创 Linux_rtl8169

這裏,將會以r8169_main.c文件爲例,來說明Realtek_816x系列網卡的驅動註冊與運行。在內核當中,對Realtek_816x系列網卡進行了抽象的定義,即struct pci_driver rtl8169_pci_d

原创 進程之間的通信——管道

在linux中,進程的通信可以通過信號量,互斥量來進行交流,但這些變量只是一個簡單的數據結構,而不是一組數據字符串,所以通信過程變得複雜,而且效率不高。 爲了使得進程間的通信變得更加方便,便引入了管道(pipe)這一功能。通常把一

原创 printk()函數分析

在內核模塊中,常用的輸出函數爲printk(),爲了理解該函數的工作原理以及執行流程,接下來對該函數進行分析。printk()函數原型如下: //以“printk("num is: %d!\n", num)”語句爲例,開始分析。

原创 setup_early_printk()函數分析

關於setup_early_printk()函數,主要用來註冊用於啓動階段顯示的控制檯。內核中聲明瞭一個全局變量early_console,並將定義的全局變量early_console_prom賦值給它,隨後開始註冊early_c

原创 通過PROC文件收集進程信息

在內核中,提供了CGroup(控制組)機制,該cgroup可以對進程進行劃分,將某些進程可以劃分到同一組中,並對其進行相關統一的條件限制。 爲了將使用資源幾乎一致的進程劃分到同一個cgroup組中進行條件限制,所以需要對進程的資源

原创 PCI總線設備遍歷

在梳理內核驅動程序時,發現一個問題,當注入內核驅動程序時,內核會根據驅動結構體(比如:struct pci_driver)中的總線屬性(pci_driver->bus)來找到與驅動程序在同一總線上相對應的驅動設備。 因此,本文主要

原创 Linux_網卡驅動

這裏,將會以r8169_main.c文件爲例,來說明Realtek_816x系列網卡的驅動註冊與運行。在內核當中,對Realtek_816x系列網卡進行了抽象的定義,即struct pci_driver rtl8169_pci_d

原创 PCI總線與HT總線

什麼是總線? 總線(BUS)是計算機各種功能部件之間傳送信息的公共通信幹線,它是由導線組成的傳輸線束,按照計算機所傳輸的信息種類,計算機的總線可以劃分爲數據總線、地址總線和控制總線,分別用來傳輸數據、數據地址和控制信號。總線是一種

原创 Linux--硬件中斷處理

我們知道關於中斷被分成了兩種,一種是軟中斷(比如:系統調用,系統報錯等);另一種是硬件中斷。這裏我們來了解一下內核是如何識別並處理這些中斷的。 以5.6版本的內核爲例,在內核啓動階段的代碼中可以看到這麼一個函數init_IRQ()

原创 Linux程序設計---信號

信號 在linux中,信號是系統爲了響應的某些條件,而生成的事件。 進程會根據收到的信號,作出相應的動作。信號可以被生成、捕獲、響應或忽略。 信號是因爲錯誤的條件而生成,它們由 shell 和中斷處理器生成來引起中斷,信號還可以作爲進程之

原创 cgroup 簡介

cgroup 的功能在於將一臺計算機上的資源(CPU,memory,network)進行分片,來防止進程間不利的資源搶佔。 術語 cgroup:關聯一組 task 和一組 subsystem 的配置參數。 一個 task 對應一個進程,

原创 進程之間的通信--管道

在linux中,進程的通信可以通過信號量,互斥量來進行交流,但這些變量只是一個簡單的數據結構,而不是一組數據字符串,所以通信過程變得複雜,而且效率不高。 所以爲了使得進程間的通信變得更加方便,便引入了管道(pipe)。通常把一個進程的輸