linux kernel
文章平均质量分 69
bluesandmetal
这个作者很懒,什么都没留下…
展开
-
Infecting loadable kernel modules 笔记
phrack 68期 Infecting loadable kernel modules 笔记 源文章:http://www.phrack.org/issues.html?issue=68&id=11#article 一。ELF文件格式与内核模块链接机制 1.对于内核模块来说,主要包括了ELF格式中的三个部分(按文件中的存储顺序):ELF header, sections, sectio原创 2013-01-28 10:26:19 · 637 阅读 · 0 评论 -
LINUX 2.6.37内存管理 SLAB分析之(2)SLAB缓冲创建与销毁
创建: kmem_cache_create函数: if (!name || in_interrupt() || (size size > KMALLOC_MAX_SIZE) { printk(KERN_ERR "%s: Early error in slab %s\n", __func__, name);原创 2013-01-28 10:56:18 · 456 阅读 · 0 评论 -
LINUX 2.6.37内存管理 SLAB分析之(3)SLAB对象分配与释放
static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid, void *objp) 当SLAB不够时用于分配新的SLAB。 offset = l3->colour_next; l3->colour_next++; if (l3->colour_next >= c原创 2013-01-28 10:56:58 · 5162 阅读 · 0 评论 -
LINUX 2.6.37内存管理 SLAB分析之(1)SLAB初始化
入口函数:kmem_cache_init, SLOB,SLUB均有提供相同函数名的函数作为初始化入口。 for (i = 0; i kmem_list3_init(&initkmem_list3[i]); if (i cache_cache.nodelists[i] = NULL; } 根据内存结点的数原创 2013-01-28 10:55:35 · 563 阅读 · 0 评论 -
3.2-module分析
/* This is where the real work happens */ SYSCALL_DEFINE3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs) { struct module *mod; int ret = 0; /* Must have p原创 2013-01-28 10:27:49 · 534 阅读 · 0 评论 -
PCI MSI MSI-X学习笔记
MSI 出现于PCI2.2中, PCI 3.0中允许针对每个中断设置掩码 MSI-X出现于PCI3.0中,相对MSI,每个设备允许有更多的中断,每个中断都可以独立配置 基本功能 设备通过向某个特定的地址写入来引发中断 与传统基于pin的PCI中断相比较: 1.传统PCI中断需要在设备之间共享, MSI MSI-X不需要共享 2.传统PCI中断会在设备将数据写入内存之前引发原创 2013-08-21 21:24:07 · 2220 阅读 · 0 评论 -
USB uhci主机控制器初始化分析
PCI检测到USB主机控制器后会进行驱动的匹配 usb_hcd_pci_probe函数进行设备与驱动的匹配,并执行初始化动作 创建USB_HCD结构 hcd = usb_create_hcd(driver, &dev->dev, pci_name(dev)); if (!hcd) { retval = -ENOMEM; goto disable_pci; } if原创 2013-08-18 10:45:35 · 1054 阅读 · 0 评论 -
USB hub 分析
HUB的驱动注册 static int __init usb_init(void)中调用 retval = usb_hub_init(); int usb_hub_init(void) { 向USB总线注册HUB的驱动程序 if (usb_register(&hub_driver) printk(KERN_ERR "%s: can't register hub driver\n原创 2013-08-18 10:46:26 · 758 阅读 · 0 评论 -
linux-3.4.58 UIO笔记
UIO初始化 static int uio_major_init(void) { static const char name[] = "uio"; struct cdev *cdev = NULL; dev_t uio_dev = 0; int result; 系统分配主设备号和次设备号 result = alloc_chrdev_region(&uio_dev,原创 2013-08-18 11:58:03 · 738 阅读 · 0 评论