
linux驱动
flyingdon
这个作者很懒,什么都没留下…
展开
-
一步步设计自己的驱动程序(转载)
实验目的:通过一个简单的设备驱动的实现过程。学会Linux中设备驱动程序的编写 实验内容:设计和实现一个虚拟命名管道(FIFO)的字符设备。写一个模块化的字符设备驱动程序 实验提示:一、设备的功能 设计和实现一个虚拟命名管道(FIFO)的字符设备。我们知道,管道是进程间通信的一种方式:一个进程向管道中写数据,另一个进程从管道中读取数据,先写入的数据先读出。我们的驱动程序要实现转载 2010-01-19 14:55:00 · 4842 阅读 · 4 评论 -
Request_irq和setup_irq的区别
Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。 这两个函数有什么样的区别呢?先看看setup_irqSetup_irq通常用在系统时钟(GP Timer)驱动里,注册系统时钟驱动的中断处理函数。下面举个列子, 如s3c2410 timer驱动:/* arch/a转载 2010-03-24 11:48:00 · 2215 阅读 · 0 评论 -
理解Semaphore及其用法详解
Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。Binary sem转载 2009-12-31 09:35:00 · 77668 阅读 · 2 评论 -
Kmalloc
Kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零。Flags参数#includeVoid *kmalloc(size_t size, int flags);第一个参数是要分配的块的大小,第二个参数是分配标志(flags),他提供了多种kmalloc的行为。最常用的GFP_KERNEL,他表示内存分配(最终总是调用get_free_转载 2009-12-30 16:43:00 · 25573 阅读 · 0 评论 -
kmalloc VS kmem_cache_alloc
Linux内核为需要动态分配内存的内核程序提供了kmalloc/kfree/kcalloc/krealloc函数接口,它们分别对应于C标准库的malloc/free/calloc/krealloc。除此之外,Linux还提供了kmem_cache_xxx系列系统调用,以提供比上述接口更低的时间复杂度和空间复杂度,那么两者的效率究竟能差多少,它们又各自适合于何种场合呢?Linux内存系统的层次结转载 2009-12-30 16:41:00 · 3325 阅读 · 0 评论 -
主次设备编号
主次编号字符设备通过文件系统中的名子来存取. 那些名子称为文件系统的特殊文件,或者设备文件, 或者文件系统的简单结点; 惯例上它们位于 /dev 目录. 字符驱动的特殊文件由使用 ls -l 的输出的第一列的"c"标识. 块设备也出现在/dev 中, 但是它们由"b"标识. 本章集中在字符设备, 但是下面的很多信息也适用于块设备.如果你发出 ls -l 命令, 你会看到在设备文件项中有 2 个数(原创 2009-12-30 14:39:00 · 2497 阅读 · 0 评论 -
Linux驱动程序开发 - 设备控制接口
序言设备驱动程序的一个基本功能就是管理和控制设备,同时为用户应用程序提供管理和控制设备的接口。我们前面的“Hello World”驱动程序已经可以提供读写功能了,在这里我们将扩展我们的驱动以支持设备控制接口,在Linux中这个接口是通过ioctl函数来实现的。设备控制接口(ioctl 函数)回想一下我们在字符设备驱动中介绍的struct file_operations 结构,这里我们将介绍一个新的转载 2009-12-29 09:08:00 · 4496 阅读 · 1 评论 -
在Linux上找出并解决程序错误的主要方法
来源:http://www.y768.com/content/view/5755/109/Steve Best(sbest@us.ibm.com)JFS 核心小组成员,IBM2002 年 8 月您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回顾四种调试问题的情转载 2010-03-05 09:36:00 · 2582 阅读 · 0 评论 -
Linux设备驱动程序--与硬件通信18051101072
I/O 端口和 I/O 内存每种外设都是通过读写寄存器来进行控制。 在硬件层,内存区和 I/O 区域没有概念上的区别: 它们都是通过向在地址总线和控制总线发出电平信号来进行访问,再通过数据总线读写数据。因为外设要与I/O总线匹配,而大部分流行的 I/O 总线是基于个人计算机模型(主要是 x86 家族:它为读和写 I/O 端口提供了独立的线路和特殊的 CPU 指令),所以即便那些没有单独I/O 端口原创 2009-12-27 16:36:00 · 2253 阅读 · 0 评论 -
cdev_init()函数
linux-2.6.22/include/linux/cdev.hvoid cdev_init (struct cdev *cdev,const struct file_operations *fops); @cdev: the structure to initialize @fops: the file_operations for this device Initi转载 2009-12-25 14:41:00 · 4549 阅读 · 1 评论 -
key(驱动程序)
#include #include #include #include #include #include #include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL"); dev_t key_dev_t; //定义设备号描述类型struct cd转载 2009-12-25 14:47:00 · 1353 阅读 · 0 评论 -
字符设备驱动模板
1. 字符设备驱动模块加载与卸载函数模板//设备结构体声明struct xxx_dev_t{ struct cdev cdev; …….}xxx_dev;//设备驱动模块加载函数static int __init xxx_init(void){ ……… cdev_init(&xxx_dev.cde转载 2009-12-25 14:38:00 · 816 阅读 · 0 评论 -
linux设备驱动之控制台驱动
一:前言 我们在之前分析过input子系统和tty设备驱动架构.今天需要将两者结合起来.看看linux中的控制台是怎么样实现的. 二:控制台驱动的初始化 之前在分析tty驱动架构的时候曾分析到.主设备为4,次设备为0的设备节点,即/dev/tty0为当前的控制终端. 有tty_init()中,有以下代码段: static int __init tty_init(vo原创 2009-12-25 14:09:00 · 881 阅读 · 0 评论 -
自旋锁和信号量 介绍
1. 自旋锁 Linux内核中最常见的锁是自旋锁。一个自旋锁就是一个互斥设备,它只能有两个值:"锁定"和"解锁"。如果锁可用,则"锁定"位被设置,而代码继续进入临界区;相反,如果锁被其他进程争用,则代码进入忙循环并重复检查这个锁,直到锁可用为止。这个循环就是自旋锁的"自旋"。自旋锁最多只能被一个可执行的线程持有。如果一个执行线程试图获得一个被争用的自旋锁,那么该线程就会一直进行忙循环-旋转载 2010-01-19 15:32:00 · 2051 阅读 · 0 评论 -
S3C2410的linux 下DMA驱动程序开发
<br />网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接手时无资料借鉴的茫然,故写点介绍,期待能给有DMA开发任务的网友们一点帮助。<br />本文将包括如下内容:<br />DMA驱动主要函数功能 <br />驱动中关键技术分析 <br />具体的DMA实例分析 <br />申明:本DMA驱动开发介绍仅适合S3C2410处理器类型,转载 2011-02-17 15:26:00 · 2354 阅读 · 0 评论