003-linux driver
文章平均质量分 83
bindingfly
损人利己之事不能做,损人不利己之事坚决不做;
利己利人之事多做,利人不利己尽量做。
展开
-
驱动开发(一)
linux设备驱动程序模型 首先把什么是驱动程序搞清楚。所谓驱动程序就是控制与管理硬件设备数据收发的软件,它是应用程序与硬件设备沟通的桥梁。驱动程序大致可分为三类:一、字符设备驱动字符设备顾名思义就是发送和接收数据以字符的形式进行,它不经过系统的快速缓存,要负责管理自己的缓冲区结构,只支持顺序存取的有限长度I/O操作。我们一开始接触的LED灯、按键、UART等都属于字符设备。原创 2015-09-07 09:40:54 · 457 阅读 · 0 评论 -
队列处理中断底半部
如果用一个词来形容底半部的功能,就是“延迟执行” 对于中断底半部的实现方式一共有三种:采用软中断的方式采用tasklet微线程采用队列 因为现在碰到的几个中断处理方式都是使用工作队列来实现的,所以这里主要讲解队列: 一、 工作队列 在Linux内核中,对下半部(或者说推后执行的工作)的处理方式有好几种,包括BH(bottom half),软中断,Taskl原创 2017-06-17 22:57:14 · 622 阅读 · 0 评论 -
ARM中断处理流程
这边文章主要是讲解一下,对ARM_Linux中断处理的一个流程介绍,在底层处理部分,不同的架构会有不一样处理,但Linux中断注册过程是一样的。 一、Linux中断的简易模型:当一个IRQ产生时,会发生什么?当一个IRQ产生后,CPU会首先自动跳转到IRQ的中断向量(这个中断向量是可设置的),在这个IRQ中断向量里又是一个跳转指令,CPU再次跳转,跳转后的代码主要完成的工作是保存一原创 2017-06-17 22:52:07 · 4747 阅读 · 0 评论 -
linux设备驱动的中断
1、设备驱动的基本概念在访问设备时,如果不管设备是否有数据都死等它的数据,那别的设备就得不到访问。因此在硬件设计中引进了中断机制。内核中对时钟的处理也采用中断方式,而内核软件定时器最终依赖于时钟中断。中断处理和进程是CPU上两类完全独立的执行体。中断处理例程和其他代码并发运行这就讲引起并发问题,对并发控制技术的透彻理解对处理中断来讲是非常重要。设备中断的到来会打原创 2017-01-10 16:04:54 · 448 阅读 · 0 评论 -
lcm驱动流程
/*bindingfly */如果自己没有研究,那就不要往下看了,肯定不知所云。lcm驱动流程:lcm模组驱动,ili9881c_dsi_hd_vdo_dj_sp603_drv LCM_DRIVER ili9881c_dsi_hd_vdo_dj_sp603_drv = { .name = "ili9881c_dsi_hd_vdo_dj_sp603", .原创 2016-09-02 19:14:58 · 3166 阅读 · 0 评论 -
Linux 内核中的 cdev_alloc和cdev_add
Linux内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj; // 每个 cdev 都是一个 kobjectstruct module *owner; // 指向实现驱动的模块const stru转载 2016-07-18 21:19:12 · 1199 阅读 · 0 评论 -
linux sys节点属性 show以及store
从底层把值传给上层有很多种方法,sysfs就是很简单的一个:提到sysfs,就不得不提函数宏 DEVICE_ATTRDEVICE_ATTR的原型:#define DEVICE_ATTR(_name,_mode,_show,_store)\struct device_atttribute dev_attr_##_name = __ATTR(_name,_mode,_s转载 2016-08-03 19:11:47 · 7712 阅读 · 0 评论 -
驱动程序调测方法与技巧
驱动程序开发的一个重大难点就是不易调试。本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是:利用printk查看OOP消息利用strace利用内核内置的hacking选项利用ioctl方法利用/proc 文件系统使用kgdb一、利用printk这是驱动开发中最朴实无华,同时也是最常用和有效的手段。scull驱动的main.c第338行如下,就是使用printk转载 2016-07-22 19:55:05 · 1101 阅读 · 0 评论 -
Linux中断处理程序架构
Linux将处理程序分解为两个半部:顶半部(Top Half)和底半部(Bottom Half)。 顶半部用于完成尽量少的比较紧急的功能,它往往只是简单读取寄存器中的中断状态,并在清除中断标志后就进行“登记中断”,所谓“登记中断”就是将底半部处理程序挂载到该设备的底半部执行队列中去。 底半部几乎做了中断处理程序所用的事情,而且可以被新的中断打断,但在实际中不能僵化地认为Lin原创 2016-05-04 10:11:00 · 704 阅读 · 0 评论 -
字符驱动涉及的数据结构及方法
一、获取主设备号的源码:if (xxx_major) { dev = MKDEV(xxx_major, xxx_minor); retsult = register_chrdev_region(dev, xxx_nr_devs, DEV_NAME);}else { retsult = alloc_chrdev_region(&dev, xxx_minor, xxx_nr_devs, DE原创 2016-04-28 16:53:25 · 398 阅读 · 0 评论 -
Fedora22下git和github环境搭建
这里的前提是你已经拥有了github账号在Fedora 22 下安装git很简单,就是 dnf install git ,因为在Fedora的软件库里已经有GIT了。可以用 dnf search git 查看软件库里是否有git。安装完后再shell下输入git就有帮助出现。也可以用 git --version查看,主要是--version 。接下来就是生成SSH KEY, 使原创 2015-11-11 17:05:12 · 1366 阅读 · 0 评论 -
CPU频率调节模式以及降频方法简介
在kernel中实现了两个driver,一个负责控制开关CPU的核数,叫做hot-plug驱动,另一个负责调整CPU的频率,叫做DVFS驱动。kernel中的driver会根据系统的负载,自动调整使用几个CPU和调整CPU频率。如果负载高了,提高频率,或者多开几个核,或者开大核。如果负载降下去了,就可以关大核,关核,降频。以下是两个知名手机厂商开源的config配置文档:60 CONFIG_CPU...原创 2018-03-12 19:04:40 · 19620 阅读 · 0 评论