linux驱动开发移植
fcf1990501
这个作者很懒,什么都没留下…
展开
-
class_create(),class_device_create()创建/dev/xxx 名字
在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_c转载 2012-12-27 21:51:59 · 349 阅读 · 0 评论 -
linux设备驱动归纳总结--.platform设备驱动
linux设备驱动归纳总结(九):1.platform总线的设备和驱动xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动。xxxxxxxxxxxxxxxxxxxxxxxxxx转载 2013-01-08 15:27:19 · 274 阅读 · 0 评论 -
BSP 概念解析
BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程转载 2013-01-04 15:50:17 · 318 阅读 · 0 评论 -
字符设备驱动poll函数
#ifndef _MEMDEV_H_#define _MEMDEV_H_#ifndef MEMDEV_MAJOR#define MEMDEV_MAJOR 0/*预设的mem的主设备号*/#endif#ifndef MEMDEV_NR_DEVS#define MEMDEV_NR_DEVS 2/*设备数*/#endif转载 2012-12-27 21:52:54 · 244 阅读 · 0 评论 -
等待队列wait queue(wait_event() interruptible_sleep_on()等应用方法)
在Linux驱动程序中,可以使用等待队列(wait queue)来实现阻塞进程的唤醒。wait queue很早就作为一种基本的功能单位出现在Linux内核里了,它以队列位基础数据结构,与进程调度机制紧密结合,能够用于实现内核中异步事件通知机制。等待队列可以用来同步对系统资源的访问。(信号量在内核中也依赖等待队列来实现)。 Linux-2.6提供如下关于等待队列的操作: (1)转载 2012-12-27 21:48:34 · 902 阅读 · 1 评论 -
platform_get_resource 如何获取资源
这几天和小段研究了下platform_get_resource函数的使用,总结如下: 在platform机制下,板级文件BSP一般定义了设备的资源,在系统初始化的过程便对platform_device进行注册,接着注册platform_driver,两者都注册完毕之后哦,platform_driver便去probe,在probe的过程中,会使用platform_get_resour转载 2012-12-27 21:58:29 · 671 阅读 · 0 评论 -
Linux内存管理-高端内存
上一周一直在关注linux内存中3:1(3G:1G)的关系,并没有考虑到如果我的物理内存大于1G,那么内核空间1G的虚拟空间如何映射整个物理内存呢?以及内核是如何管理这大于1G的物理内存的。下面是转载的文章,解释了这个疑问。高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。为什么? 因为“内核直接映转载 2012-12-27 21:56:53 · 401 阅读 · 0 评论 -
高级字符设备驱动--中断下半部机制之workqueue(二)
工作队列workqueue工作队列(work queue)是另外一种将中断的部分工作推后的一种方式,它可以实现一些tasklet不能实现的工作,比如工作队列机制可以睡眠。这种差异的本质原因是,在工作队列机制中,将推后的工作交给一个称之为工作者线程(worker thread)的内核线程去完成(单核下一般会交给默认的线程events/0)。因此,在该机制中,当内核在执行中断的剩余工作时就处在原创 2012-12-27 21:55:20 · 267 阅读 · 0 评论 -
INIT_WORK(工作队列的理解)
以前内核里对这个函数是这样定义的 #define INIT_WORK(_work, _func, _data),可以理解为INIT_WORK会在你定义的_work工作队列里面增加一个工作任务,该任务就是_func。_func这个任务会需要一些数据作为参数,这个参数就是通过_data传递的而现在看驱动的时候你会发现调用INIT_WORK的时候是只有两个参数,去掉了数据的部分。也许你会原创 2012-12-27 21:54:05 · 13450 阅读 · 1 评论 -
Linux设备驱动编程之poll()函数原理
阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。 在Linux 关于上述例程,我们补充说一点,如果将驱动程序中的read函数改为:static ssize_t globalvar_read(st原创 2012-12-27 21:51:08 · 418 阅读 · 0 评论 -
select 和poll函数调用驱动的poll->poll_wait 理解
poll_wait不会挂起当前进程,而是把自己注册到某个事件等待队列中.poll_wait()是用在select系统调用中的. 一般你的代码会有一个struct file_operations结构, 其中fop->poll函数指针指向一个你自己的函数, 在这个函数里应该调用poll_wait() 当用户调用select系统调用时,select系统调用会 先调用转载 2012-12-27 21:50:02 · 935 阅读 · 0 评论 -
修改内核编译配置菜单(make menuconfig)
1.所加目录为daiq,文件如下:[daiq@localhost daiq]$ tree.|-- Kconfig|-- Makefile`-- test.c#注意此时各个目录中的Makefile和Kconfig文件是空的2.在新增的相应目录添加Kconfig和Makefile文件,上面的目录中已经添加。3.修改新增目录的父目录的Kconfig和Makefile文转载 2012-12-27 21:49:18 · 1073 阅读 · 0 评论 -
基于platform总线的中断(按键)字符设备驱动设计
1、platform简介为了理解platform总线设备驱动模型的实际运用,我首先分析了基于S3C2410的看门狗驱动实现过程,我本着将自己学过的知识在温习一遍的态度,完成了基于platform平台总线的外部中断(按键)的基本实现过程,分别采用了混杂字符设备和一般字符设备进行了操作,其中混杂字符设备驱动、应用程序参照了 Y-Kee http://blog.csdn.net/ayangke,原创 2012-12-27 21:59:15 · 444 阅读 · 0 评论 -
高级字符设备驱动--中断下半部机制之tasklet(一)
综述Linux把中断处理例程分两部分:上半分:实际响应中断的例程。下半分:被顶部分调用,通过开中断的方式进行。两种机制实现:Tasklet工作队列work queue上半部的功能是"登记中断",当一个中断发生时,它进行相应地硬件读写后就把中断例程的下半部挂到该设备的下半部执行队列中去。因此,上半部执行的速度就会很快,可以服务更多的中断请求。但是,仅有转载 2012-12-27 21:56:04 · 292 阅读 · 0 评论 -
OSD的主要实现方法和类型 .
目前有两种主要的OSD实现方法:外部OSD发生器与视频处理器间的叠加合成;视频处理器内部支持OSD,直接在视频缓存内部叠加OSD信息。 外部OSD发生器与视频处理器间的叠加合成的实现原理是:由一个MCU内建的字符发生器及显示缓存,利用快速消隐(Fast-Blank)信号切换电视的画面和OSD显示内容,使OSD的字符等内容叠加在最终的显示画面上,在OSD和显示画面叠加处理过程中转载 2013-01-15 18:00:55 · 1186 阅读 · 0 评论