linux设备驱动
文章平均质量分 63
a987860319
这个作者很懒,什么都没留下…
展开
-
设备树配置与编译
编译所有配置的设备树make dtbs编译指定的.dts文件以编译arch/arm/boot/dts/100ask_imx6ull-14x14.dts文件为例,编译后dts文件会变为dtb文件,首先检查dts文件是否配置使能了。查看arch/arm/boot/dts/Makefile文件,要编译出100ask_imx6ull-14x14.dtb,需要使能CONFIG_SOC_IMX6ULL配置选项:查看顶层.config文件中配置选项是否使能:book@100ask:~原创 2022-05-22 20:15:17 · 2177 阅读 · 0 评论 -
Linux驱动:休眠与唤醒
当应用程序必须等待某个事件发生,比如必须等待按键被按下时,可以使用“休眠-唤醒”机制。1. 休眠-唤醒流程APP调用read等函数;APP进入内核态read函数,等待按键按下,开始休眠;当按下按键时,驱动程序的中断服务程序被调用,它会读取按键值并唤醒APP;驱动中read被唤醒,将按键值返回给应用层。应用层read函数返回2. 相关函数参考内核源码:include\linux\wait.h2.1 休眠函数函数说明wait_event_interruptible(原创 2022-05-22 14:29:19 · 1737 阅读 · 0 评论 -
上拉电阻和下拉电阻,推挽和开漏输出
上拉电阻 & 下拉电阻上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。为什么需要上拉和下拉?以一个开关的例子来解说一下:原理图A没有接上拉电阻,原理图B接了上拉电阻。原理图A当开关SW1按下时,输入端口A是低电平,但当开关SW1没有按下时,输入端口A是什么电平呢?这个时候输入端口A相当于是悬空的,电平处于未知状态。原理图B,当开关SW5按下时,输入端B是低电平。当SW5没有按下时,输入端B被上拉成了高电平,不会存原创 2022-05-08 15:41:29 · 4978 阅读 · 0 评论 -
第一章 设备驱动程序简介
通常,设备驱动程序可以当做是进入Linux内核世界的大门。设备驱动程序的作用设备驱动程序的作用在于提供机制,而不是提供策略。 不同的环境通常需要不同的方式来使用硬件,我们应该尽可能做到让驱动程序不带策略。 驱动程序主要还是考虑下面三个方面的因素:提供给用户尽量多的选项、编写驱动程序要占用的时间、尽量保持程序简单而不至于错误丛生。可装载模块Linux有一个很好的特性:可以在运行时扩展。这意味着当系原创 2017-11-01 11:11:12 · 466 阅读 · 0 评论 -
Linux驱动中的并发控制
竞态通常是在对共享资源的访问的时候产生的。当两个执行线程需要访问相同的数据结构时,就会出现。所以应该尽量少的使用共享数据。临界区:在任意的时刻,代码只能被一个线程执行。休眠:当linux进程到达某个时间点,此时他不能进行任何处理时,它将进入休眠状态,这将把处理器让给其他执行线程直到将来它能够继续完成自己的处理为止。Linux信号量的实现头文件信号量的声明和初始化:原创 2015-03-23 13:11:46 · 858 阅读 · 0 评论 -
ok6410按键中断驱动程序
#include #include #include #include #include #include #define GPNCON 0x7F008830//ioremap使用的地址,与具体硬件相关irqreturn_t key_int(int irq, void *dev_id){ printk("key down!\n"); return 0;}void k原创 2014-09-13 11:23:03 · 2267 阅读 · 2 评论 -
Linux下的led驱动程序,ok6410
本程序采用动态映射的方法控制led,硬件平台为飞凌的ok6410led.h:定义控制命令#ifndef _LED_H#define _LED_H#define LED_MAGIC 'M'#define LED_ON _IO(LED_MAGIC, 0)#define LED_OFF _IO(LED_MAGIC, 1)#endif 驱动程序led.c#inclu原创 2014-08-24 20:43:38 · 1581 阅读 · 0 评论 -
Linux设备驱动中的ioctl
memdev.h#ifndef _MEMDEV_H#define _MEMDEV_H#define MEM_MAGIC 'm'#define MEM_RESTART _IO(MEM_MAGIC, 0)//使用内核提供的宏产生命令,#define MEM_SET _IOW(MEM_MAGIC, 1, int)//改命令向内核传递一个整形的参数#endif驱动程序memd原创 2014-08-24 13:34:44 · 1519 阅读 · 0 评论 -
Linux设备驱动实现自动创建设备节点
#include #include #include #include #include #include #include #define DRIVERNAME "xxx"#define DEV_MINOR 0static dev_t xxx_devno = 0;static struct class * xxx_class;struct xxx_dev { st原创 2014-08-24 13:45:54 · 1507 阅读 · 0 评论 -
最基本的字符设备驱动程序框架
/* * 说明:用于演示一个最基本的字符设备驱动程序框架。 * 实现一个字符设备驱动的步骤: * 1、实现模块代码框架 * 2、申请设备号,这个设备号由主、次设备号组成,是应用程序 * 通过文件访问设备的关键所在。在类unix系统中,一切设备 * 皆文件(网卡设备除外),而一个文件和一个inode对应,应用 * 层创建设备节点使用的mknod命令其实就是为了能够创建原创 2014-04-17 16:01:43 · 2150 阅读 · 0 评论 -
linux设备驱动中的并发控制
{//?什么是并发,为何要使用并发机制 并发即是 多件事情同时在执行 只有使这些设备都并发的执行才能满足性能要求。 例: 如果系统上挂10个设备,每个设备都请求,如果是串行顺序执行, 可能一个设备要等较长时间,系统才能响应它 } {//?如何实现并发 CPU是顺序的读入指令执行的, 如何来实现并发呢? 例: 当你A先生的业务时原创 2014-04-17 18:36:02 · 893 阅读 · 0 评论 -
linux设备驱动——一个驱动如何管理多个设备
/* * 说明:用于演示一个驱动如何管理多个设备。 */#include #include #include #include #include #include #include #include #include "ioctl.h"#define FSDEV_MAJOR 250#define FSDEV_MINOR 0#define FSDEV_NR 2#d原创 2014-04-17 17:05:31 · 3944 阅读 · 0 评论 -
linux驱动开发——模块基础知识
linux驱动开发——模块基础知识,模块参数,一个模块由多个C文件组成的编译方法,模块符号导出,多个模块同时编译原创 2014-04-17 16:29:53 · 1479 阅读 · 0 评论