![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
12_linux初级驱动
世界从而改变
这个作者很懒,什么都没留下…
展开
-
1. 设备号的申请
// 面向对象---将任何都看成对象, struct 就是对象 //设计一个对象类型,描述当前的设备信息,同时是一个全局的设备对象 struct led_desc{ dev_t devno; struct cdev *cdev; struct class *cls; struct device *dev; };//设置对象struct led_d原创 2016-06-24 19:53:22 · 492 阅读 · 0 评论 -
10. 中断下半部---工作队列
—————————————————#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/cdev.h>#include <linux/device.h>#include <linux/gpio.h>#include <linu原创 2016-06-24 20:32:31 · 1375 阅读 · 0 评论 -
9. 中断下半部---tasklet
—————————————————驱动- 初始化tasklet,为下半部做准备 tasklet_init(&key_dev->mytasklet,tasklet_half_irq_handle, 34);- 在中断执行函数 key_irq_handler(int irqno, void *dev_id); 中定义tasklet_schedule(&key_dev->mytaskle原创 2016-06-24 20:28:36 · 330 阅读 · 0 评论 -
8. 文件io模型—异步通信 kill
#客户端#要点三( 设置信号SIGIO的处理) 设置信号处理方法(当中断型号来之后自动跳到catch_signal( ) 函数执行 signal(SIGIO, catch_signal);设置信号的属主进程 fcntl(fd, F_SETOWN, getpid());将读写模式设置成异步模式 unsigned int flag = fcntl(fd, F_GETFL, 0);原创 2016-06-24 12:13:16 · 646 阅读 · 0 评论 -
7. 文件io模型—多路复用 poll
客户端 app#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include <linux/input.h>#include <poll.h>stru原创 2016-06-24 19:42:36 · 376 阅读 · 0 评论 -
2. base设备驱动的模型
#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/cdev.h>#include <linux/device.h>#include <asm/uaccess.h>#include <asm/io.h>#define GPC0原创 2016-10-21 12:20:03 · 572 阅读 · 0 评论 -
6. 文件IO模型的实现 ---阻塞 和 非阻塞
概念 1. 阻塞:当需要获取某个资源的时候,如果资源不可达,那么进程就会休眠 (让出调度权), 如果数据可达,进程就会被唤醒 2. linux大部分的函数默认都是休眠, 实际是需要驱动支持(降低CPU占用) 如: scanf(); accept(), read(); readfrom... a. 实现阻塞1. 初始化等待队列头原创 2016-06-26 17:42:28 · 286 阅读 · 0 评论 -
5. Linux驱动中断编程: 驱动按键
(有点像线程申请)1. 编写处理中断的函数---申请中断 int request_irq(unsigned int irq,irq_handler_t handler,unsigned long flags,const char * name,void * dev) 参数1:中断的号码,按键 a. 外部中断--IRQ_EINT(号码)--irqs.h原创 2016-06-26 17:17:03 · 390 阅读 · 0 评论 -
4. gpio 库
gpio库函数的使用—-非常方便的gpio操作方式 内核提供了一组函数,可以直接去操作gpio口,并不需要去对地址操作操作gpio的时候就是操作gpio的号码:S5PV210_GPC0(3)1. gpio_request(unsigned gpio,const char * label)//申请gpio的使用权2. gpio_free(unsigned gpio) //释放gpio 3.原创 2016-06-26 16:29:24 · 498 阅读 · 0 评论 -
3. ioctl
概念1. ioctl接口的概念和实现---给驱动发送命令 实际是给驱动发送指令, 命令一般都是会自定义 led1 --- on/off led2 --- on/off all --- on /off1.用户端: int ioctl(int d, int cmd, ...); 实例: 1. ioctl(fd,原创 2016-06-26 16:57:36 · 409 阅读 · 0 评论 -
Makefile
—————————————————ROOTFS_DIR = /opt/fs210/rootfs/helloc_armCROSS_COMPILE=arm-none-linux-gnueabi-#APP_NAME = key_testKO_NAME = mybusKO_NAME2 = mydevKO_NAME3 = mydrvifeq ($(KERNELRELEASE), )#KERNEL_原创 2016-06-24 20:01:44 · 287 阅读 · 0 评论