
013_linux驱动
013_linux驱动
陆小果哥哥
这个作者很懒,什么都没留下…
展开
-
020_linux驱动之_输入子系统按键应用
(一)分配一个输入子系统结构体static struct input_dev *buttons_dev; /*分配一个input_dev结构体*/(二)设置这个输入子系统需要的动作 /* 1. 分配一个input_dev结构体 */ buttons_dev = input_allocate_device();; /*使用这个函数分配一个input_dev结...原创 2019-12-26 08:52:20 · 171 阅读 · 0 评论 -
019_linux驱动之_定时器的引入
(一)定义一个timer_list定时器结构体,linux 内核定时器 timer_list详解(二)初始化定时器,当超时时间expires到之后会调用buttons_timer_function函数这里我们不设置超时时间,也就是说刚第一次初始化时候会调用buttons_timer_function函数在其他的函数中修改超时函数,如按键中断中修改超时时间(三)修改超时时间,当如按键中断...原创 2019-12-26 08:50:22 · 136 阅读 · 0 评论 -
018_linux驱动之_阻塞和非阻塞
阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。非阻塞操作进程在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。fd = open("…", O_RDWR | O_NONBLOCK); //传入O_NONBLOCK是非阻塞,不传入的默认阻塞01...原创 2019-12-26 08:47:54 · 160 阅读 · 0 评论 -
017_linux驱动之_信号量
信号量信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。当获取不到信号量时,进程进入休眠等待状态。定义信号量struct semaphore sem;初始化信号量void sema_init (struct semaphore *sem, int val);void init_MUTEX(struct semaphore *sem...原创 2019-12-26 08:47:02 · 207 阅读 · 0 评论 -
016_linux驱动之_原子操作
原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量增加1void atomic_dec(...原创 2019-12-26 08:39:30 · 211 阅读 · 0 评论 -
015_linux驱动之_signal
首先看应用程序首先分析第二点使用函数signal(SIGIO, my_signal_fun);来设置,当驱动程序传递信号给应用程序时候会调用第一点的程序第三点是设置相关参数(二)当应用程序调用到底三点时候,就会在驱动程序中调用到第一点上面的驱动程序初始化了信号的相关参数,然后我们再驱动程序中调用上面的这一条就可以将信号发送给应用程序了,应用程序中就会调用图片中的第...原创 2019-12-26 08:38:04 · 267 阅读 · 0 评论 -
014_linux驱动之_信号符号名、描述和它们的信号值
原创 2019-12-26 08:36:44 · 176 阅读 · 0 评论 -
013_Linux驱动之_poll机制
功能:poll的机制与select相似,与select在本质上没有多大差别。管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制。技术资料:poll多路复用 这篇文章写得很好技术资料:poll机制分析首先我们看应用程序中poll的调用原型//文件 数量 ...原创 2019-12-26 08:34:55 · 204 阅读 · 1 评论 -
012_Linux驱动之_wait_event_interruptible
首先这篇博客讲解得挺好的,推荐wait_event_interruptible 使用方法2 .函数原型:#define wait_event_interruptible(wq, condition) ({ int __ret = 0; if (!(condition)) __wait_event_interruptible(wq, condition, __ret); __re...原创 2019-12-26 08:33:19 · 251 阅读 · 0 评论 -
011_Linux驱动之_s3c2410_gpio_getpin
功能:获取引脚状态函数原型:unsigned int s3c2410_gpio_getpin(unsigned int pin){void __iomem *base = S3C24XX_GPIO_BASE(pin);unsigned long offs = S3C2410_GPIO_OFFSET(pin);return __raw_readl(base + 0x04) &...原创 2019-12-26 08:31:13 · 253 阅读 · 0 评论 -
010_Linux驱动之_DECLARE_WAIT_QUEUE_HEAD函数
功能:创建以个等待队列头函数原型#define DECLARE_WAIT_QUEUE_HEAD (name) / wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) #define __WAIT_QUEUE_HEAD_INITIALIZ...原创 2019-12-26 08:30:20 · 1817 阅读 · 1 评论 -
009_Linux驱动之_request_irq()函数
request_irq()函数原型int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)功能:注册中断服务函数@irq:要申请的硬件中断号@handler: IRQ发生时要调用的函数@irqf...原创 2019-12-26 08:28:56 · 551 阅读 · 0 评论 -
008_Linux驱动之_IO口的配置
测试:配置S3C2440的GPF4,5,6为输出测试IO的地址从芯片手册中获取以下资料从上面可以看出配置输出对应的设置是01=输出,那么对应位如:[9:8]需要设置成=01解析配置之前我们需要先将对应IO使用命令“&”设置成00,然后使用命令“|”设置成01则可使用命令GPFCON &= ~((0x3<<(42)) | (0x3<...原创 2019-12-26 08:27:33 · 443 阅读 · 0 评论 -
007_Linux驱动之_copy_from_user函数
copy_from_user函数的目的是从用户空间拷贝数据到内核空间解析原型:copy_from_user(void *to, const void __user *from, unsigned long n)@*to 将数据拷贝到内核的地址@*from 需要拷贝数据的地址@n 拷贝数据的长度(字节)也就是将@form地址中的数据拷...原创 2019-12-26 08:25:42 · 436 阅读 · 0 评论 -
006_linux驱动之_ioremap函数使用
(一)学习linux驱动之初,对ioremap函数的个人理解(二)博客:实验探究 ioremap 这篇文章作者通过验证来阐述自己的观点,个人觉得挺好的(三)函数原型基本简介void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)void *ioremap(unsigned long...原创 2019-12-25 11:06:11 · 925 阅读 · 0 评论 -
005_linux驱动之_class_device_create函数
(一)解析class_device_create函数(二)当我们使用class_create创建一个类之后我们就可以使用class_device_create函数在这个类下面创建一个设备了,class_create创建查看004_linux驱动之_class_create创建一个设备类(三)class_device_create函数原型struct class_device *class_d...原创 2019-12-25 11:04:32 · 639 阅读 · 0 评论 -
004_linux驱动之_class_create创建一个设备类
(一)解析:class_create函数和class_destroy函数创建一个类 和 删除一个类。(二)class_create函数原型struct class *class_create(struct module *owner, const char *name);查看函数注释:/ * *创建一个struct类结构@owner:指向“拥有...原创 2019-12-25 11:03:19 · 1211 阅读 · 1 评论 -
003_linux驱动之_file_operations函数
(一)解析file_operations函数解析002_linux驱动之_register_chrdev注册字符设备中的问题(二)file_operations结构原型使用举例(三)从上面的原型可以看出file_operations函数有很多类型,下面将解析一部分以.open为例:当应用程序使用open函数打开这个设备驱动时候,.open中的first_drv_o...原创 2019-12-25 11:02:21 · 403 阅读 · 0 评论 -
002_linux驱动之_register_chrdev注册字符设备
(一)解析:register_chrdev函数和unregister_chrdev函数(二)register_chrdev函数原型int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)register_chrdev() -为字符设备注册一个主号码。@ma...原创 2019-12-25 11:00:09 · 645 阅读 · 0 评论 -
001_linux驱动之_驱动的加载和卸载
(一)驱动的安装:可以将驱动程序静态编译进内内核中也可以将它作为模块在使用的时候再加载注:在配置内核时候,如果某个配置被设置为m,就表示它将会被编译成模块(二)加载和卸载驱动使用命令(模块的拓展名为.ko)insmod 命令加载 (使用示例:insmod first_drv.ko)rmmod 命令卸载 (使用示例:rmmod first_drv.ko)lsmod 查看内核...原创 2019-12-25 10:58:29 · 641 阅读 · 0 评论