
linux开发(内核态)
文章平均质量分 68
gogly
勤于学习、勤于思考、勤于实践、长期积累
展开
-
Linux内核中内存分配函数
1.原理说明 Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示。四级页表分别为: * 页全局目录(Page Global Directory) * 页上级目录(Page Upper Directory) * 页中间目录(Page Mid转载 2011-06-15 14:13:00 · 1107 阅读 · 0 评论 -
用户态和内核共享内存编程
例子中,用户态程序的KERNEL_VIRT_ADDR就是内核模块打印的地址p,这里是hard coding(先加载内核模块,再把打印的地址赋值给KERNEL_VIRT_ADDR),可以采用其他的方式传递。2.6内核验证。内核模块=============================================================#in转载 2011-06-21 09:41:00 · 1059 阅读 · 0 评论 -
内核与用户空间共享内存
一、用到的API与数据结构先看用户空间使用的API#include void *mmap(void *start, //映射的范围首地址,通常设NULL,让系统自动选地址,映射成功后返回该地址 size_t length, //映射的范围的大小 int prot, //映射区的保护属性 PROT_EXEC PROT_转载 2011-06-26 13:31:00 · 2171 阅读 · 0 评论 -
inux内存管理之非连续物理地址分配(vmalloc)
前面我们已经分析了linux如何利用伙伴系统,slab分配器分配内存,用这些方法得到的内存在物理地址上都是连续的,然而,有些时候,每次请求内存时,系统都分配物理地址连续的内存块是不合适的,可以利用小块内存“连接”成大块可使用的内存.这在操作系统设计中也被称为 “内存拼接”,显然,转载 2011-09-14 15:34:54 · 1083 阅读 · 0 评论 -
如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
/**伪代码,示例*32位地址,三级映射(没有pud_t),页面大小4KB*/unsigned long addr = 0x12345678;//要找的虚拟地址,用户空间所访问的地址unsigned long real_addr = 0x00;//要输出的地址转载 2011-08-30 21:52:55 · 3961 阅读 · 0 评论 -
关于udelay(); mdelay(); ndelay(); msleep();
在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay.虽然msleep和mdelay都有延迟的作用,但他们是有区别的.mdeday还忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多转载 2011-10-06 14:03:53 · 36678 阅读 · 2 评论 -
linux工作队列编程
首先了解workqueue:linux的工作队列(workqueue)是另外一种将工作推后执行的形式,它和软中断、tasklet 这两种下半部机制都有不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行转载 2011-10-06 14:06:53 · 1151 阅读 · 0 评论 -
Linux kernel 中的work queue原理
先简单快速总结一下,更详细的剖析后续用帖子编辑方式逐步完成。分成两大部分,第一部分是用来执行work queue中每个节点上挂载的函数的内核线程,第二部分是从驱动程序的角度看work queue的使用。第一部分 worker_thread内核线程Linux转载 2011-10-06 14:08:49 · 2476 阅读 · 0 评论