kernel hacker修炼之道之内存管理-物理内存探测 作者:李万鹏 在系统boot的时候,kernel通过0x15中断获得机器内存容量。有三种参数88H(只能探测最大64MB的内存),E801H(得到大小),E802H(获得memory map)。这个memory map称为E820图,在kernel的初始化代码中会将这个memory map复制到一个kernel中的数据结构e820map里,kernel...
创建SLAB高速缓存kmem_cache_create()作者:李万鹏 于北京 borqs 这篇主要讲解专用高速缓存的创建函数kmem_cache_create()的流程。kmem_cache_create()主要是建立的cache描述符,填充了其成员,设置cpu local slab,设置外置slab描述符还是内置slab描述符,并没有分配slab块和对象。最终将cache描述符添加到cache_chain链表上...
kernel hacker修炼之道之驱动-按键 浅析linux驱动之按键 作者:李万鹏 按键程序使用了驱动的很多知识。有中断,阻塞,等待队列,linux设备驱动模型等。 使用中断处理的步骤是: 向内核注册中断 实现中断处理函数。 安装中断的函数是: int request_irq(unsigned int irq,irqreturn_t (*handler) (int, void*, struct pt_...
SLUB分配器调用kmem_cache_free()来释放object。 void kmem_cache_free(struct kmem_cache *s, void *x) { struct page *page; /*获得对象所在的slab的第一个物理页*/ page = virt_to_head_page(x); slab_free(s, page, x, _RET_IP_); trace_kmem_cache_free(_RET_IP_, x); } 通过调用virt...
{ void **object; struct kmem_cache_cpu *c; #ifdef CONFIG_CMPXCHG_LOCAL unsigned long tid; #else unsigned long flags; #endif if (slab_pre_alloc_hook(s, gfpflags)) return NULL; #ifndef CONFIG_CMPXCHG_LOCAL local_irq_save(flags); ...
释放的过程正好与分配的过程相反,先将object释放到cpu local slab中,如果cpu local slab满了,就将cpu local slab中的free object释放到share local slab中,如果share local slab也满了,就把share local slab的部分free object释放到slab lists中,然后再将cpu local slab中batcount个free object释放到share local sl...
kernel hacker修炼之道之PCI subsystem(六) 作者 李万鹏 第二步分析PCI core对PCI device resource的分配,包括:I/O,Memory,在pcibios_init函数中,遍历完PCI tree之后会调用 pcibios_resource_survey函数来分配资源:1450void __init pcibios_resource_survey(void)1451{ 1452 struct pci_bus *b;1453 1454 ...
git 详细解析(一)作者 李万鹏follow前边的git使用方法系列 这里着重详细介绍几个git命令 查看当前文件状态git statusgit add/rmgit diff查看提交历史git log撤销操作git status使用git status可以查看当前文件状态 hacker@hacker:~/qemu-hacking$ git status# On branch masternothing to commit (working directory clean...
Some Examples of Kernel-Hacker Informal Correctness Reasoning1 DEFINE_SPLIT_COUNTER(mycount); 2 3 void add_split_counter(unsigned long v) 4{ 5 unsigned long v1 = v; 6 unsigned long oldcount; 7 8 #ifdef FORCE_BUG_RAND_ADD 9 v1 = random(); 10 #endif 11 #ifdef FORCE_BUG_WRONG_...
kernel hacker’s guide to git from :http://linux.yyz.us/git-howto.html This tutorial is a cookbook of recipes getting up and running with Linus's source code management (SCM) software, "git." Its targetted mainly at Linux kernel hackers, though others may find it useful....