- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 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 2212
原创 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 725
原创 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 748
原创 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 1030
原创 二级指针操作链表的小技巧
内核中register_filesystem函数 struct file_system_type ** p; p = find_filesystem(fs->name, strlen(fs->name)); 返回的是最后一个节点的next指针的地址 if (*p) *p存在说明不是最后一个节点。 res
2013-01-29 15:20:09 472
原创 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 5154
原创 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 443
原创 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 558
原创 GCC文档中比较大小的宏定义
#define max(a,b) ((a) > (b) ? (a) : (b)) But this definition computes either a or b twice, with bad results if the operand has side effects. In GNU C, if you know the type of the operands (here take
2013-01-28 10:36:44 898
原创 元字符
下表是元字符及其在正则表达式上下文中的行为的一个完整列表: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^
2013-01-28 10:35:41 413
原创 sed 实现cat -n
#!/usr/bin/sed -nf # Prime the pump on the first line pattern space中读入一行 x 首先是交换指令,将hold space和pattern space的内容互换 /^$/ s/^.*$/1/ 判断pattern space是否为空,如果刚开始运行则前面hold
2013-01-28 10:34:39 488
原创 sed center line
#!/usr/bin/sed -f # Put 80 spaces in the buffer 1 { x s/^$/ / s/^.*$/&&&&&&&&/ x } 1为地址,如果是第一行,则在hold space中保存80个空格 # del
2013-01-28 10:33:17 314
原创 C++ specialization.txt
explicit specialization 也称显式特化,全特化,显式具体化 使用明确的类型来代替模板中的类型参数 函数: 函数在全局则可以全特化,在普通类(非模板类)内部则不能, 例如 template T abc(T &a, U& b) { std::cout return a; } template char abc(char &a, int &b)
2013-01-28 10:30:19 331
原创 ELF动态链接
ELF动态链接 一.链接器ld-linux.so.2 链接器在.interp section中 动态库运行时查找动态库的顺序: 1 (ELF only).dynamic 中的RPATH, 编译时使用 -Wl,-rpath=指定,例如-Wl,-rpath=. 程序执行时会在当前目录下寻找动态库。 -Wl,-rpath=支持环境变量,如export MYDIR=/mnt; -Wl,-rp
2013-01-28 10:29:27 363
原创 C++ 对象内存分布
objdump -t test 64位系统上的输出 .text 00000000004006c0 l d .text 0000000000000000 .text 代码段。 .rodata 0000000000400b40 l d .rodata 0000000000000000
2013-01-28 10:28:40 471
原创 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 525
原创 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 631
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人