在Linux驱动中使用gpio子系统】的更多相关文章

一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括: (1)pin multiplexing.基于ARM core的嵌入式处理器一般会提供丰富的功能,例如camera interface.LCD interface.USB.I2C.SPI等等.虽然…
一.前言 作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务.对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver.LED driver.往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师.虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的软件思想是每个嵌入式软件工程师需要掌握的内容. 我更倾向使用GPIO系统这个名字来代替GP…
转自:http://www.wowotech.net/linux_kenrel/pin-controller-driver.html 一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括: (1)pin multiplexing.基于ARM core…
1.前言在嵌入式系统中,许多SoC的内部都包含了pin控制器,通过芯片内部的pin控制器,我们可以配置一个或者一组引脚的状态和功能特性,Linux内核为了统一各SoC厂商的引脚管理,提供了pinctrl子系统. 2.引脚功能分类嵌入式芯片手册往往有一个GPIO控制的章节来描述SoC的引脚如何进行配置,该描述具有大量的寄存器操作,但是通过配置这些寄存器实现的功能基本有三类,如下: (1)通过设置pin controller硬件的控制单元,可以实现 (1.1)引脚的功能配置,例如设定I/O引脚是普通…
一.前言 在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况: (1)启动一个新的项目后,需要根据硬件平台的设定进行pin control相关的编码.例如:在bootloader中建立一个大的table,描述各个引脚的配置和缺省状态.此外,由于SOC的引脚是可以复用的,因此在各个具体的driver中,也可能会对引脚进行的配置.这些工作都是比较繁琐的工作,需要极大的耐心和细致度. (2)发现某个driver不能正常工作,辛辛苦苦debug后发现仅仅是因为其他…
Linux内核中,SPI和I2C两个子系统的软件架构是一致的,且Linux内核的驱动模型都以bus,driver,device三种抽象对象为基本元素构建起来.下文的分析将主要用这三种抽象对象的创建过程及其相互调用关系和作用来进行说明. 1.      SPI各对象的初始流程 1.1 创建spi_bus_type总线 postcore_initcall(抽象层spi.c中) bus_register(&spi_bus_type); class_register(&spi_master_cla…
输入子系统由驱动层.输入子系统核心.事件处理层三部分组成.一个输入事件,如鼠标移动.键盘按下等通过Driver->Inputcore->Event handler->userspace的顺序到达用户控件的应用程序. 其中核心层提供一些设备层与事件层公用的函数,比如说注册函数.反注册函数.事件到来的处理函数等等:事件层其实在Linux内核里面已经帮我们写好了很多有关的事件:而设备层就跟我们新添加到输入系统的具体设备相关了.这里以JZ2440开发板上的4个按键作为输入子系统的按键:它定义的功…
​Linux kernel 驱动中,有不少驱动会引用到 EPROBE_DEFER 这个错误号.比如下面这个例子,对 devm_gpiod_get 的返回值进行判断,如果有错误且错误号不是 -EPRBOE_DEFER,才输出error log. 那么 EPRBOE_DEFER 有什么特别之处吗,需要驱动程序这样特意处理?这个与 kernel 设计的 driver-deferred-probe 机制有关. kernel 下有多个独立的驱动,每个驱动或多或少地会引用到其他驱动提供的资源,比如某个外设驱…
1.根据硬件原理图,找到对应控制sd卡电源的gpio引脚,并在sd卡驱动文件中定义操作改该引脚的宏 2.在sd卡检测函数中,使用glib增加开sd卡电源的操作,如此当sd卡每次被检测到时,驱动中就会自动打开sd卡电源.从而解决sd卡低电压的问题…
今天在按键驱动中增加printk(KERN_INFO "gpio_keys_gpio_isr()\n");在驱动加载阶段可以输出调试信息,但驱动加载起来后的信息,在串口端看不到输出信息 在kernel/ /* We show everything that is MORE important than this.. */ #define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */ #define…