linux驱动开发学习
Jon Yu
这个作者很懒,什么都没留下…
展开
-
linux内核中断
一、linux 中断API1.申请中断号request_irq(unsigned int irq, /*中断号*/ irq_handler_t handler, /*中断处理函数*/ unsigned long flags, /*中断标志*/ const char *name, /*中断名称*/ void *dev /*一般为设备结构体,dev会传递给中断处理函...原创 2019-12-24 21:55:02 · 317 阅读 · 0 评论 -
linux 内核定时器
linux内核中有大量的函数需要时间管理,硬件提供时钟源,时钟源的频率可以设置,设置好以后产生周期性中断,系统通过中断计时。1.节拍率(tick rate)系统周期中断频率,可通过menuconfig设置,可设置 100、200、250、300、500、1000hz。-> Kernel Features-> Timer frequency (<choice> [=y...原创 2019-12-17 13:26:53 · 276 阅读 · 0 评论 -
linux设备驱动开发之input
input子系统是管理系统输入的子系统,比如鼠标、键盘、触摸屏等等。不同设备所代表的输入信息不同,对于驱动开发人员而言,不需要关心应用层的事情,通过input子系统按照既定规则上报输入事件即可。为此 input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层,最终给用户空间提供可访问的设备节点。系统定义主设备号头文件,input子系统主设备号13.include...原创 2019-12-16 22:25:28 · 214 阅读 · 0 评论 -
linux字符设备驱动开发之MISC
misc 杂项驱动。杂项驱动其实是字符设备驱动,嵌套在platform总线中,实现复杂的驱动。当所使用外设无法分类,一般采用misc驱动。misc驱动固定主设备号10,次设备号因不同设备不同。misc驱动设备使用如下结构体描述:include/linux/miscdevice.hstruct miscdevice { int minor; const char *name; c...原创 2019-12-16 15:58:57 · 257 阅读 · 0 评论 -
linux字符设备驱动开发之platform
考虑到驱动代码的重用性,linux采用驱动分隔思想,将主机驱动与设备驱动分隔开来,采用统一的接口通信。一般地,设备驱动已经由半导体厂家开发完毕,我们只需要提供设备信息,如IO复用、电器属性等等。主机驱动通过设备树获取设备信息,来初始化设备。简单的讲,驱动只管驱动,设备负责设备,通过设备树经行匹配。以上即为,linux总线、驱动、设备模型,常说的驱动分离。Platform 平台驱动模型...原创 2019-12-16 14:56:30 · 617 阅读 · 0 评论 -
linux字符设备驱动开发之pinctrl,gpio
pinctrl 和gpio子系统是驱动分离与分层思想的产物。开发者只需要通过配置设备树节点,即可以实现io映射,电器属性设置等。相较于传统的裸机开发更简单,扩展程度更高。pintctrl子系统(IO复用)节点前缀一定为pinctril_XXX,在iomux节点内添加想要复用的pin。demo添加内容如下: pinctrl_led: ledgrp{ fsl,pins = < ...原创 2019-12-01 21:43:18 · 375 阅读 · 0 评论 -
ARM GNU汇编常用指令
1.内部数据传输1.1 MOV用于将数据从一个寄存器拷贝到宁外一个寄存器。MOV R0,R1 @R0 = R1MOV R0, #0X12 @R0 = 0X121.2 MRS用于将 特殊寄存器(CPSR,SPSR)中的数据传递给通用寄存器。(读取特殊寄存器值)MSR CPSR,R01.3 MSR用于将普通寄存器的数据传递给特殊寄存器(写特殊寄存器)MSR CPSR,R0...原创 2019-11-19 10:27:06 · 565 阅读 · 0 评论 -
linux字符设备驱动开发之设备树(2)
设备树常见of操作函数设备树描述了设备的详细信息(比如reg->寄存器地址),编写驱动的目的在于获取这些信息.linux提供了一些of函数读取这些信息, /include/linux/of.h.查找节点相关函数// 设备节点struct device_node { const char *name; const char *type; phandle phandle; ...原创 2019-11-03 16:19:18 · 340 阅读 · 0 评论 -
linux字符设备驱动开发之设备树(1)
为什么使用设备树?linux内核3.x以前,采用板级信息描述设备,由于芯片发展速度快,造成linux内的板级信息太多,使系统太臃肿.所以采用设备树来简化表达....原创 2019-11-03 15:09:22 · 748 阅读 · 0 评论 -
linux字符设备驱动开发之新字符设备驱动开发
考虑到老版本使用register_chrdev需要事先确定设备号,驱动加载需要手动创建节点(mknod).新版本linux驱动采用动态分配设备号,自动创建节点,开发方便横多.1. 新字符设备注册方法// 没有指定设备号,申请设备号// dev : 设备号// baseminor : 次设备号 , 通常为0// count : 设备申请数量// name : 设备名int alloc_...原创 2019-11-03 11:20:09 · 307 阅读 · 0 评论 -
linux字符设备驱动开发之内存映射
本文章参考正点原子相关教程,仅学习使用linux驱动最终都死通过配置寄存器完成,linux驱动开发需要满足linux的驱动框架.所以存在一个内存管理单元(MMU)实现虚拟地址与物理地址的映射,内存保护和虚拟地址缓存功能.通过内存映射,只需要对虚拟地址进行操作,就可以实现相应的驱动开发.内存映射映射函数//内存映射void __iomem *ioremap(phys_addr_t ...原创 2019-11-02 10:08:45 · 536 阅读 · 0 评论 -
linux字符设备驱动开发之经典流程
驱动代码流程流程//打开文件static int chrdevbase_open(struct inode *inode, struct file *flip)//读文件static ssize_t chrdevbase_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)//写文件static s...原创 2019-11-02 09:35:28 · 746 阅读 · 0 评论