Linux设备驱动程序第三版学习笔记
Hens007
一无所有
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux设备驱动程序第三版学习(11)- 分配内存
一、kmalloc函数内幕 kmalloc的使用已经比较熟悉了,它的函数原型是: 1: #include 2: void *kmalloc(size_t size, int flags);<!--.csharpcode, .csharpcode pre {font-size:small; color:black; font-family:consol转载 2012-02-16 15:18:00 · 683 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(7)- 高级字符驱动程序操作(续2)- poll/select .
第六章:高级字符驱动程序操作(续2)以下为第三部分:poll/select系统调用poll方法执行了两个任务:第一项任务:调用poll_wait方法向poll_table结构添加一个等待队列第二项任务:返回一个位掩码(mask),该位掩码秒数了哪个操作可以立即执行而不会被阻塞。对于位掩码,定义在asm-generic/poll.h中,为了以后方便查阅,记录如下:转载 2012-02-16 15:11:22 · 754 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(6)- 高级字符驱动程序操作(续1)- 进程休眠 .
第六章:高级字符驱动程序操作(续1)以下是第2部分:掌握如何使进程休眠(并唤醒)分为4个小的部分(都是通过分析源码的形式,必要时加以总结):1、进程休眠的细节2、进程唤醒的细节3、scullpipe中read的实现4、scullpipe中write的实现1、 进程休眠的细节 Linux内核中最简单的休眠方式就是称为wait_event的宏(以及它的几个变种转载 2012-02-16 15:09:35 · 1175 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(8)- 高级字符驱动程序操作(续3)- 异步通知 .
第六章:高级字符驱动程序操作(续3)以下为第四部分:异步通知使用poll轮询方式的时候,相当于应用程序在需要的时候询问设备“准备好了吗?”,如果有这样一种情况,一个进程在低优先级正在执行长的循环计算,但又需要“尽可能快”的处理输入数据,如果采用poll的方式,那么需要这个应用程序周期性的调用poll来检测数据,也就是周期性的询问设备“准备好了吗?” 显然这种情况下poll并不是最佳的方转载 2012-02-16 15:12:55 · 615 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(4)- 并发和竟态
第五章学习:并发和竟态其实可以拿上“公共厕所”来做一个比喻,就是那种在大街上只有一个隔间的小型公厕。更容易理解并发、竟态和信号量。把“临界区”理解为“公共厕所”(临界区:在任意给定的时刻,代码只能被一个线程执行。/ 公共厕所:在任意给定的时刻,厕所只能被一个人使用。),“公共厕所”的来源是“并发”的(很多人可以一起去上厕所),假设A同学已经进去了,如果厕所什么标记都没有(没有信号量),那么转载 2012-02-16 15:04:56 · 723 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(1)(2)-字符设备驱动程序源码分析
一、insmod模块时调用module_init(scull_init_module),就来看一下这个函数: int scull_init_module(void)二、[cpp] view plaincopyprint?int scull_init_module(void) { int result, i; //声明两个整形变量 result,i de转载 2012-02-16 14:57:31 · 933 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(10)- 时间、延迟及延缓操作
接下来学习第七章:时间、延迟及延缓操作。本章主要学习了内核代码如何对时间问题进行处理。 关于Linux时钟处理机制的详细内容,参考本博客转载的“Linux 时钟处理机制”一文【赵 健博 (zhaojianbo@ncic.ac.cn), 硕士, 中国科学院计算技术研究所】一、时间。 内核通过定时器中断来跟踪时间流。定时器中断是硬件产生的,是周期性的。不同的硬件平台的周期不一样,例如x86转载 2012-02-16 15:16:30 · 717 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(9)- 高级字符驱动程序操作(续4) - llseek定位设备
第六章:高级字符驱动程序操作(续4)以下为第五部分:定位设备这部分相当简单,需要注意的是即使大多数设备进行定位操作没有意义,但是也不能步声明llseek操作,因为默认是允许定位的。而是应该在open中调用nonseekable_open,这样内核就不会让lseek调用成功。下面是scull驱动的main.c中的llseek实现。[cpp] view plaincop转载 2012-02-16 15:14:21 · 743 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(5)- 高级字符驱动程序操作 - ioctl .
第六章:高级字符驱动程序操作这章有以下几个部分主要内容:1) 学习实现ioctl系统调用,它是用于设备控制的公共接口2) 掌握如何使进程休眠(并唤醒)3) poll/select4) 异步通知5) 定位设备6) 设备文件的访问控制以下为第1部分, ioctl的学习。定义(摘自百度百科): ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。转载 2012-02-16 15:07:23 · 713 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(3)- 调试
开始书中第四章的学习:调试技术。主要有三种调试方式:打印、查询和监视。一、说说打印方式: 1)主要使用printk这个内核方法来进行。 2)printk方法可以附加日志级别:KERN_EMERG、KERN_ALERT、KERN_CRIT、KERN_ERR、KERN_WARNINT、KERN_NOTICE、KERN_INFO、KERN_DEBUG。 默认的级别在我现在转载 2012-02-16 15:02:57 · 741 阅读 · 0 评论 -
Linux设备驱动程序第三版学习(12)- 与硬件通信
继续往下学习第九章的内容。从这一章开始才接触到了一些实际的硬件设备,硬件是我的强项啊,呵呵。加油! 一、I/O端口和I/O内存 在学习这部分之前,需要先明确一个概念:side effect。明确这个概念有助于理解内存操作和IO寄存器操作的不同。LDD3中将这个词翻译成了“边际效应”,对此我持保留意见,至少我当时学习的时候就被这个词搞得一头雾水(我本身是搞硬件的,自认为对寄存器还是很转载 2012-02-16 15:20:02 · 875 阅读 · 0 评论
分享