上一篇文章我们已经通过三条线索简单地描述了wifi驱动的框架,现在我们开始深入到每条线索中。首先我们从USB设备这条线索开始。在分析之前,我们需要理解在整个wifi模块中,USB充当什么角色?它的作用是什么?实质上wifi模块上的数据传输有两端,一端是wifi芯片与wifi芯片之间,通过无线射频(RF)进行数据传输;另一端则是wifi芯片与CPU之间,通过USB进行数据传输。...
分类:
其他好文 时间:
2015-02-03 13:23:13
阅读次数:
238
http://www.cnblogs.com/hanyan225/archive/2010/10/28/1863854.html1,概念DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以是系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提供系统吞吐...
分类:
系统相关 时间:
2015-01-20 22:08:56
阅读次数:
2757
1,区别块设备和字符设备:块设备是系统中能随机访问固定大小的数据片的硬件。,扇区是所有块设备物理上的最小可寻址单位,通常大小为512Byte,块是文件系统的最小寻址单位,大小是扇区的整数倍,同时不能超过一个页的大小~操作块设备的时候需要在内存中有一个对应的缓冲区,用struct buffer_hea...
分类:
系统相关 时间:
2015-01-20 22:07:31
阅读次数:
202
一,内核模块的概念经常在内核驱动代码看到类似fs_init()等驱动初始化函数,那么这个和module_init()函数的差别在哪里,宏定义__define_initcall(level,fn)对于内核的初始化很重要,他指示编译器在编译的时候,将一系列初始化函数的起始地址值按照一定的顺序放在一个se...
分类:
系统相关 时间:
2015-01-20 22:02:55
阅读次数:
245
一,请求处理块设备的处理函数里没有read write等函数,所有对块设备的请求如读取 写入等都是通过request函数处理的。request函数的原型是void request(request_queue_t *queue);request函数的处理是异步的。每一个设备都有一个请求队列,当请求队列...
分类:
系统相关 时间:
2015-01-20 21:59:46
阅读次数:
215
1,以下为示例代码:[cpp]view plaincopy#include#include#include#include#includeMODULE_LICENSE("DualBSD/GPL");staticchar*Version="2.0.1";staticintmy_match(struct...
分类:
系统相关 时间:
2015-01-20 21:56:07
阅读次数:
155
1,gendisk结构体在linux内核中,使用gendisk结构体来表示一个实际的磁盘设备的抽象,结构体定义如下所示:[cpp]view plaincopystructgendisk{intmajor;//主设备号intfirst_minor;//次设备号intminors;//最大次设备数,如果...
分类:
系统相关 时间:
2015-01-20 21:52:15
阅读次数:
209
一,中断处理函数中断处理函数运行在中断上下文,不可抢占、调度。中断上下文编程需要注意以下几点: 不能睡眠或调用 schedule 放弃CPU 不能调用任何可能睡眠的函数,例如:获取信号量 不能访问用户空间数据,例如:copy_from_user,因为它不是在进程上下文中执行的。 执行时间尽可能短in...
分类:
系统相关 时间:
2015-01-20 21:51:44
阅读次数:
207
Linux的模块驱动 接下来写个最简单的驱动程序,就像程序语言的hello world程序。
首先是:hello.c的代码: 这是个最简单的驱动程序。就是打印hello的信息。驱动程序和我们的程序语言结果有点不大一样。驱动模块的入口是倒数第二行的module_init()的函数。驱动模块的出口是mo...
分类:
系统相关 时间:
2015-01-04 21:10:21
阅读次数:
278