`
文章列表
序言:试想如果在驱动方法中的read/write中,当数据不可用时,用户可能调用read,当输出缓冲区满时,设备并未准备好接受数据,这种情况下驱动程序可以阻塞该进程,并且置入休眠状态直到满足条件。 一,休眠 当一个进程休眠时,它会被标记为一种特殊状态并从调度器的运行队列中移走,直到某些情况修改了这个状态,进程才会在任意cpu上调度,即运行该进程。 在linux下,为了让进程安全的进入休眠状态,有两条规则需要牢记: 1)永远不要在原子上下文中休眠。 说明:原子上下文:在执行多个步骤时,不能有任何并发访问。不能再拥有自旋锁,seqlock,rcu ...
一、ioctl 1)概念:#include<sys/ioctl.h> 2)功 能: 控制I/O设备 ,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命令传送的是控制信息,其中的数据是辅助的数据。   3)用 法: int ioctl(int handle, int cmd,[int *argdx, int arg ...
一,概念 并发(concurrency)指的是多个执行单元同时被执行 竞态(race condition)并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问导致竞态 例子:两个进程试图向同一个设备的相同位置写入数据,造成数据混乱 解决:加锁或互斥 从而确保 同一时间 只有一个进程执行操作 二,规则 在设计自己的驱动程序时,第一个要记住的规则是,只要可能,就应该避免资源的共享。如果没有并发的访问,也就不会有竞态的产生。因此,仔细编写的内核代码应具有最少的共享。这种思想的最明显应用就是避免使用全局变量。 但是资源的共享是不可 ...
题目:有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌(每人头上贴两张) A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌, A说不知道,B说不知道,C说不知道,然后A说知道了。 请教如何推理,A是怎么知道的。如果用程序,又怎么实现呢? 思路:目的是推导出A的颜色,由于A先看B、C,则应先假定B、C的颜色然后推导A
一,内核中的调试支持 在内核配置菜单中有“kernel hacking”菜单选项,这些选项帮助用户检查很多错误,这里我列了一个表方便大家参考: kernel hacking 在哪里? ~# cd /usr/src/linux-source.3.0.0 ~#make menuconfig 则出现 查找USB驱动的方法 1)cd linux-source-3.0.0 2)lsusb /*查看所有连接到系统的USB设备*/ 3)拔掉USB设备,然后再运行一遍l ...
一,字符设备驱动(Character devices) 在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等 二,scull(Simple Character Utility for Loading Localities)区域装载的简单字符工具 是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个字符设备。scull的优点在于他不和任何硬件相关,而只是操作从内核分配的一些内存。任何人都可以编译和运行scull,而且还看看可以将scull移植到linux支持的所有计算机平台上。但另一方面,除了展示内核和字符设备驱动程序之间的接口并且让用户运行某些测试例程外,sc ...
设置测试系统开发环境及Hello World入门模块在前面博文中已经讲到,请参考http://blog.csdn.net/tianshuai11/article/details/7442168 一,核心模块与应用程序的对比 应用程序:小规模及中规模程序,从头到尾执行单个任务。 核心模块:预先注册自己,以便服务于将来的某个请求。然后他的初始化函数就立即结束。 退出时候,应用程序可以不释放自己申请的资源,而模块在退出之前必须仔细撤销初始化函数所做的一切。 二,用户空间和内核空间 模块运行在内核空间,应用程序运行在内核空间应用空间。 每当应用程序执行系统调用或者被硬件中断挂起 ...
一,设备驱动程序的作用 最显著的作用,是可以使计算机和设备通信,充当硬件的接口。操作系统只能通过这个接口来控制设备。 二是书中说的驱动在于提供机制,而不是策略,个人觉得这应该是我们编写驱动程序遵循的一 ...
一,环境搭建步骤 1)下载Linux源码 1> ~#apt-cache search linux-source 出现:linux-source - Linux kernel source with Ubuntu patches linux-source-3.0.0 - Linux kernel source for version 3.0.0 with Ubuntu patches 2>~#apt-get install linux-source-3.0.0 下载完成后,在/usr/src/下会出现一个linux ...
一,题目:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。 二,解释:比如输入m=4 n=4 则输出为:4 1+3 而2+2不正确,因为重复输出数字了 中心思想:1)如果1+2+3+……+n<m 则不存在这个数 2)如果m<n 则应该让n=m //因为m--->n之间的数都已经大于m了 没必要再计算了 3)如果m=n 输出n ...
一,Lists将元素按顺序储存在链表中.与向量(vectors)相比,它允许快速的插入和删除,但是随机访问却比较慢. assign()给list赋值 back()返回最后一个元素 begin()返回指向第一个元素的迭代器 clear()删除所有元素 empty()如果list是空的则返回true end()返回末尾的迭代器 erase()删除一个元素 front()返回第一个元素
一,string类 1)构造函数 string() string(const char *s) string(size_type n,char c)//包含n个元素的string 全部初始化为 c string(const char *s,size_type n)//初始化为s指向的前n个字符 示例: #include <iostream> #include <string> using namespace std; int main() { string one("NEU ...
一,运行阶段错误 1)程序打开一个不可用的文件 2)请求过多的内存 3)遭遇不能容忍的值 二,调用abort() 异常终止一个进程 #include <stdlib.h> 流程: 1)向标准错误流发送消息 abnormal program termination 2)终止程序 3)返回一个随实现而异的值,告诉OS或父进程,处理失败 #include <cstdlib> int main() { abort(); return 0; } 三,异常机制 1)例子: # ...
android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)   android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用 ...
Android数据存储之SQLite数据库存储 Android中每一个数据库对创建它的应用程序包套件来说都是私有的,默认情况下其他应用程序无法直接访问此私有数据库。所有的数据库文件存放在手机中的/data/data/package_name/databases路径下,以下是常用的与数据库相关的函数: 返回值
Global site tag (gtag.js) - Google Analytics