设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现
前面我们已经完成了CCF子系统的分析,也说明了如何实现CCF驱动,本章为该专栏的最后一篇文章,
本章我们将实现一个虚拟的gpio clk gate驱动。本章大概分为如下几个章节:
一、 本次驱动开发涉及的知识点
二、clk provider driver的实现流程说明
三、gpio clk gate driver驱动设计
一、 本次驱动开发涉及的知识点
本次驱动实践主要涉及如下几个方面的知识点:
- Platform device、platform drvier
- Gpio 驱动使用
- Clk provider驱动开发流程
二、clk provider driver的实现流程说明
关于clk provider driver的开发流程,在上一篇文章中已经做了说明,此处再说明一下,主要实现
流程包括如下两步:
- 完成clk的注册,主要是调用clk_register接口,完成上述章节一所述的内容;
- 完成该clk provider的map,这种map机制可以理解为定义了clk consumer与clk_provider的映射关系,即该clk provider可以给哪些clk consumer提供时钟(如针对非设备树模式,则定义了clk consumer的设备名称、clk consumer的时钟使用名称),而clk provider的map存在两种方式:
- 若linux不支持设备树机制,则通过调用接口clk_register_clkdev,完成这种映射操作(即完成下图中“非设备树模式下clk_core的map”)。
- 若linux支持设备树机制,则通过调用接口of_clk_add_provider,完成map操作(即完成下图中“设备树模式下clk_core的map”)
三、gpio clk gate driver驱动设计
本次我们主要实现gpio clk gate driver,本次实现的平台为ubuntu16.04,我们使用之前模拟的gpio chip driver,提供gpio index,从而通过gpio 的值实现gpio clk gate driver。。另外针对clk gate,仅需要提供enable、disable、is_enabled接口即可。
相关数据结构
结构体struct virt_gpio_clk_gate作为本次gpio clk gate driver的数据结构,主要包含clk provier device、gpio index描述信息;
struct virt_gpio_clk_gate
{
struct gpio_desc *gpiod_clk_gate;
struct clk_hw hw;
};
而结构体gpio_clk_gate_platform_data主要用于传递platform device for clk provider的enable gpio index信息,因为此次我们使用ubuntu16.04进行验证,因此使用该模式传递gpio 信息,包含gpio index、是否低有效等信息。
struct gpio_clk_gate_platform_data
{
int enable_gpio_index;
int active_low;
};
gpio clk provider driver实现
Gpio clk provider driver的实现如下,主要完成clk provider device注册、clk_ops的实现(enable、disable、is_enabled)等。如下即为clk provider driver的probe接口,主要调用clk_register完成clk provider的注册、并调用of_clk_add_provider/clk_register_clkdev实现clk provider的map。
该gpio clk gate provider 的clk_ops操作接口定义如下:
gpio clk consumer driver实现
该consumer driver驱动主要用于验证gpio clk provider driver是否生效,我们在probe接口完成clk的enable操作;而在remove接口完成clk 的disable操作。接口实现如下:
Virt gpio chip driver
该驱动使用的是gpio driver子系统专栏中实现的虚拟gpio驱动,本处不再细述,想要了解的童鞋请参考之前的文章。
测试验证:
- 加载virt gpio 驱动
- insmod virt_gpio_dev.ko;
- insmod virt_gpio.ko
- 加载gpio clk gate 驱动
- insmod gpio_clk_platform.ko
- insmod gpio_clk_driver.ko
- 加载clk consumer device驱动
- insmod gpio_comsumer_device.ko
- 查看当前gpio的值:
- 加载clk consumer driver驱动
- insmod gpio_comsumer_driver.ko
- 查看当前gpio的值
此时gpio已经改变,clk已经使能;
- 卸载clk consumer driver驱动
- insmod gpio_comsumer_driver.ko
- 查看当前gpio的值
此时gpio已经修改为0,clk 已经关闭;
以上就是本章的主要内容,我们主要实现一个gpio clk gate provider driver,至此我们基本上已完成CCF子系统的学习,本章的驱动代码链接稍后给出。
设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现相关推荐
- 设备树与驱动的关系_Linux I2C驱动竟然如此简单?手把手教你写i2c驱动
Linux中I2C驱动框架分析 I2C核心(i2c_core) I2C核心维护了i2c_bus结构体,提供了I2C总线驱动和设备驱动的注册.注销方法,维护了I2C总线的驱动.设备链表,实现了设备.驱动 ...
- 设备树学习(二十二、番外篇-中断子系统之驱动申请API)
本文继续参照蜗窝大神的文档,采用4.19内核的代码学习,同时会有自己的一些举例和部分代码分析 http://www.wowotech.net/sort/irq_subsystem 一.前言 本文主要的 ...
- 设备树学习(二十三、aliases节点分析)
在设备树中有一个叫做aliases的节点: / {#address-cells = <1>;#size-cells = <1>;aliases {csis0 = &cs ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型
文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...
- Android 驱动(12)---Linux DTS(Device Tree Source)设备树详解
Linux DTS(Device Tree Source)设备树详解 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) Linux DTS(Device Tr ...
- 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- linux spidev 应用_嵌入式Linux设备树语法总结
1 设备树的说明 在写完嵌入式驱动总结后,对于设备树相关的语法和使用一直都想进行系统的描述,但是因为最近比较忙碌,所以一直拖到现在才完成初版,对于整个嵌入式Linux驱动开发中,设备树语法和构建是其中 ...
- 认识设备树(二)——设备树文件的格式
目录 前言 1 DTS文件的格式 1.1 DTS文件的总体布局 1.2 memory reservations的格式 1.3 属性的格式 1.3.1 有关属性名 1.3.2 有关属性值 1.4 节点的 ...
最新文章
- 8 ServletContext
- 转行学python后悔了-转行学Python可以吗?
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
- joda jar日期处理类的学习
- 商品领域ddd_DDD领域驱动实战 - 限界上下文(bounded context)
- jboss启动之奇葩问题
- 避免将项目名称用作映射类型名称
- LeetCode 110平衡二叉树-简单
- python正则表达式数字开头_Python正则表达式总结
- Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法
- 【推荐实践】智能推荐算法在直播场景中的应用
- 地统计学之变异函数深入理解与分析
- Scratch3.0 保存缩略图
- java实现word(docx)在线编辑(word转html,html转word)——代码实现
- 龙芯2f笔记本安装debian错误--bzcat
- 利用接口和继承实现 求三角形 圆形面积 和以圆形为底的圆锥形的体积
- 2022 年最新博客专家申请流程
- Spring学习笔记(一):眼见为实,先上一个简单例子
- html5鼠标悬停图片放大的原理,jQuery当鼠标悬停时放大图片的效果实例
- HTML区块元素(讲解及示例)
热门文章
- 查看关于yum的配置
- Python脚本如何生成Windows可执行文件.exe
- C语言32个关键字与C++62个关键字详解
- [云炬创业学笔记]第一章创业是什么测试12
- USTC English Club Note20171019(2)
- 荣耀X8碎屏2020-05-14
- 燃烧学往年精选真题解析 2018-01-01
- 图像处理实战 多张曲线同图共舞
- tkFileDialog报错,模块未找到出错:没有名字叫做 tkFileDialog 的模块
- pythonurllib微博登录怎么删_Python骚操作之删微博还需用手动吗?Python去做就好了!...