arm简单驱动写法
文章平均质量分 80
默默耕田人
从代码中探寻生活的奥秘
展开
-
arm驱动程序——按键程序6_互斥1—原子操作(韦东山的视频总结及针对linux-2.6.30)
互斥:指一个执行单元在访问共享资源的时候,其他的执行单元被禁止。所谓的原子操作一般是由多步组成的操作,执行过程中不会被其它的代码操作打断,从而实现互斥。用到的函数,结构体及其他:/*用于设置原子变量的值*/ATOMIC_INIT(i)/*对原子变量自增,并测试是否为0 *v:原子变量的地址*/atomic_dec_and_test(v)/*原子变量增加1 *原创 2013-06-11 15:57:17 · 1094 阅读 · 0 评论 -
linux中断机制及中断注册2(韦东山的视频总结及针对linux-2.6.30.4)
自己的总结有错误请评论,我们共同进步中断注册使用函数request_irq来注册,request_irq究竟做了什么,下面来分析: 以注册外部中断1 触发方式是双边沿 为例request_irq(IRQ_EINT1,buttons_irq,IRQ_TYPE_EDGE_BOTH,"s1",1);request_irq(unsigned int ir原创 2013-05-19 17:06:32 · 973 阅读 · 0 评论 -
arm驱动程序——按键程序5_异步通信(韦东山的视频总结及针对linux-2.6.30)
目的: 应用程序睡眠,当按下键时驱动程序 通知 应用程序去读取, 异步通知: 1.谁注册信号处理函数,怎么注册 2.谁发信号 怎么发 3.发给谁1.应用程序 注册信号处理函数 定义信号处理函数例如定义了my_signal_fun,原创 2013-06-11 12:47:38 · 1208 阅读 · 0 评论 -
arm驱动程序——按键程序6_互斥—信号量(韦东山的视频总结及针对linux-2.6.30)
信号量实现互斥的一个方法。只有得到信号量的进程才能执行临界区的代码,当得不到信号量时,进程会进入休眠等待状态。用到的函数,结构体及其他:/*定义并初始化信号量*/DECLARE_MUTEX(name)/*获得信号量,此时进程处于D状态, *进程处于睡眠状态,但是此刻进程是不可中断的。 *不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。原创 2013-06-11 20:50:12 · 1116 阅读 · 0 评论 -
POLL机制分析(韦东山的视频总结及针对linux-2.6.30.4)
此为部分内核代码。应用程序的poll -> sys_poll -> do_sys_poll -> (poll_initwait,和do_poll)应用程序的部分代码:int main(int argc,char **argv){ int fd; int val=1; unsigned char key_val;原创 2013-05-16 16:16:25 · 776 阅读 · 0 评论 -
arm驱动程序——点亮led-利用次设备号(韦东山的视频总结及针对linux-2.6.30)
主设备号标识设备对应的驱动程序;而次设备号则用来标识同一类设备中的某个唯一的设备。利用到的函数及结构在上面几节中都有说出,在此不再叙述。驱动设备: #include #include #include #include #include #include #include #include #include #include原创 2013-06-01 17:39:34 · 1265 阅读 · 0 评论 -
arm驱动程序——按键程序1(韦东山的视频总结及针对linux-2.6.30)
按键程序是以中断方式写的,至于中断的内核相关的知识看中断框架和注册一节,所用到的函数和结构:/*用来注册中断*//*irq:中断号,handler:中断处理函数,flags:中断触发方式, *name:中断名字,dev:用来传给中断函数的*/static inline int __must_checkrequest_irq(unsigned int irq, irq_han原创 2013-06-03 21:46:17 · 739 阅读 · 0 评论 -
arm驱动程序——按键程序3_定时器消抖(韦东山的视频总结及针对linux-2.6.30)
按键利用定时器消抖:1.定义timer_list结构体的变量。2.初始化定时器,3.增加定时器,启动定时器。所用到的结构体和函数等:/*初始化时一般设置,expires,function,data*/struct timer_list { /*定时器列表*/ struct list_head entry; /*定时器的到期时间,是jiffies原创 2013-06-08 19:38:55 · 1928 阅读 · 0 评论 -
arm驱动程序——点亮led(韦东山的视频总结及针对linux-2.6.30)
上面两节只是驱动程序的框架,下面就是点亮led了。目的:点亮led步骤: 1.写框架。 2.完善硬件相关操作。a.看原理图b.看2440手册c.写代码下面是所用到的函数及结构:/*由于用户空间中的指针,数据不能直接使用要用下面两个函数进行操作*//* 从用户空间得到数据,to:内核空间;from:用户空间;n:复制的数据长度*/copy_fr原创 2013-05-30 16:54:42 · 883 阅读 · 0 评论 -
arm驱动程序——手动设备节点 (韦东山的视频总结及针对linux-2.6.30.4)
驱动学的越到感觉知识越乱,从头开始理清。下面是看韦东山老师的视频总结的:写驱动程序主要是搞清楚驱动的框架,下面是写驱动的步骤:1. 写驱动的读写等函数,一般应用程序用到哪些就写哪些 。2. 2.1 定义一个file_operations结构体。 2.2 注册,就是把file_operation结构体告诉内核,使用register_chrdev函数.3. 谁原创 2013-05-29 16:07:27 · 764 阅读 · 0 评论 -
arm驱动程序——自动创建设备节点 (韦东山的视频总结及针对linux-2.6.30)
mdev机制根据/sys/下的系统信息来创建设备节点。自动创建节点的步骤:1.入口函数中: a.创建一个类。 b.在类下面创建一个设备。2.出口函数中: a.注销类下的设备。 b.销毁类。下面是所用的函数及结构: 定义类 static struct class *first_alloc_class; 定义类下的设原创 2013-05-30 10:37:14 · 997 阅读 · 0 评论 -
arm驱动程序——按键程序2(韦东山的视频总结及针对linux-2.6.30)
用到的结构及,函数及其他:/*用于产生一个等待队列的头文件,定义在wait.h中*/#define DECLARE_WAIT_QUEUE_HEAD(name) \ wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)/*pin;所要获取的引脚*/unsigned int s3c2410_gpio原创 2013-06-05 20:12:26 · 1231 阅读 · 0 评论 -
arm驱动程序——按键程序4_poll(韦东山的视频总结及针对linux-2.6.30)
poll机制分析在以前的都有说明了,要是不理解可以看poll机制 测试程序中都是用while(1)死循环查询,而利用poll函数可以睡眠固定时间,然后返回,也可以发生中断时唤醒要在测试程序中用poll函数时,必须驱动程序有poll。用到的函数及结构体:/*file_operations中定义的,具体定义时给予具体的函数名和参数*/unsigned int (*poll) (s原创 2013-06-09 21:30:26 · 986 阅读 · 0 评论 -
linux中断机制及中断注册1(韦东山的视频总结及针对linux-2.6.30.4)
自己的总结有错误请评论,我们共同进步。下面的以天嵌 用户模式下 按下按键k1 产生中断EINT1为例进行分析的,内核代码只是摘录中断相关的。下面为流程图,traps.c中early_trap_init(void)被用来设置各种异常向量,通俗的说就是把有关异常代码放到固定位置,当发生异常时,CPU会自动找到相关异常的代码进行执行。void __init early原创 2013-05-19 16:43:03 · 877 阅读 · 1 评论