Linux设备驱动开发
主要用于嵌入式开发工作者或者爱好者进行Linux驱动开发交流,这里有笔者学习Linux驱动开发中遇到的问题或者较好的总结性文章,笔者在今后的工作中也将陆续添加在驱动开发中继续进行一些技术性总结,希望对大家的学习有所帮助
安河桥
这个作者很懒,什么都没留下…
展开
-
Linux驱动中定时器的使用
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux驱动中定时器的使用/** * linux/timer.h * 定义一个struct timer_list的结构体全局变量, 即定时器 */static struct timer_list buttons_timer;// 初始化该定时器init_timer(&buttons_timer);...原创 2020-04-28 10:58:51 · 460 阅读 · 0 评论 -
Linux中的同步互斥
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux中的同步互斥1. 什么是同步?生活中的例子: 洗菜必须在买菜之后, 做菜必须在洗菜之后, 吃饭必须在做菜之后.软件上的概念: 指的是散落在不同线程/进程中的代码片段, 他们的执行顺序必须是有序, 因为B代码片段的执行依赖着A代码片段的结果, 同理C代码片段的执行依赖着B代码片段的结果. 那...原创 2020-04-28 10:23:39 · 320 阅读 · 0 评论 -
Linux中的异步通知
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux中的异步通知 当我们的应用程序需要使用硬件设备时, 需要一直查询该硬件设备是否准备就绪, 这是一个不断查询的过程, 若一直未就绪就一直查询, 非常消耗资源. 而我们Linux的异步通知就是为了解决这一个问题. 当设备准备就绪时, 主动告诉应用, 从而节省不断查询而导致的资源浪费. 应用程序工作在Linux...原创 2020-04-27 17:48:57 · 233 阅读 · 0 评论 -
从应用层到内核 poll()函数的分析
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux内核中poll1. 应用层调用pollstruct pollfd { int fd; /* 需要被监视的文件描述符*/ short events; /* 对文件描述符fd上感兴趣的事件 */ short revents; /* 文件描述符fd上当前实际发生的事件 */};/** * wait f...原创 2020-04-27 10:47:05 · 442 阅读 · 0 评论 -
Linux设备树的按键中断驱动程序
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备树的按键中断驱动程序1. 管教复用设置为GPIO;上拉电阻/下拉电阻使能, 具体看自己的管脚复用手册;电平转换速率控制设置为慢(有些芯片没有这个选项);2. GPIO的中断寄存器使能选择电平触发/边缘触发;选择单边缘触发/双边缘触发; (电平触发才需要设置)选择下降沿或低电平触发/上升沿或高...原创 2020-04-27 09:13:34 · 774 阅读 · 0 评论 -
Linux驱动中的wait_event_interruptible()与wake_up_interruptible()
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux驱动中的wait_event_interruptible()与wake_up_interruptible()DECLARE_WAIT_QUEUE_HEAD(wq) 生成一个等待队列头wait_queue_head_t,名字为wq.wait_event_interruptible(wq, condition):...原创 2020-04-26 17:48:09 · 2205 阅读 · 0 评论 -
Linux 设备树中的中断
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux 设备树中的中断1. Linux 设备树还没出现时的中断 以前, 对于每一个硬件中断(hwirq)都预先确定了它的中断号(virq), 这些中断号一般都写在一个头文件中. 比如: arch/arm/mach-s3c24xx/include/mach/irqs.h./* main cpu interrupts ...原创 2020-04-26 10:33:28 · 2757 阅读 · 0 评论 -
Linux内核对设备树的处理(下)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux内核对设备树的处理(下)4. device_node转换为platform_device原创 2020-04-24 09:09:25 · 680 阅读 · 0 评论 -
Linux内核对设备树的处理(上)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux内核对设备树的处理0. Linux内核的启动流程简介 Linux的启动过程可以分为两部分: 架构/开发板相关的引导过程和后续的通用启动过程. 而我们Linux内核对设备树的处理, 就是处在架构/开发板相关的引导过程.Linux uses DT data for three major purposes: Li...原创 2020-04-23 20:54:08 · 565 阅读 · 0 评论 -
MODULE_PARM_DESC(para, mesg)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) MODULE_PARM_DESC(para, ,mesg)1. MODULE_PARM_DESC(para, ,mesg)作用: 对模块的参数进行描述.用法: 使用modinfo查看驱动信息, 使用MODULE_PARM_DESC修饰的para就会被打印出来....原创 2020-04-16 11:53:31 · 1066 阅读 · 0 评论 -
linux驱动中的module_param与module_param_array
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) linux驱动中的module_param与module_param_array1. module_param(name, type, perm)宏作用: 向驱动模块提供参数, 或者说是驱动模块中的某一个变量赋值, 若没有赋值则使用默认值.参数说明:@param name 既是用户看到的参数名, 又是模块内接受参数的变...原创 2020-04-16 11:44:54 · 1112 阅读 · 0 评论 -
linux gpio_to_irq()源码分析
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) linux gpio_to_irq()源码分析背景说明: 在Linux设备树(linux 3.x版本引入)中, 设备的中断号不再在"irq.h"中硬编码定义, 而是在需要时自己手动去申请获得对应的硬件中断的软件中断号.( 前提是GPIO的相关模块已经被编入内核 )1. gpio_to_irq()的函数作用/** *...原创 2020-04-16 10:18:47 · 12311 阅读 · 0 评论 -
Linux设备树的规范 - DTS
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备树的规范 - DTS1. 语法总览 注释: 结点 = 节点Devicetree node格式:(设备树节点格式)[label:] node-name[@unit-address] { [properties definitions] [child nodes]};解释:字...原创 2020-04-13 10:43:19 · 637 阅读 · 0 评论 -
我的第一个设备树驱动程序-驱动端
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 我的第一个设备树驱动程序-驱动端1. 设备树与驱动的匹配方式 设备树与驱动的匹配方式与之前的设备驱动总线的匹配方式有一点差别, 设备驱动总线最简单的匹配方式使用的是(驱动端)struct device_driver中的name和(设备端)struct platform_device中的name进行匹配. 在设备树中, 设...原创 2020-04-07 16:56:43 · 554 阅读 · 0 评论 -
我的第一个设备树驱动程序-设备树端
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 我的第一个设备树驱动程序-设备树端1. .dts文件的编写文件路径: Linux源代码的arch/arm/boot/dts目录下, 选择一个和自己板子相符.dts文件./dts-v1/;#include "BOARDNAME.dtsi"/ { model = "VENDOR BOARDNAME DEMO Boar...原创 2020-04-07 09:44:20 · 414 阅读 · 0 评论 -
Linux设备树的引入
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备树的引入 在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的板级细节代码(如platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data),而这些板级细节对于内核来讲,不过是...原创 2020-04-03 16:58:25 · 448 阅读 · 0 评论 -
Linux设备树的一些命令
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备树的初步接触1. 编译设备树# 在Linux kernel的源目录下:make make ARCH=arm CROSS_COMPILE=arm-xxxxx-linux- dtbs2. 反编译设备树# 在Linux kernel的源目录下(在其他目录也行):scripts/dtc/dtc -I dtb...原创 2020-04-03 11:30:00 · 2153 阅读 · 0 评论 -
Linux平台总线设备驱动模型
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux平台总线设备驱动模型1. 传统Linux驱动模型 与 平台总线设备驱动模型 传统的Linux驱动模型将对于设备的一切操作都放在了一个文件当中, 这个文件既包含了硬件相关的设备信息(例如引脚信息), 也包含了对设备的操作函数, 这中模型直观, 容易. 但是站在软件设计的角度来看, 确实一种非常糟糕的方式, 它有...原创 2020-03-17 21:28:35 · 429 阅读 · 1 评论 -
Linux字符设备驱动传统框架
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux字符设备驱动传统框架1. 驱动常见类型解释// 函数操作集struct file_operations { struct module *owner; //THIS_MODULE //读设备 ssize_t (*read) (struct file *, char __us...原创 2020-03-12 21:47:55 · 135 阅读 · 0 评论 -
Linux驱动调试中常用的一些命令
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux驱动调试中常用的一些命令1. lsmod可以获取系统中已加载的所有驱动模块以及模块间的依赖关系;lsmod实际上是读取并分析"/proc/modules"文件内核中已加载模块的信息也存在于/sys/modules目录下;2. modprobemodprobe命令比insmod命令更强大, 它在加载某模...原创 2020-02-26 10:47:59 · 432 阅读 · 0 评论 -
Linux设备文件系统的起源-3, linux内核2.6引入的sysfs
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备文件系统的起源-3, linux内核2.6引入的sysfs#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/kernel.h>#incl...原创 2020-02-13 17:33:33 · 264 阅读 · 0 评论 -
Linux设备文件系统的起源-2, linux内核2.4引入的devfs
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备文件系统的起源-2, linux内核2.4引入的devfsdevfs(设备文件系统)是Linux2.4内核时引入的, 它使得设备驱动程序能自主得管理自己的设备文件(即/dev目录下的设备文件, 在此之前的驱动程序是需要自己手动创建设备文件的. 详情可看上一章).总的来说, devfs具有以下优点: 在设备...原创 2020-02-13 14:32:58 · 187 阅读 · 0 评论 -
Linux设备文件系统的起源-1, linux2.4之前, devfs还没出现的时候
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux设备文件系统的起源-1, linux2.4之前, devfs还没出现的时候当时的Linux设备驱动, 是这么写的:#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>static in...原创 2020-02-13 12:50:38 · 201 阅读 · 0 评论 -
Linux 编译内核模块的通用Makefile
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux 编译内核模块的通用MakefileKERN_DIR := xxxxx/linux-4.9.y-smpall: make -C $(KERN_DIR) M=`pwd` modulesclean: make -C $(KERN_DIR) M=`pwd` modules clean rm -rf modu...原创 2020-02-13 01:27:31 · 531 阅读 · 0 评论 -
Linux字符设备驱动-什么都没有的框架
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) Linux字符设备驱动-最简单的框架给自己写个笔记, 方便随时拿来写简单的东西和复习.#include <linux/init.h>#include <linux/module.h>static int __init xxx_init(void){ return 0;}stati...原创 2020-02-12 22:41:00 · 106 阅读 · 0 评论