为什么网站开发这么便宜,阿里云网站方案建设书模板,重庆品质网站建设销售,网站开发设计论文目录 一、简介
1、了解IR协议
2、代码结构介绍
二、硬件原理及连接
2、芯片手册解读
三、驱动代码分析
1、设备树介绍
1#xff09;reg
2#xff09;protocol
3#xff09;pinctrl
4#xff09;map
2、linux驱动介绍
1#xff09;makefile
2#xff09;数据…目录 一、简介
1、了解IR协议
2、代码结构介绍
二、硬件原理及连接
2、芯片手册解读
三、驱动代码分析
1、设备树介绍
1reg
2protocol
3pinctrl
4map
2、linux驱动介绍
1makefile
2数据结构
3驱动代码
3、重要的代码配置
四、调试方法
1、sysfs
2、输入子系统的设备文件
3、查看模块 一、简介
本文做一些IR驱动的简要分析先来了解基本知识
1、了解IR协议
全面了解红外遥控(中文版) - 道客巴巴
1、概况一下就是遥控发送约定的红外波形根据IR协议构造的波形 → IR接收模块该红外波形→ 主控解码并响应。
2、看代码前首先理解IR的一般概念 1IR的四种码值(高低电平组合)头码、地址码、命令码、重复码 2IR的两种状态按下、持续按下(repeat) 3IR模式遥控器键值对、鼠标鼠标移动/点击 4IR配对模式 - 有些遥控会有
2、代码结构介绍
所在层次名称代码路径 kernel ir driver release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_main.c //驱动的入口文件 release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_core.c //核心函数实现 release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_cdev.c //字符设备实现 release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_sysfs.c //sysfs目录实现 release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_decoder_xmp.c //xmp软件解码实现 release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_raw.c //解码事件处理(软件解码用到) release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_regmap.c //寄存器映射协议相关 kernelpinctrl子系统release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/pinctrl/meson/*kerneldts release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/t5d_t950d4_am301_linux_1.5g_cvte.dts //1.5g指ddr内存 release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/t5d_t950d4_am301_linux_1g_cvte.dts release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/t5d_t950d4_am301_linux_512m_cvtelinux.dts //以上修改的话最好一起修改覆盖不同芯片多个方案 release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/mesont5d.dtsi release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/meson-ir-map.dtsi bootir driver release/aml-comp/uboot/bl30/src_ao/demos/amlogic/driver/ir/
二、硬件原理及连接
1、 IR遥控板经过RC电路接入到CPU端的IR_IN引脚
2、芯片手册解读
1硬件解码的IR模块简介 T950D4器件集成有IR控制器驱动可以配置选择硬件解码硬件自动完成波形解码只需读取对应寄存器就可以得到码值。 2引脚功能描述 三、驱动代码分析
1、设备树介绍
release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/mesont5d.dtsi 这里的节点定义了重要的ir配置下面介绍重点配置
1reg
reg硬件解码的配置寄存器。
2protocol /release/aml-comp/kernel/aml-5.4/scripts/dtc/include-prefixes/dt-bindings/input/meson_ir.h
/release/aml-comp/kernel/aml-5.4/include/dt-bindings/input/meson_ir.h
从opengrok的搜索结果可以看到 REMOTE_TYPE_NEC 值为0x01
3pinctrl 1、引脚的初始化实现详见pinctrl子系统
release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/pinctrl/meson/pinctrl-meson-t5d.c 2、模块名详见makefile 3、查看当前的内联模块
cat /lib/modules/$(uname -r)/modules.builtin | more | grep aml_pinctrl 4、pinctrl子系统介绍
1Linux内核之pinctrl子系统Linux内核之pinctrl子系统 - 知乎
2一文解析pinctrl一文搞懂 | Linux pinctrl/gpio子系统 - 知乎 4map
map custom_maps; 会引用到以下dtsi的数据节点
release/aml-comp/kernel/aml-5.4/arch/arm/boot/dts/amlogic/meson-ir-map.dtsi 1、6套遥控解码同一协议
2、头码
3、发送repeat码的时间间隔
4、scancode硬件解码得到 和 keycode用户定义 的对应应用层得到的是keycode 2、linux驱动介绍
1makefile
通过makefile了解用到的代码文件 值得注意CONFIG_AMLOGIC_MESON_IRy 即该驱动是编进内核的。
2数据结构
IR协议结构体 3驱动代码
需要注意代码里兼容了软件解码和硬件解码我们使用硬件解码只需要关注硬解部分即可下面以硬件解码来展开
release/aml-comp/kernel/aml-5.4/kernel/aml-5.4/drivers/amlogic/input/ir/meson_ir_main.c //驱动的入口文件
1、驱动入口init 驱动模型为平台设备驱动这里实现了driver没有实现device设备信息从设备树里获取 2、meson_ir_probe初始化函数中的关键操作
1挂接回调函数 meson_ir_report_rel 为上报位置信息当模式为mouse cursor时才用到这里没有用到 2注册输入子设备 3hardware相关初始化 这里获取设备树节点信息、注册中断、中断下半部tasklet chip-set_register_config(chip, chip→protocol); 这里进行IR协议初始化 meson_ir_interrupt
如果有IR数据首先会进入中断处理 rc-protocol REMOTE_TYPE_NEC 0x01MULTI_IR_SOFTWARE_DECODE(rc-protocol) 0 //multi_ir指软件解码故会走else分支ENABLE_LEGACY_IR(rc-protocol) 0 //legacy ir指旧架构的IR模块 进入中断下半部处理 meson_ir_tasklet 进行按键上报 按键的两种一般状态
IR_STATUS_NORMAL 短按
IR_STATUS_REPEAT 长按 进入meson_ir_keydown处理 值得注意一次完整的短按包含keydown和keyup事件
打开log后观察打印可以看到如下 keyup事件在定时器超时后执行 4字符设备初始化 创建字符设备sysfs_init主要是创建各种属性包括很多调试属性文件。
3、重要的代码配置
1LEGACY_IR_TYPE_MASK(type) //legacy_ir指的是旧架构的IR模块这里为了兼容
2MULTI_IR_TYPE_MASK(type) //multi_ir是指软件解码软件解码支持多种IR协议但硬件解码只支持一种IR协议 四、调试方法
1、sysfs 举例开启log打印 echo 1 /sys/class/remote/amremote/debug_enable
echo 7 /proc/sys/kernel/printk 2、输入子系统的设备文件
cat /proc/bus/input/devices //查看输入设备信息
input设备/sys/class/input/input2
事件设备/dev/input/event2 3、查看模块
cat /lib/modules/$(uname -r)/modules.builtin | more | grep meson_ir