
Linux 设备驱动开发
文章平均质量分 72
Linux 设备驱动开发
Aitel@
三尺微命,一介书生。
展开
-
linux驱动类别
基础驱动:如GPIO、UART、SPI、I2C、LCD、MMC等,一般不太复杂,资料和例程也多,修修改改一般就可以用。很多的驱动工程师,基本上就是“调参工程师”。即所谓的“hardware enable”作用。高级驱动:如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。体系非常复杂,很少有人能讲清楚。对于这些高级驱动,一般工作中都是专门的人来负责,非常专业。他们是某一领域的专家,比如摄像头专家、音频专家等。...原创 2020-03-18 15:28:29 · 290 阅读 · 0 评论 -
Linux底层驱动之设备驱动模型的一般分析方法-三角关系:总线、设备和驱动
到Linux2.6之后出现设备驱动模型,很多驱动都按照设备驱动模型改写了。设备驱动模型是以复杂度来换取代码的简洁度,其中主要的三角关系就是:总线、设备和驱动。系统中现有总线,然后驱动和设备分别注册到总线上,一旦驱动和设备匹配,驱动即支持该设备从而注册成功并受总线管理。总线屏蔽大量的技术细节,公用的技术。例如协议,规范等等。而驱动和设备体现的是Linux的“资源和实现”的分离思想。......原创 2021-02-01 08:26:45 · 259 阅读 · 0 评论 -
最大化利用内核资源进行Linux驱动开发
初看起来linux设备千差万别,各式各样,需要实现的设备驱动也涉及很多内容,但很大程度上内核已经帮我们做完了大部分的工作,开发流程总结起来大体可以归纳为一下几点,三个方面的内容:<第一个方面>(1)首先对驱动进行分类,先把设备归纳为哪个类型的驱动,归纳正确后再利用内核提供的子系统进行开发(内核提供的子系统主要包括:Input子系统,RTC子系统,IIC子系统,USB子系统,音频...原创 2020-03-18 15:23:17 · 111 阅读 · 0 评论 -
linux驱动开发一些常见目录说明
1. 系统模块参数配置目录:/sys/module/root@maya-g450:/sys/module# ls -l总用量 0drwxr-xr-x 5 root root 0 1月 8 21:04 6lowpan_iphcdrwxr-xr-x 3 root root 0 1月 9 00:20 8250drwxr-xr-x 3 root root 0 1月 9 00:20 acpidrwxr-xr-x 3 root root 0 1月 9 00:20 acpi_cpufreq...原创 2021-09-09 15:23:47 · 387 阅读 · 0 评论 -
对 linux驱动 及 字符型设备驱动 的理解
驱动中对 udev (自动创建设备节点)的主要做法是:在驱动初始化代码里调用 class_create() 为该设备创建一个 class,再为调用 device_create() 创建对应设备。内核中定义了 struct class 结构体。顾名思义,一个 struct class 结构体类型的变量对应一个类,内核同时提供了 class_create() 函数,可以用它来创建一个类(class),这个类(class)存放在 sysfs 下面,一旦创建好了这个类,再调用 d...原创 2021-12-21 16:54:57 · 329 阅读 · 0 评论 -
Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设...转载 2021-12-30 19:43:20 · 2201 阅读 · 0 评论 -
Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。 具体udev相关知识这里不详细阐述,可以移步Linux 文件系统与设备文件系统 —— udev 设备文件系统,这里主要讲使用方法。 在...转载 2021-12-30 20:17:22 · 736 阅读 · 0 评论 -
Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
前面我们学习了字符设备结构体cdevLinux 字符设备驱动开发 (一)—— 字符设备驱动结构(上) 下面继续学习字符设备另外几个重要的数据结构。 先看下面这张图,这是Linux 中虚拟文件系统、一般的设备文件与设备驱动程序值间的函数调用关系;上面这张图展现了一个应用程序调用字符设备驱动的过程, 在设备驱动程序的设计中,一般而言,会关心 file 和 inode 这两个结构体 用户空间使用 open() 函数打开一个字符设备 fd = open("/dev/h...转载 2021-12-30 20:22:28 · 531 阅读 · 0 评论 -
Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
我们已经介绍了两种重要的数据结构 struct inode{...}与 struct file{...} ,下面来介绍另一个比较重要数据结构 struct _file_operationsstruct _file_operations在Fs.h这个文件里面被定义的,如下所示:struct file_operations { struct module *owner;//拥有该结构的模块的指针,一般为THIS_MODULES lo...转载 2021-12-30 20:12:47 · 1486 阅读 · 0 评论 -
class_create和device_create与mdev和udev关系
class_create和device_create 会在虚拟文件系统生成信息。然后 mdev和udev 根据 信息创建设备节点转载:class_create和device_create与mdev和udev关系_aningxiaoxixi的博客-优快云博客原创 2021-09-17 17:14:46 · 364 阅读 · 0 评论 -
Linux内核驱动注册方式泛谈
Linux驱动注册有多种方式,通常是以内核提供的表征数据结构封装后按照内核子系统提供的接口函数进行注册,还有一些是比较复杂的以链表方式进行维护。以下对几种驱动注册方式进行介绍:一、子系统有专门的驱动注册函数:例如RTC子系统,提供rtc_device_register注册接口函数。例如:rtc_device_register(client->name,&client->...转载 2020-03-18 15:41:55 · 241 阅读 · 0 评论 -
Linux设备驱动程序 之 完成量说明
内核编程中常见的一种模式是,在当前线程之外初始化某个活动,然后等待该活动的结束;这个活动可能是,创建一个新的内核线程或者新的用户空间进程、对一个已有进程的某个请求,或者某种类型的硬件动作等;内核提供了完成量(completion)来完成上述需求;完成量是一个轻量级的机制,它允许一个线程告诉另一个线程某个工作已经完成;为了使用完成量,代码需要包含<linux/completion.h>;可以利用下面的宏静态的创建和初始化完成量;#define DECLARE_COMPLETION(wor转载 2021-12-04 15:02:38 · 310 阅读 · 0 评论 -
aliases节点解析
在设备树中有一个叫做aliases的节点: / { ... ... chosen { stdout-path = "/serial@13800000"; bootargs = "root=/dev/ram0 rw rootfstype=ext4 console=ttySAC0,115200 ethmac=1C:6F:65:34:51:7E init=/linuxrc"; }; a转载 2021-10-25 17:47:57 · 714 阅读 · 0 评论 -
Linux设备树特殊节点(aliases、chosen)介绍
Linux设备树特殊节点( aliases、chosen )介绍1、aliases 子节点2、chosen 子节点1、aliases 子节点打开 imx6ull.dtsi 文件, aliases 节点内容如下所示:单词 aliases 的意思是“别名”,因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。不过我们一般会在节点命名的时候会加上 label,然后通过&label来访问节点,这样也很方便,而且设备树里面大量的使用&label 的.转载 2021-10-26 09:36:43 · 1763 阅读 · 0 评论