
linux驱动
文章平均质量分 57
学习迅为i-top4412教程做的笔记
Hello Jason
认真写好每一行代码!
展开
-
二十二、linux定时器
一、Linux 定时器介绍在 Linux 内核中, 定时器叫做内核定时器, 内核定时器用于控制某个函数, 也就是定时器将要处理的函数在未来的某个特定的时间内执行。 内核定时器注册的处理函数只执行一次, 即不是循环执行的。 定时器的使用范围(延后执行某个操作, 定时查询某个状态; 前提是对时间要求不高的地方) 。Hz: 系统时钟通过 CONFIG_HZ 来设置, 范围是 100-1000; HZ 决定使用中断发生的频率。 如果就没有定义的话, 默认是 100, 例: ...原创 2021-12-08 16:28:19 · 1415 阅读 · 0 评论 -
二十一、SPI设备驱动及应用(二)
一、原创 2021-12-08 13:36:50 · 1170 阅读 · 1 评论 -
二十、SPI设备驱动及应用(一)
先给出Linux SPI子系统的体系结构图: SPI子系统体系结构下面开始分析SPI子系统。Linux中SPI子系统的初始化是从drivers/spi/spi.c文件中的spi_init函数开始的,看看它的定义:00001025 static int __init spi_init(void)00001026 {00001027 int status;00001028 00001029 buf ...原创 2021-12-07 08:51:22 · 3011 阅读 · 0 评论 -
十九、I2C驱动及应用
一、概述1、Linux主机驱动和外设驱动分离思想外设驱动→API→主机驱动→板级逻辑--具体的i2c设备(camera,ts,eeprom等等)主机驱动:根据控制器硬件手册,操作具体的寄存器,产生波形。(单片机工程师肯定有强烈的冲动去配置i2c寄存器,产生波形!)。linux应用工程师:屏蔽了驱动和硬件。 linux驱动工程师:屏蔽硬件!提供标准的主机驱动,驱动工程师需要完成“外设驱动” 内核函数接口:(API)。主机...原创 2021-12-02 21:04:13 · 3749 阅读 · 0 评论 -
十八、中断之独立按键
一、简介中断:是指 CPU 在执行程序的过程中, 出现突发事件去处理, CPU 需要停止当前程序的执行, 转去处理突发 事件, 处理完成之后再返回原程序部分。中断源:是指引发中断的原因。硬件中断:一般指外设发出的中断请求以及内部硬件产生的中断(计算溢出, 除数为 0, 掉电等)软件中断:典型的是中断处理程序的下半部操作.硬件中断的分类内部中断: 内部硬件产生的中断(例如: 除数为 0)外部中断: 外设产生的中断(重点)外部中断的触发方式上升沿触发和下降沿触发电平触...原创 2021-11-25 21:30:24 · 1568 阅读 · 0 评论 -
十七、字符类 GPIOS
一、驱动代码(char_driver_leds.c)/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/#include <linux/init.h>/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/#include <linux/module.h>/*定义module_param module_param_array的头文件*/#include <linux/moduleparam原创 2021-11-25 21:00:16 · 229 阅读 · 0 评论 -
十六、字符驱动及应用
一、 驱动代码(char_driver.c)/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/#include <linux/init.h>/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/#include <linux/module.h>/*定义module_param module_param_array的头文件*/#include <linux/moduleparam.h&g原创 2021-11-24 15:21:07 · 135 阅读 · 0 评论 -
十五、linux 注册字符类设备和生成节点
一、注册字符类设备1、概述• 分配内存空间函数kmalloc– 分配连续的虚拟地址,用于小内存分配。在include/linux/slab.h文件中。– 参数1:申请的内存大小(最大128K),– 参数2:GFP_KERNEL,代表优先权,内存不够可以延迟分配• 清空内存空间的数据函数memset– 可以清空内存空间,也就是全部写为0– 参数1:内存地址– 参数2:0– ...原创 2021-07-19 17:09:53 · 451 阅读 · 1 评论 -
十四、linux 静态/动态申请字符设备号
一、静态申请字符类设备号• 字符设备函数在文件“include/linux/fs.h”中• 内核提供了函数来注册一组字符设备编号– register_chrdev_region()• register_chrdev_region()是提前知道设备的主次设备号,再去申请设备号,属于静态申请。二、动态申请字符类设备号• 字符设备函数在文件“include/linux/fs.h”中...原创 2021-07-16 16:07:37 · 737 阅读 · 0 评论 -
十三、linux 内核驱动模块传参数
在加载模块的时候,可以向它传参数。单个参数:内核模块可以通过module_param来传单个参数– module_param(name,type,perm)– name:模块参数的名称– type: 模块参数的数据类型(支持int long short uint ulong ushort类型)– perm: 模块参数的访问权限(S_...原创 2021-07-16 14:36:38 · 476 阅读 · 0 评论 -
十二、linux LED初始化
一、硬件原理图 我们今天的目标是将itop4412开发板上的两个led灯控制起来。先看一下原理图:二、GPIO需要的接口和定义1、Linux中申请GPIO的头文件– include/linux/gpio.h主要提供一些GPIO操作函数:2、三星平台的GPIO配置函数头文件– arch/arm/plat-samsung/include/plat/gpio-cfg.h – 包括三星所有处理...原创 2021-07-15 16:53:45 · 914 阅读 · 4 评论 -
十二、linux GPIO初始化
• 初始化过程简单描述– 平台文件分别定义好物理地址和虚拟地址– 物理地址和虚拟地址之间映射原创 2021-07-10 15:49:02 · 869 阅读 · 0 评论 -
十一、linux物理地址虚拟地址
占位原创 2021-07-10 14:09:39 · 149 阅读 · 0 评论 -
十、驱动工程师硬件知识
占位原创 2021-07-10 14:08:37 · 233 阅读 · 0 评论 -
九、linux设备节点注册
临时占位,还没弄好,后期再修改一、杂项设备 杂项设备可以说是对一部分字符设备的封装,还有一部分不好归类驱动也归到杂项设备。为什么会引入杂项设备?• 第一、节省主设备号– 如果所有的驱动都是用字符设备,那么所有的设备号很快就用完了,总共就255个主设备号。• 第二、驱动写起来相对简单– 如果直接使用封装好的杂项设备,那么就可以减少一步注册主设备号的过程。杂项设备初始化部分源文件“driver...原创 2021-07-09 15:47:10 · 889 阅读 · 0 评论 -
八、linux以模块方式注册设备
我们刚刚在《六、linux虚拟平台设备注册》中,介绍了如何注册一个设备,但是呢,那种方式适合在程序定型之后那样做。当我们前期调试时,如果每一次都要编译内核,那很浪费时间,所以,今天我们来讲以模块方式注册设备。 我们先回顾一下刚刚注册设备时使用的结构体(vim include/linux/platform_device.h):那么我们首先要创建一个platform_device类型的结构体变量,并把这个变量通过platform_device_regis...原创 2021-07-09 10:25:59 · 471 阅读 · 0 评论 -
七、linux驱动注册
一、驱动注册结构体驱动注册使用结构体platform_driver,该结构体在头文件“vim include/linux/platform_device.h”中,和刚刚那个设备注册的驱动在同一个头文件。 驱动注册platform_driver_register 驱动卸载函数platform_driver_unregister也在这个头文件中,这两个函数的参数都只有结构体platform_driver驱动常见的几种...原创 2021-07-09 09:51:36 · 756 阅读 · 1 评论 -
六、linux虚拟平台设备注册
一、使用到的设备结构体 注册设备使用结构体platform_device,该结构体在头文件“viminclude/linux/platform_device.h”中。头文件中也有注册设备和卸载设备的函数。二、设备注册操作将设备结构体(platform_device)放到平台文件(arch/arm/mach-exynos/mach-itop4412.c)中,会自动注册设备,不用去调用注册设备的函数。 我们仿照LED写了一个HELLO。如下图修改...原创 2021-07-09 09:24:08 · 601 阅读 · 0 评论 -
五、linux总线中设备和驱动注册流程详解
一、注册流程图(建议大家先看这张图3分钟。)由上图可以看出,linux中,有各种总线(bus),其中的平台总线(platform)是我们字符设备和驱动注册的地方。通过platform_device结构体注册设备。然后再通过platform_driver结构体注册驱动。再通过platform_match匹配驱动和设备结构体中的name,如果相同,就调用驱动结构体中的probe,生成设备节点等。设备一般都需要先注册,才能注册驱动,但是现在越来越多的热拔插设备,反过...原创 2021-07-09 08:51:37 · 1920 阅读 · 0 评论 -
四、linux编译规则文件Makefile
makefile脚本语法规则具体看:1、编译器路径设置linux内核源码根目录下makefile文件修改编译器路径。如下图:2、强制编译源码开发者强制要求编译进内核的文件 ,类似下面的写法,只要编译内核就必须编译这个文件– obj-y += gpio/如下图:3、Linux内核编译流程分析...原创 2021-07-06 15:01:16 · 290 阅读 · 0 评论 -
三、linux内核驱动裁剪
一、Menuconfig的操作1、Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉,menuconfig是生成.config的一个工具。在Linux发展过程中,配置内核可以使用一下命令:– #make config(基于文本的最为传统的配置界面,不推荐使用)– #make menuconfig(基于文本菜单的配置界面)– #make xconfig(要求QT被安装)– #make gconfig(要求G...原创 2021-07-06 14:22:24 · 1381 阅读 · 0 评论 -
二、linux最小驱动
一、最小驱动源码如下图,最小驱动需要四部分,具体看下面源码源码mini_linux_module.c如下:#include <linux/init.h> // Linux源码目录下的include/linux/module.h#include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); // 如果你不声明GPL协议,你的模块将无法在Linux 中使用的MODULE_AUTHOR("JASON"); /..原创 2021-07-05 19:09:23 · 433 阅读 · 1 评论 -
一、linux驱动理论
1、Linux驱动包含三种:字符设备驱动、块设备驱动、网络设备驱动。大部分设备是字符设备。2、Linux把设备看成了文件,这样就可以按照文件的操作形式来控制设备。实现统一的调用接口( open, read, write, ioctrl,close)。3、驱动开发主要是做什么?实际上驱动开发就是实现上面的open, read, write, ioctrl,close。将我们写的可以用来操作设备的函数注册给linux系统。4、CACHE(高速缓存),位于CPU和主存之间的高速存储子系统,提高存储器的原创 2021-07-05 15:16:37 · 364 阅读 · 0 评论