2015年3月9日

摘要: 一、应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数,找到使用的file_operations,即应用程序与tty架构的统一接口。步骤不再赘述。sta... 阅读全文

posted @ 2015-03-09 23:23 Bumble_Bee 阅读(3044) 评论(0) 推荐(0) 编辑

摘要: 串口驱动是由tty_driver架构实现的。一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中。本文先介绍应用程序中打开设备的open函数的整个历程。 首先在串口初始化中会先注册一个串口驱动,函数原型为 int uart_register_driver(struc... 阅读全文

posted @ 2015-03-09 15:15 Bumble_Bee 阅读(616) 评论(0) 推荐(0) 编辑

2015年2月17日

摘要: 平台总线是linux2.6内核加入的一种虚拟总线,使用流程: 1、定义设备 2、注册设备 3、定义驱动 4、注册驱动总线上的设备和驱动相互匹配由总线来完成。一、定义设备 平台设备描述结构:struct platform_devicestruct platform_device { c... 阅读全文

posted @ 2015-02-17 19:02 Bumble_Bee 阅读(343) 评论(0) 推荐(0) 编辑

摘要: 一、总线模型(转自国嵌论坛) 1.随着技术的进步,对热插拔的要求以及可移植性的要求越来越高,从Linux2.4开始虽然有了模型但是正式提出是在Linux2.6。 2.关键词是总线,驱动,设备 3.总线能够感知设备的插拔: (1)插入新设备的时候知道有设备插入,那么就去总线上已有的驱动里面... 阅读全文

posted @ 2015-02-17 00:21 Bumble_Bee 阅读(228) 评论(0) 推荐(0) 编辑

2015年2月16日

摘要: 一、 当应用程序要对某个资源进行访问的时候,如果这个资源没有或者说被占用,这个应用程序就要进入阻塞状态,在linux系统中它会进入一个内核等待队列,等到被唤醒之后才能运行。这就是阻塞机制,它对一个驱动程序来说是很重要和必要的。二、如何使用等待队列 1、定义等待队列 wait_queue_... 阅读全文

posted @ 2015-02-16 23:55 Bumble_Bee 阅读(252) 评论(0) 推荐(0) 编辑

摘要: Linux使用struct timer_list来描述一个定时器。 重要成员: expires:定时时长 *function:超时执行函数名使用流程: 1、定义定时器变量/*定义定时器变量结构体*/struct timer_list key_timer; 2、初始化定时器 a... 阅读全文

posted @ 2015-02-16 23:38 Bumble_Bee 阅读(174) 评论(0) 推荐(0) 编辑

摘要: 一、中断嵌套 当系统正在执行某中断处理函数时,又产生了一个新的中断,这就叫做中断嵌套。当中断为慢速中断时,新的中断会取代当前中断,即当前中断没有执行完就结束了;当中断为快速中断时,新的终端就不会产生。这两种情况都是我们不愿意看到的情况,所以就有了今天的题目——中断分层。二、中断分层 中断分层是将... 阅读全文

posted @ 2015-02-16 23:25 Bumble_Bee 阅读(314) 评论(0) 推荐(0) 编辑

摘要: Linux进行中断处理的4个步骤: 1、当中断产生,跳到统一入口IRQ_SVC 2、获取中断号 3、根据中断号找到irq_desc结构 4、从irq_desc结构中取出事先注册好的中断处理函数Linux中断处理程序设计: 1、注册中断 2、实现中断处理函数 3、注销处理一、注册中断 ... 阅读全文

posted @ 2015-02-16 22:58 Bumble_Bee 阅读(292) 评论(0) 推荐(0) 编辑

摘要: 一、混杂设备 Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述)。miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice... 阅读全文

posted @ 2015-02-16 22:44 Bumble_Bee 阅读(592) 评论(0) 推荐(0) 编辑

摘要: LED的驱动程序很简单,按照张字符型设备驱动设计方法顺下来即可实现,这里主要讲几个注意事项。 一、在linux系统中,操作硬件不能够使用物理地址,一定要用虚拟地址。将物理地址转化为虚拟地址的函数如下: #defineioremap(cookie,size) 其中cookie为要转化的物... 阅读全文

posted @ 2015-02-16 22:33 Bumble_Bee 阅读(282) 评论(0) 推荐(0) 编辑