原创 e1000e網卡驅動分析筆記

驅動中有e1000的e1000e兩個版本, 差別不大, e1000e使用了msix, 更先進一點點.  比較難懂的都是一些基礎系的東西, 如下 1) PCIE的配置空間初始化 2) msix機制及初始化 3) napi機制 4) dma機

原创 mini2440-i2c驅動分析

在s3c2440的i2c驅動框架中, 分2個部分的內容, 一部分是i2c-adapter初始化, 一部分是i2c-driver的初始化. 針對s3c2440自帶的eeprom, 走讀一下代碼, 看看哪些東西值的我們學習和借鑑. s3c24

原创 段間跳轉指令jmpi和實模式尋址(轉)

jmpi是段間跳轉指令,用於x86實模式下,       如:BOOTSEG = 0x0c70             jmpi    4, #BOOTSEG       假如當前段CS==00h,那麼執行此指令後將跳轉到段CS==

原创 signal原型分析

在linux-0.11內核中,我們找到signal函數原型: void (*signal(int _sig, void (*_func)(int)))(int); 這個函數很難理解,先複習看一些基礎知識。 1、函數指針定義 int

原创 muti-thread & fork

1 要點 fork會共用原來的代碼段,對於數據段和堆棧進行“寫時拷貝”, 對於內核全局變量應用,例如文件句柄進行+1。 因此fork會產生一個和原來進程佔用內存一樣的進程,注意只是和原來進程的內存模型一樣,而不會產生和父進程一樣的多線程進

原创 fastcall 和 asmlinkage

linux操作系統支持多種CPU架構,比如x86、ppc和arm等,參數傳遞的方式是不一樣的。 ARM對函數調用過程中的傳參定義了一套規則,即 ATPCS,規則中明確指出ARM中R0-R4都是作爲通用寄存器使用,超過4個參數的在局部棧中保

原创 內核3.0.x之函數宏定義

這段時間又碰到系統調用這個傢伙,結果在我當前用的3.0.x內核裏全變樣了。爲了將這個問題弄明白,還得自己動手才行,這裏非常感謝CSDN的"海風林影"兄弟提供的博文和相關參考文獻,還是那句話“成果和榮耀歸於前輩”。 很多人也都發現,在2.6

原创 棧溢出

很簡單的東西,總是搞忘了,記錄一下: #include <stdio.h> void f(char *s) { char s1[20] = "abcdefgaaaaaaaaaaaaaaaaa"; strcpy(s,s1); } void

原创 openwrt dns解析流程

1、概述 openwrt的dns由dnsmasq(dns server 和 dhcp server的合併)實現,默認配置爲dns轉發模式。 由於wan口爲dhcp client, 則dhcp server在啓動時,將上級路由的ip,作爲本

原创 gettid和pthread_self區別

1 線程ID獲取方法 linux下獲取線程有兩種方法: 1)gettid或者類似gettid的方法   2)直接調用pthread_self() gettid 獲取的是內核中線程ID,而pthread_self 是posix描述的線程ID