触摸屏相关的一点拙见--以及android系统中linux内核部分的编译

Android系统移植:开发概述 版权声明:本文为【limin13215】原创文章,转载请注明链接: 【导语】Android系统的发展现在已经达到世界级的了,Android系统的应用方向也从传统的手机、平板发展到机顶盒、车载系统、智能家居以及虚拟现实、人工智能。 时代选择了Android,而Linux成就了Android。 1.1 Android从Linux中发展而来Linux kernel 的版权是GPL(Gener 阅读详情

      今天一个小项目终于尘埃落定,虽然本人在其中从事的工作很简单,但是还是颇有一些心得想跟大家分享一下。

      首先我们需要了解一下linux内核中驱动为何能被编译进内核,在这里有两个很重要的文件不得不提:Kconfig和Makefile。其中Kconfig是分布在各目录的,这些Kconfig文件构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单,这就是我们使用make menuconfig后产生的配置菜单,此菜单包含多层,每个层次都由各个目录中的Kconfig产生的。用户根据自己的需求来选择如何编译内核,然后执行Makefile时就会根据.config的结果来实现内核的编译。编译的过程是通过Kbuild系统来完成的。具体过程自行查阅资料,说多无益。

        通过上面的了解我们可以清晰的知道,当我们需要进行驱动添加或者移植的时候需要怎样去做了。如果此处还不理解,你要知道你真的很菜。不过还好你有耐心看下去的话就很容易的上手了。

         首先我们需要在Kconfig中添加文件的模块名称,这里可以参考Kconfig内部的其他模块的配置情况,当然这里要清楚我们的配置会影响到我们的模块的加载方式是默认加载的还是需要动态加载。这让我们想到我们平时在配置的时候的选择。是不是有点兴奋呢?只要我们添加上之后,以后使用这个内核的人就能看到并能够自主的选择了。

        然后,我们在Makefile中添加本模块对应的文件,注意此处的文件模块的名称和模块的文件类型。相信你懂的……此处还有时会看到if($(xxx),y),此处的判断就是根据.config进行判断的。而在Android中的.config文件可能会有所不同……其实也不是Android特有的了……

      最后我们就开始写自己的驱动了……

      但是有时候我们在编译的过程中,会出现编译不生效的问题。此时我们需要把编译的目标文件全部删除掉之后重新编译。特别是内核的文件,此处还是很有意思的……本人可能会在后续的文章里添加此部分的内容。敬请期待!!!!

       下面来讲解下触摸屏。

       触摸屏按照XXX分,有xxxx、xxxx自行查找……

       先简单介绍下吧……本人认为触摸屏和其它设备有区别的地方也就在对寄存器的设置部分了。因为Android会在framework/base/server/input文件夹中实现对输入设备提供服务。所以我们通过研究EventHub.cpp文件发现区别设备的依据也就是在寄存器位 的设置上。因此我们在驱动中也主要在此处做文章,而上报事件的读取是在InputReader.cpp文件中实现的,因此我们在上报的过程中也要注意一下就OK了。

      InputReader.cpp中针对触摸屏分成两种事件进行处理,SingleTouchInputMappe及多点触摸MultiTouchInputMapper。这两个类都是继承TouchInputMapper,由syncTouch处理最终的触摸屏动作的发送。对于触摸屏中设备的注册和上报以及参数的含意可以参考相关博文。此处推荐http://blog.youkuaiyun.com/andyhuabing/article/details/7085725

       就具体情况而言,我们需要注意的地方主要有这么三个:一个是设备的总线,设备的连接方式以及设备的消抖处理。

连接方式     

  连接方式此处主要介绍GPIO方式,此种方式较为简单,主要是通过linux/gpio.h文件中提供的api完成对标签的声明和将GPIO映射成IRQ中断。

总线

  此处主要是指采用IIC总线方式,主要是采用IIC在linux本身自带的驱动架构。i2c_add_driver()和i2c_del_driver().

消抖

   此处网上能查到很多方法,本人推荐可以使用在中断中延时的方式。

输入技术信息:

Android的输入子系统支持多种不同类型的设备,包括键盘,操纵杆、轨迹球、鼠标和触摸屏。下面简单介绍下输入设备驱动中的触摸屏设备驱动的编写。

输入设备配置文件

Input Device Configure 文件(.idc 文件)包含对不同设备的配置参数,并因此影响输入设备的行为。

由于系统默认是对标准的输入设备进行支持的,因此对于这部分设备来讲的话idc文件是没有必要的,此类设备包括标准的物理设备像HID键盘和鼠标。但是对于一些内嵌的输入设备,特别是触摸屏就需要IDC文件来描述他们的行为。

原因:

Android会根据linux内核输入设备驱动的上报事件的事件类型和参数来自动的检测和配置大部分的输入设备。本部分不再举例赘述。

定位:

输入设备配置文件通过USB产品、产品的id或者通过输入设备的名称来定位。配置文件一般会在device目录下的产品配置文件中描述,本人就不再拿代码举例,因为公司的原因……在此处需要注意的问题是对device.type的配置很可能是导致你设备不能成功的原因。然而怎样才能生效呢?

      在android中是通过mmm  frameworks/base/tools/validatekeymaps使得配置文件生效的。Install: out/host/linux-x86/bin/validatekeymaps。

Keymap Validation Tool


Usage:
 validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...]
   Validates the specified key layouts, key character maps,
   input device configurations, or virtual key definitions.

这时候我们就可以对工具进行使用了。

        

RK3566 Android 11上ILI2130触摸屏驱动移植避坑:从编译到解决32K时钟干扰的完整实战 本文详细记录了在RK3566 Android 11平台上移植ILI2130触摸屏驱动的完整过程,重点解决了32K时钟干扰问题。从驱动编译、设备树配置到硬件信号干扰排查,提供了实用的调试技巧和硬件协同设计建议,帮助开发者高效完成触摸屏驱动移植。 阅读详情

相关推荐

Android嵌入式开发的几个注意点

一: 首先你必须了解ARM平台 Android 移植与驱动核心开发,当然也可以是X86和其他的平台,不过其他平台的Android智能终端开发并不是很多。 Android嵌入式智能操作系统是基于Linux内核和驱动的,对于HTC、华为等公司开发Android操作系统时,需要专门将Android移植到 特定硬件平台下,同时将必要的驱动进行编写及开发。成为Android的核心层开发者,在这种嵌入式设备...

Andriodqin的博客 8228

(Linux内核)多点触控 (MT) 协议(A类、B类)/触摸屏协议【multi-touch-protocol.txt】

翻译自 https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 多点触控 (MT) 协议 版权所有 © 2009-2010 Henrik Rydberg <rydberg@euromail.se> 介绍 为了充分利用新的多点触控和多用户设备的全部功能,需要一种方式来报告来多个触摸点的详细数据(即与设备表面直接接触的对象)。 本文档描述了多点触控 (MT) 协议,该协议允许内核驱动程序报告任意数量的触摸点的详

wkd_007的博客 6306

嵌入式MIPI DSI触摸屏驱动适配实战:从硬件接口到Linux内核调试

MIPI DSI(Display Serial Interface)是移动和嵌入式设备中广泛使用的高速显示接口标准,它通过差分信号串行传输图像数据,具有高带宽、低功耗和引脚数少的优势。其工作原理涉及物理层、协议层和应用层的协同,通过数据通道(Lane)和时钟通道传输像素和命令数据包。在嵌入式Linux系统中,DSI接口的价值在于能够高效驱动高分辨率显示屏,同时与触摸控制器(通常通过I2C或SPI连接)协同工作,实现人机交互。典型的应用场景包括工业HMI、智能家居中控、便携式医疗设备等需要高集成度和可靠性的领

weixin_34319111的博客 373

触摸屏调试、驱动模块编译进内核流程

一:驱动模块编译进内核流程 文件:Makefile,配置文件(Kconfig),驱动C文件 (1)将编写好的驱动C程序xxx.c放置linux内核对应的位置目录。 (2)修改当前目录下的Kconfig文件,名字无关紧要,但是要与Makefile中的一致。 config FB_S3C2410 tristate "S3C2410 LCD framebuffer support" ...

qq_34968572的博客 1054

linux编程常识,关于linux的一些常见问题

你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix

FAT文件系统读写类库 fat32-lib

FAT文件系统读写类库 fat32-lib

编译i8320内核,让其支持多点触摸

<br />编译内核:<br />参考http://www.limofans.com/forum.ph ... tid=5353&page=1<br />不过里面有一个地方是错误的:<br />CONFIG_KPL不能取消,取消后会造成dcm模块无法加载,无法控制led亮度。<br />编译KPL需要添加包含目录:<br />CFLAGS_KERNEL = -march=armv7-a -I./drivers/txsr/Inc<br /><br />多点:<br />i8320内核版本及tinyx版本不支持

mdjerry的专栏 3749

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3040

Android14 InputManager-InputReader的处理

IMS启动时会调用InputReader.start()方法当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程循环,从而结束线程。InputReader的一次线程循环的工作思路非常清晰,一共三步:□首先从EventHub中抽取未处理的事件列表。这些事件分为两类,一类是从设备节点中读取的原始输入事件,另一类则是输入设备可用性变化事件,简称为设备事件。□通过processEventsLocked()对事件进行处理。

u012627628的博客 1821

Vivado+VCS+Verdi三件套实战:如何高效仿真AXI VIP并快速查看波形

本文详细介绍了如何利用Vivado+VCS+Verdi工具链高效仿真AXI VIP并快速查看波形。通过环境配置、Vivado工程准备、VCS编译与仿真优化以及Verdi波形分析技巧,实现仿真速度的数量级提升,显著提高FPGA开发效率。

red88的博客 1001

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

Android/Linux 系统添加对多点触摸屏的支持

    含有 HID 多点触摸控制器的触摸屏、触摸板在 Android 和 Linux 内核中都是由 "hid-multitouch" 驱动进行支持的。因此如果你的系统连接触摸屏没有反应,问题基本都出于驱动未加载或者与触摸屏的 VID 与 PID 不适配。以下分情形讨论:1、系统中已存在“hid-multitouch”驱动    若“hid-multitouch”驱动是以内核模块的方式存在于系统里...

SoldierJazz的专栏 5887

反激开关电源设计全解析:从CCM/DCM原理到PCB布局实战

开关电源作为现代电子设备的能量转换核心,其核心原理是通过高频开关动作实现高效的电能变换。反激拓扑因其结构简单、成本低廉且易于实现电气隔离,成为小功率离线式电源的主流选择。其技术价值在于通过变压器耦合实现能量存储与传递,解决了安全隔离与多路输出等关键需求,广泛应用于充电器、适配器及家电供电等场景。本文聚焦反激电路,深入剖析其CCM与DCM两种工作模式的原理差异及选型考量,并结合伏秒平衡定律与RCD钳位等热词,详解从变压器计算到MOSFET选型的完整工程设计流程。

weixin_31951365的博客 343

Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普

它的目标是通过统一内核架构,减少Android设备的碎片化,提升内核的可维护性和兼容性。从触摸屏到GPU再到音频驱动,每一步都结合了实际的开发需求,提供了完整的代码实现和验证方法。以下是三个基于GKI与KMI的实践案例,涵盖触摸屏驱动、GPU模块和音频驱动的开发与优化。它提供了标准化的接口,所有硬件相关功能都由供应商模块实现,而GKI则负责处理更高层次的通用逻辑。为一款基于I2C通信的触摸屏硬件开发驱动模块,并通过KMI接口适配GKI内核,实现触摸事件的捕获与传递。,还显著降低了厂商的研发成本。

刘 争 5858

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

蜗牛的专栏 3435

PD3.0详解 协议的时序timer和counter计数

前面介绍了关于PD协议的交互,还有协议层数据各个字段的含义,但是一直没有系统的说关于协议的时序,还有部分counter,就是协议允许发送的次数,或者一些其他计数。 大师匈今天说一下关于这方面的东西,这些东西都是非常关键的东西,但是相对来说PD标准内对时序的要求还是比较宽泛,非常容易能够实现这样的要求。 Timer 1、CRCReceiveTimer 0.9~1.1ms 表示每次通信收到goodcrc的时间,必须在这个时间内收到goodcrc, 我们要注意不是在0.9~1.1ms内,而是第三方可以在这个范

大师匈的博客 5007

android内核移植法,android内核移植.doc

android内核移植移植Android 到mini2440By Jeef2009年7月17日1 移植环境:Target:友善之臂mini2440HOST OS:Fedora 8kernel Version:Linux-2.6.25编译器:mini2440光盘所提供的编译器2 内核移植(一):2.1 参考资料感谢一下大侠提供的资料,链接如下./u2/85263/showart_1729098.ht...

weixin_29000729的博客 466

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4211

Android系统移植方法详解

Android系统移植方法详解 通过Android系统移植,让它在目标系统上运行起来。Android系统由于用的是linux内核,因此内核移植和嵌入式linux内核移植差异不大,过程如下: (1)移植boot-loader和linux2.6内核到目标平台上,让linux内核可以启动起来,基本的驱动允许正常。 此过程完全是嵌入式linux的开发,这里直接跳过。需要注意的是,由于androi

Ge Zhenglai 2031

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RK3566 Android 11上ILI2130触摸屏驱动移植:从编译到调试的完整避坑指南

本文详细介绍了在RK3566 Android 11平台上移植ILI2130触摸屏驱动的完整流程,包括硬件对接、DTS配置、内核编译和调试排错。特别针对I2C通信和信号干扰问题提供了实用解决方案,帮助开发者高效完成驱动适配并提升系统稳定性。

dfu65065的博客 374

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

从零构建Android AOSP内核:环境配置、编译与刷机全流程指南

Linux内核作为Android系统的底层核心,其工作原理直接决定了设备的性能、安全性与兼容性。通过交叉编译工具链,开发者可以在x86主机上为ARM架构设备定制内核,实现对硬件驱动的深度控制与系统行为的完全掌控。这一技术对于嵌入式开发、系统性能优化和安全研究具有重要价值,尤其在需要为特定设备添加驱动支持或进行底层调试的场景中不可或缺。本文聚焦于Android开源项目(AOSP)内核的构建实践,详细解析从环境搭建、源码获取到配置编译、刷入测试的完整流程,并涵盖内核调试与性能优化等高级主题,为开发者提供从概念到

chuange6363的博客 434

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

全面解析 Android 系统架构:从内核到应用层的分层设计

Android 是目前全球范围内最受欢迎的移动操作系统之一,其背后的系统架构设计是支撑其高效运行和灵活适配能力的关键。本文将从底层到顶层,深入解析 Android 系统架构的各个组成部分及其作用,帮助您更全面地了解这个庞大且复杂的系统。HAL 连接硬件和系统服务,是硬件厂商适配 Android 系统的关键层。它通过接口标准化硬件访问,使上层软件不需要直接操作硬件。易于扩展:每层职责明确,新增硬件或功能只需修改相关层。性能优化:通过 Native Libraries 和 ART 提升系统整体性能。

weixin_44780781的博客 3142

Linux/Android——usb触摸屏驱动 - usbtouchscreen (一)【转】

本文转载自:http://blog.youkuaiyun.com/jscese/article/details/41827495 最近需要往TV上装一个触摸屏设备,现在比较常见的就是使用usb接口的触摸框,适用于各种平台,这里大体记录一下在android上kernel中的usbtouchscreen驱动. 撰写不...

zzb2760715357的博客 295
上一篇: 返璞归真系列——————微内核与宏内核
下一篇: 中断处理--上下半部机制
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值