文章目录 前言 原理图 IO模拟输出PWM 设备树 驱动端 调试信息 实验结果 附录 前言 上一篇的学习中介绍了如何在用户空间直接操作GPIO,并写了一个脚本可以产生PWM.本篇的学习会将写一个驱动操作GPIO,同样的也可以发生PWM,因此这里还需要部分的硬件配合,需要一块开发板,当然可能还需要一台示波器. 原理图 和上一篇相同,引脚依然是GPIO3_D0,具体硬件肯定会不同,注意参考soc的datasheet和硬件原理图,先定位正确需要操作的GPIO. IO模拟输出PWM 这里驱动实现的方式是…
文章目录 前言 功能 如何使用 设备树 API 总结 前言 GPIO(General Purpose Input/Output)通用输入/输出接口,是十分灵活软件可编程的接口,功能强大,十分常用,SOC也非常依赖GPIO,在实际应用中几乎都能看到它的影子,在Linux内核驱动的学习中,这部分相对来说也是比较基础的,但是涉及的东西其实相对来说也比较多,感觉还是很有必要学习和总结一下. 功能 正如之前所说,GPIO是通用输入输出接口,所以,相应的内核驱动中GPIO的基本功能总体可以总结为以下几点:…
1. 参考链接 小白的博客 ONE_Tech 你为什么看不懂Linux内核驱动源码? 求教怎么学习linux内核驱动…
文章目录 前言 设备树 两个结构体 gpio_platform_data gpio_demo_device 两种方式 轮询 外部中断 总结 附录 前言 前面是如何操作GPIO进行输出,这里我重新实现了一个gpio的驱动,可以获取外部信号的输入.gpio-demo.c中已经包括检测一个gpio的信号,并且包含了中断和轮询两种方式,可以通过设备树里的mode属性进行选择. 设备树 本文检测的输入引脚是GPIO3_D0,具体的设备树如下所示: gpio-demo { compatible = "gpi…
文章目录 目标 drivers/Kconfig demo下的Kconfig 和 Makefile Kconfig Makefile demo_gpio.c 目标 Kernel:Linux 4.4 我编写一个简单的hello worldLinux 内核模块后,已经可以通过insmod动态加载到系统内核中,并通过rmmod卸载模块.但是出于学习的目的,我想把这个内核添加到Linux源码中,并且可以通过Kconfig进行配置,在make menuconfig的指令下,可以生成相应的菜单可以进行配置.…
Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验 前言 框架 字符型设备 程序实现 cdev kobj owner file_operations dev_t 设备注册过程 申请设备号 注册设备 register_device 如何构建 模块编译 内核编译 Makefile Kconfig 总结 参考 前言 驱动总共分为字符型设备驱动,块设备驱动,网络设备驱动.对于字符型设备驱动的资料,网上比较多,<Linux Kernel Driver>这本书可以了解一下,对于学…
文章目录 简介 原理图 节点 设置为输出 设置为输入 映射关系 debugfs pwm demo 简介 前面通过libgpio的方式介绍了内核空间对GPIO进行操作的接口,其做了较好的封装,同时Linux系统的sysfs机制已经在系统路径下/sys/class/gpio注册了相应的节点,通过读写该节点下的文件就能轻松的完成GPIO输入输出配置以及引脚状态的获取. 原理图 我使用的Rockchip的px30,引脚是GPIO3_D0,具体硬件肯定会不同,注意参考soc的datasheet和硬件原理图…
文章目录 前言 框架 如何实现`input device` 设备驱动? 头文件 注册input_dev设备 上报按键值 dev->open()和dev->close() 其他事件类型,处理输出事件 查看input device信息 附录 前言 这次主要会学习Linux中对于输入设备统一封装的框架,在计算机组成原理中,我们可以知道计算机的组成主要分为五个部分:控制器,运算器,存储器,输入,输出.可见,输入作为其中的一个子系统,但是对于众多的设备来说,需要一套统一的规范.所以,在嵌入式系统中的外设…
文章目录 准备工作 什么是内核模块 编写 hello.c 模块编译 相关指令 测试结果 模块加载 模块卸载 准备工作 在进行以下操作前,首先我准备了一台电脑,并且安装了虚拟机,系统是Ubuntu16.04.如果是开发板,那么需要安装交叉编译器,但是目前我只在虚拟机的Ubuntu16.04系统里完成驱动模块的加载和卸载,实现了一个最最简单的内核模块,并且通过这个最简单的驱动,学习最基本的概念. 什么是内核模块 模块是可以根据实际需要可以动态加载和卸载到内核中的代码.它们扩展了内核的功能,而无需重启…
Linux platform设备驱动模型 文章目录 Linux platform设备驱动模型 前言 框架 设备与驱动的分离 设备(device) 驱动(driver) 匹配(match) 参考 前言 为什么要往平台设备驱动迁移?这里需要引入设备,总线,驱动这三个概念.上一篇字符型设备驱动的实现实际将设备和驱动集成到同一个文件中实现,如果这里有硬件A的驱动,硬件B的驱动,硬件C的驱动,然后有三类用户接口E,接口F和接口G,这里用户接口是提供给用户层调用的接口,每一种接口又必须兼容这三种硬件,按照原…