`
文章列表
本文所涉及实验为博文http://blog.csdn.net/tianshuai11/article/details/7465587中示例,请先阅读上述博文,然后消化以下例子 一,模块方法 jiq.c #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h> #include <linux/sched.h> #include <linux/kernel.h> #include <linux/fs.h> ...
本文所涉及实验为博文http://blog.csdn.net/tianshuai11/article/details/7465587中示例,请先阅读上述博文,然后消化以下例子 一,模块方法 jit.c #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h> #include <linux/ ...
一,度量时间差 时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 <linux/param.h>中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 HZ 的值,在编程时应当不依赖该HZ值。最好保持 HZ 的默认值。 系统定时器以可编程的频率中断处理器,此频率即为每秒的定时器节拍数,对应着内核变量HZ,HZ越大,定时器间隔越小,进程调用的准确性也会越高,但是HZ越大也会导致开销和电源消耗增大,更多的处理器周期耗费在定时器中断上下文中。HZ的值取决于体系架构,通常为50-1200 ...
题目:新建一个链表,然后反转一下 #include <iostream.h> #include <malloc.h> using namespace std; struct node { int data; node *next; }; void insert(node *root,node *p) { p->next=root->next; root->next=p; } node *create(int a[],int n) { node *root=(node *)malloc(sizeof(node)); root->dat ...
一,概念 异步通知:一旦设备就绪,则主动通知应用程序,应用程序根本就不需要查询设备状态。(类似于中断)信号是异步的,一个进程不必通过任何操作来等待信号的到达 在linux中,异步通知是使用信号来实现的,而在linux,大概有30种信号,比如大家熟悉的ctrl+c的sigint信号,进程能够忽略或者捕获除过SIGSTOP和SIGKILL的全部信号,当信号背捕获以后,有相应的函数来处理它。 二,应用程序角度考虑 应用程序为了启用文件的异步通知机制,必须执行两个步骤: 1)指定一个进程作为文件的"属主",进程 ...
一,poll 允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或者写入(但是请注意select自身会阻塞进程知道某个描述符满足条件或者超时),常常用于那些要使用多个输入或者输出流而又不会阻塞于其中任何一个流的应用程序中,比如telnet程序,需要2个输出,2个输入流而又不希望阻塞。 unsigned int (*poll)(struct file *filp,poll_table *wait);//把当前的文件指针挂到设备内部定义的等待   队列中。这里的参数table可以不考虑,是在select函数实现过程中的一个内部变量 该驱动方法一般分为两步: ...
序言:试想如果在驱动方法中的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 ...
Global site tag (gtag.js) - Google Analytics