原创 linux panic分析

Oops: 0000 [#1] PREEMPT SMP                Modules linked in: capidrv kernelcapi isdn slhc ipv6 loop dm_multipath snd_

原创 linux文件系統之讀流程 SYSCALL_DEFINE3(read, xxx)

        做塊設備驅動就不得不和文件系統打交道,這裏就整理下有關文件系統讀寫的流程和代碼。         先簡單的介紹下vfs,就是虛擬文件系統,虛擬文件系統屏蔽了底層的各種文件系統的差異性,讓上層應用程序可以忽略底層用的是哪種

原创 linux內存管理--slab

這個kmem_cache_create()函數是一個和cpu結構有關係的函數,所在在公用函數中找不到(3.10.98內核版本中),我選擇的是 arch/x86/kernel/ 說明下參數: const char *name :slab的

原创 linux內存管理--vmalloc

詳細的概念性解釋就不說了,如果對vmalloc沒有一點概念的話,可以稍微找些資料瞭解下,這裏主要就是分析下在內核中vmalloc的實現; 直接物理內存映射(內核邏輯地址)-- 8 MB -- vm -- 1 page -- vm --

原创 recovery: ASCII cpio archive (SVR4 with no CRC)——cpio格式的recovery解壓縮和重新打包的方

     中興U930HD手機CPU採用的是聯芯科技的LC1810,該平臺系統的recovery.img 和boot.img 的打包格式跟其他平臺(如高通、MTK、英偉達等)不一致,研究了半天終於將930HD的recovery替換了,

原创 linux中頁緩衝和塊緩衝之概念

頁緩衝在《linux內核情景分析》一書的第5.6節文件的寫與讀一章中說明的很詳細,這裏摘抄下來; 在文件系統層中有三隔主要的數據結構,file結構、dentry結構和inode結構; file結構:代表目標文件的一個上下文,不同進程可以

原创 linux內存管理--分配內存頁(快速) get_page_from_freelist

先說下快速分配內存頁的參數: gfp_mask  進入快速分配時,加上了__GFP_HARDWALL  這表示再分配時要加大分配力度; nodemask  表示節點的mask,就是是否能在該節點上分配內存,這是個bit位數組; orde

原创 struct file 和 struct file_struct

在具體介紹這幾個結構以前,我們需要解釋一下文件描述符、打開的文件描述、系統打開文件表、用戶打開文件表的概念以及它們的聯繫。 1.文件對象 在Linux中,進程是通過文件描述符(file descriptors,簡稱fd)而不是文件名來訪問

原创 SSD卡驅動中trim命令的實現原理

有關trim命令的簡介 可以看下http://blog.csdn.net/yuzhihui_no1/article/details/46519701 這裏就大概的說下驅動中對trim命令的實現吧,由於對公司代碼的保密性,這裏就不沾貼代碼

原创 查看設備、文件被哪個進程使用

lsof簡介   lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接 和硬件。所以如傳輸控制協議 (TCP) 和

原创 linux內存管理--實際分配函數 buffered_rmqueue

不管是快速分配還是慢速分配,實際分配內存的都是 buffered_rmqueue()函數,其他的都是在選擇從哪個地方來分配比較合適; 還是先來說說各個參數: struct zone *preferred_zone 表示分配所能接受的最

原创 linux宕機後根據地址來查看哪個函數出錯

本文以獲取內核函數 sys_open()的地址爲例。    1)從System.map文件中直接得到地址:       $ grep sys_open /usr/src/linux/System.map       2)使用 nm

原创 System.map解析

第一部分:System.map的作用 有關System.map文件的信息好象很缺乏。其實它一點也不神祕,並且在整個事情當中它並不象看上去那麼得重要。但是由於缺乏必要的文檔說明,使其顯得比較神祕。它就象耳垂,我們每個人都有,但卻不知道是

原创 linux內存管理--夥伴系統分配內存準備工作

linux內核內存管理的代碼改變的有點大,主要是細節方面; 首先從 __get_free_pages()開始總結起: unsigned long  __get_free_pages(grp_t  gfp_mask, unsigned i

原创 __get_free_pages

int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) { int node_id; int ret; /*