kmalloc的原型如下: 1 void *kmalloc(size_t size, gfp_t flags) 第一个参数是要分配的块的大小,第二个参数是分片标志; flags标志 最常用的标志是GFP_KERNEL,表示内存分配(最终总是调用get_free_page来实现实际的分配,这就是GFP ...
分类:
系统相关 时间:
2019-10-29 19:51:31
阅读次数:
122
尽管大多数时候阻塞型和非阻塞型操作的组合以及select方法可以有效的查询设备,但是某些时候用这种技术处理就效率不搞了; 例如:一个进程在低优先级执行长的循环计算,但又需要尽可能快的处理输入数据,如果该进程正在响应来自数据收集外设新观测的数据,则应该在新数据可用时理解知晓并处理;我们可以使用poll ...
分类:
系统相关 时间:
2019-10-29 19:51:17
阅读次数:
106
当共享资源是一个简单的整数值时,可以使用内核提供的一种原子的整数类型,称为atomic_t,定义在<linux/types.h>中,操作定义在<linux/atomic.h>中; 内核提供了一组针对原子位进行操作的函数,它们与体系结构相关,定义在文件<asm/bitops.h>;即使是在SMP计算机 ...
分类:
系统相关 时间:
2019-10-29 19:48:41
阅读次数:
97
除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制,通常这种需求使用ioctl方法支持,该方法实现了同名的系统调用; 在用户空间,ioctl系统调用的原型如下: 原型中的可变参数不是数目不定的一串参数,而只是一个可选参数;可选参数的具体格式依赖于控制命 ...
分类:
系统相关 时间:
2019-10-29 19:38:48
阅读次数:
120
内核通过定时器中断来跟踪事件流; 时钟中断由系统定时硬件以及周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个细节结构有关的常数;作为一般性规则,即使知道对应平台上的确切HZ值,也不应该在编程时依赖该HZ值; 如果想改变系统时钟中断发生的频率,可以通过修改HZ值来进行,但是,如果修改了头文 ...
分类:
系统相关 时间:
2019-10-29 19:35:24
阅读次数:
119
如果需要在将来的某个时间点调度执行某个动作,同时在该时间点到达之前不会阻塞当前进程,则可以使用内核定时器; 内核定时器是一个数据结构,它告诉内核在用户定义的时间点使用用户定义的参数来执行一个用户定义的函数; 被调度运行的函数几乎肯定不会再注册这些函数的进程正在执行时运行,相反,这些函数会异步的运行; ...
分类:
系统相关 时间:
2019-10-29 19:31:14
阅读次数:
100
一个信号量本质是一个整数值,它和一堆函数联合使用,这一对函数通常称为P和V;希望进入临界区的进程将在相关信号量上调用P;如果信号量的值大于零,则该值会减少1,进程可以继续执行;相反,如果信号量的值为0或者更小,则进程必须等待知道其他人释放该信号量;对信号量的解锁通过调用V完成;该函数增加信号量的值, ...
分类:
系统相关 时间:
2019-10-29 17:09:33
阅读次数:
96
下载地址: http://www.gqylpy.com/di/16 《LINUX设备驱动程序(第3版)》PDF高清完整版 下载 内容简介 编辑 《LINUX设备驱动程序(第3版)》已针对Linux内核的2610版本彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用、利用 ...
分类:
系统相关 时间:
2019-08-18 19:42:02
阅读次数:
92
关于linux设备驱动是否使用全局变量的问题今天有人问我,关于linux设备驱动是否使用全局变量的问题,为什么说尽量不使用全局变量?其实这个问题从两方面说:1)使用全局变量,那么破坏了函数的重入性,为了实现函数重入,又不得不使用锁来保护全局变量。这个效率变得低下了。函数重入,主要是使用局部变量,即变量放在线程的栈中,各自使用自己的,就不会冲突。另外一种是使用锁来保护,保证数据的完整性。2)使用全局
分类:
系统相关 时间:
2019-05-10 17:59:36
阅读次数:
197
Triggered buffer support触发缓冲支持 在许多数据分析应用中,能够基于某些外部信号(触发器)捕获数据是比较有用的。 这些触发器可能是: 数据就绪信号 连接到某个外部系统的IRQ线路(GPIO或其他) 处理器周期性中断 用户空间在sysfs中读/写特定文件 数据就绪信号 连接到某 ...
分类:
系统相关 时间:
2019-04-23 21:17:26
阅读次数:
223