linux driver
arick2013
这个作者很懒,什么都没留下…
展开
-
File_operations结构----将驱动里的功能函数与系统调用关联起来
File_operations结构体 结构体file_operations在头文件 linux/fs.h中定义.在驱动程序中,用来存储对设备进行各种操作的函数的指针,可以看做是这些函数与系统调用的对应关系表。系统调用发生时,系统会读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。比如,我们在《第二个驱动》里有定义file_转载 2014-08-20 00:24:13 · 1574 阅读 · 0 评论 -
linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情形呢 ? 第一种,传给 user 一个错误讯息,说 buffer 已经满了,不能再写入。第二种,将 user 的要求 block 住转载 2015-11-18 14:57:35 · 519 阅读 · 0 评论 -
autoreconf: not found
./autogen.sh: 4: autoreconf: not found 是在不同版本的 tslib 下执行 autogen.sh 产生。它们产生的原因一样,是因为没有安装 automake 工具, (ubuntu 8.04)用下面的命令安装好就可以了。 sudo apt-get install autoconf automake libtool转载 2015-11-20 16:21:17 · 14908 阅读 · 1 评论 -
sema api
内核同步机制-信号量信号量通用信号量用户类进程之间使用信号量(semaphore)进行同步,内核线程之间也使用了信号量。信号量与自旋锁类似,保护临界区代码。但信号量与自旋锁有一定的区别,信号量在无法得到资源时,内核线程处于睡眠阻塞状态,而自旋锁处于忙等待状态。因此,如果资源被占用时间很短时,使用自旋锁较好,因为它可节约调度时间。如果资源被占用的时间较长,使用信号量较好,转载 2015-11-05 10:51:29 · 463 阅读 · 0 评论 -
Scheduling while atomic
"Scheduling while atomic" indicates that you've tried to sleep somewhere that you shouldn't - like within a spinlock-protected critical section or an interrupt handler.改进程序,在计时器里使用了workqueue,搞定问题。转载 2015-11-04 23:58:26 · 582 阅读 · 0 评论 -
list_for_each()与list_for_each_safe()的区别
list_for_each()的定义:[plain] view plaincopyprint?/** * list_for_each - iterate over a list * @pos: the &struct list_head to use as a loop counter. * @head: the head for y转载 2015-11-05 00:46:08 · 420 阅读 · 0 评论 -
wpa_supplicant软件架构分析
1. 启动命令wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下:wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0-c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt wpa_supplicant对于启动命转载 2015-09-08 11:00:06 · 958 阅读 · 0 评论 -
内存和I/O访问
内存管理单元MMUMMU具有虚拟地址和物理地址转换,内存访问权限保护等功能(1)TLB也就是我们说的快表,他缓存了小量的虚拟地址与物理地址的转换关系;(2)TTW,当TLB中没有缓存对应的地址转换关系时,需要通过内存中转换表(多为多级页表)来获得虚拟地址和物理地址的对应关系。linux内存管理对于包含MMU的处理器,使得进程能访问的内存达到4G,在linux系统中4G内存空间被转载 2015-09-07 18:00:10 · 527 阅读 · 0 评论 -
WIFI基本知识整理
主要内容:一、基本概述二、实践基础三、一些原理四、补充五、其它 一、基本概述============================1、有线和无线网络 目前有线网络中最著名的是以太网(Ethenet),但是无线网络WLAN是一个很有前景的发展领域,虽然可能不会完全取代以太网,但是它正拥有越来越多转载 2015-05-20 13:28:49 · 543 阅读 · 0 评论 -
call_usermodehelper使用实例
#define UMH_WAIT_PROC 1 char * argv[3]; argv[0] = "/sbin/mdev"; argv[1] = "-s"; argv[2] = 0; if (CallUserApp(argv) { printk("mdev -原创 2014-12-31 10:25:27 · 1194 阅读 · 0 评论 -
根据内核打印的段错误信息分析驱动程序——根据出错PC来分析
我们知道在内核里面不能够处理指向0地址的指针,我们故意引入这样一个指针,并根据打印的出错信息来进行分析,下面是我们的程序:#include #include #include #include #include #include #include #include #include #include int *i;static i转载 2014-08-21 21:53:18 · 483 阅读 · 0 评论 -
linux INIT_WORK 创建工作队列
Linux 2.6内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。(一)利用系统共享的工作队列添加工作:转载 2015-11-18 14:41:01 · 486 阅读 · 0 评论