摘要: http://blog.sina.com.cn/s/blog_4ba5b45e0102e3q2.htmlLinux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一 阅读全文
posted @ 2013-09-01 17:02 kuangniuniu 阅读(1540) 评论(0) 推荐(0) 编辑
摘要: http://www.fsl.cs.sunysb.edu/kernel-api/index.html 阅读全文
posted @ 2013-09-01 16:59 kuangniuniu 阅读(123) 评论(0) 推荐(0) 编辑
摘要: http://bbs.ednchina.com/BLOG_ARTICLE_133368.HTM什么是等待队列? 在软件开发中任务经常由于某种条件没有得到满足而不得不进入睡眠状态,然后等待条件得到满足的时候再继续运行,进入运行状态。这种需求需要等待队列机制的支持。Linux中提供了等待队列的机制,该机制在内核中应用很广泛。 在Linux内核中使用等待队列的过程很简单,首先定义一个wait_queue_head,然后如果一个task想等待某种事件,那么调用wait_event(等待队列,事件)就可以了。Linux中等待队列的实现 等待队列应用广泛,但是内核实现却十分简单。其涉及到两个比较重要的数据 阅读全文
posted @ 2013-09-01 16:58 kuangniuniu 阅读(315) 评论(0) 推荐(0) 编辑
摘要: http://bbs.ednchina.com/BLOG_ARTICLE_133253.HTM走入Linux的殿堂已经有一年有余了,在这里我想将Linux的各种实现机制分析一遍,一方面对自己来说也是温故而知新,另一方面,促进大家的交流,最好能够给大家一些抛砖引玉的启迪。我是硬件出身,搞硬件已经好多年了,从是专门软件开发也接近两年了,在这一段时间内我越发认为软硬件协同设计是未来发展的主流,软硬件的界限越来越模糊,软硬件的设计思想是相通的,实现方法是各异的,实现的结果上当然也存在较大差别,因此,很有必要做好软硬件的协同设计。本着这样的想法,我想将我所认识的Linux分析一遍,特别是一些我认为精华和 阅读全文
posted @ 2013-09-01 16:54 kuangniuniu 阅读(252) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/qb_2008/article/details/6837262上节中我们已经掌握了创建大量内核线程的能力,可惜线程之间还缺乏配合。要知道学习ITC(inter thread communication),和学习IPC(inter process communication)一样,不是件简单的事情。本节就暂且解释一种最简单的线程同步手段—completion。 打开include/linux/completion.h,你就会看到completion使用的全部API。这里简单介绍一下。[cpp] view plaincopyprint?struct com 阅读全文
posted @ 2013-09-01 16:37 kuangniuniu 阅读(360) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/liwendovo/article/details/7793487Linux 2.6内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。(一)利用系统共享的工作队列添加工作:Ø 第一步:声明或编写一个工作处理函数void my_func();Ø 第二步:创建一个 阅读全文
posted @ 2013-08-25 16:43 kuangniuniu 阅读(8532) 评论(0) 推荐(2) 编辑
摘要: http://blog.csdn.net/huguohu2006/article/details/6396866oremap_nocache()函数我想大家都不陌生,现在我就把此函数分析一下,不当之处请大家谅解!对于EHCI 来说它把它本身的寄存器和内存映射到内存中区!但是站在CPU的角度来说,我们无法直接访问这块内存空间,需要将设备的总线地址映射成一个cpu可访问的线性地址!调用ioremap_nocache()函数之后,返回一个线性地址,此时CPU 可以访问设备的内存(已经将其映射到了线性地址空间中了),此时CPU可以使用访问内存的指令访问设备的内存空间(host bridge 判断访问物 阅读全文
posted @ 2013-08-25 16:30 kuangniuniu 阅读(604) 评论(0) 推荐(0) 编辑
摘要: 一直从事Qualcomm平台的手机开发,以后会陆续总结Q平台的开发经验,与大家分享 阅读全文
posted @ 2013-08-25 14:49 kuangniuniu 阅读(183) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/dreamxu/article/details/5866593一、定义:linux/include/linux/completion.h 13struct completion { 14 unsigned int done; 15 wait_queue_head_t wait; 16};二、作用:虽然信号量可以用于实现同步,但往往可能会出现一些不好的结果。例如:当进程A分配了一个临时信号量变量,把它初始化为关闭的MUTEX,并把其地址传递给进程B,然后在A之上调用down(),进程A打算一旦被唤醒就撤销给信号量。随后... 阅读全文
posted @ 2013-08-25 14:48 kuangniuniu 阅读(444) 评论(0) 推荐(0) 编辑
摘要: #definepthread_mutexattr_t attr;pthread_mutex_tXX_mutex;#functions:pthread_mutexattr_initpthread_mutexattr_settypepthread_mutex_initpthread_mutex_lockpthread_mutex_unlock 阅读全文
posted @ 2013-08-20 13:50 kuangniuniu 阅读(167) 评论(0) 推荐(0) 编辑