原创 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; /*