IMX6移植Linux3.0.35内核时需要添加的矩阵按键的平台设备信息

学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

本文记录在IMX6开发板上移植鼎芯Linux3.0.35内核时,需要配置的矩阵按键的信息。本设备使用的矩阵按键是一个5*5的矩阵按键。

本人其他开发板内核的移植与分析请点击链接查看: jz2440开发板相关与IMX6开发板相关

1、IMX6移植3.0.35内核时需要配置的按键的信息

首先我们要知道我们的按键接的核心板的引脚都有哪些:

在这里插入图片描述

3.0.35内核中使用的矩阵按键驱动源码在”drivers/input/keyboard/matrix_keypad.c”中。

里面是一个平台驱动,我们只要写平台设备,描述硬件的资源与此驱动匹配即可。

驱动中有代码如下:

488 static struct platform_driver matrix_keypad_driver = {
489     .probe      = matrix_keypad_probe,
490     .remove     = __devexit_p(matrix_keypad_remove),
491     .driver     = {
492         .name   = "matrix-keypad",
493         .owner  = THIS_MODULE,
494 #ifdef CONFIG_PM
495         .pm = &matrix_keypad_pm_ops,
496 #endif
497     },
498 };
499 module_platform_driver(matrix_keypad_driver);

通过阅读平台驱动的probe函数,可得知我们写的平台设备应提供具本哪些硬件信息.

378 static int __devinit matrix_keypad_probe(struct platform_device *pdev)
379 {
380     const struct matrix_keypad_platform_data *pdata; //平台设备提供的platform_data
381     const struct matrix_keymap_data *keymap_data;
382     struct matrix_keypad *keypad;
383     struct input_dev *input_dev;
384     unsigned short *keycodes;
385     unsigned int row_shift;
386     int err;388     pdata = pdev->dev.platform_data;... .....
394     keymap_data = pdata->keymap_data;... .....
433     matrix_keypad_build_keymap(keymap_data, row_shift,
434                    input_dev->keycode, input_dev->keybit); //从keymap_data里分解出行列键对应的键码... .....
439     err = init_matrix_gpio(pdev, keypad); //注册行线的中断号... .....
443     err = input_register_device(keypad->input_dev); //输入设备对象注册... .....
456     return err;
457 }

通过probe函数,可以确定我们写平台设备时只需通过platform_data成员提供平台驱动所需的信息,无需再提供resource.

再确定结构体matrix_keypad_platform_data的每个成员的作用即可,如不清楚具体用途,可以在驱动代码里通过查看对成员值的访问反推出用途.

在"include/linux/input/matrix_keypad.h"中有

#define KEY(row, col, val)  ((((row) & (MATRIX_MAX_ROWS - 1)) << 24) |\(((col) & (MATRIX_MAX_COLS - 1)) << 16) |\((val) & 0xffff))
.....
#define KEY_ROW(k)      (((k) >> 24) & 0xff)
#define KEY_COL(k)      (((k) >> 16) & 0xff)
#define KEY_VAL(k)      ((k) & 0xffff)
.....
.....
#define MATRIX_SCAN_CODE(row, col, row_shift)   (((row) << (row_shift)) + (col))......
......
struct matrix_keymap_data {const uint32_t *keymap; //装载按键对应的键码数组, 注意每个键码需要使用宏KEY来写。也就是一个32位数据里,行,列,键码各占用8, 8, 16位.unsigned int    keymap_size; //键码数组的元素个数
};
......
......
struct matrix_keypad_platform_data {const struct matrix_keymap_data *keymap_data; //键码数据对象的首地址const unsigned int *row_gpios; //行线用的IO口const unsigned int *col_gpios; //列线用的IO口unsigned int    num_row_gpios; //多少个行线unsigned int    num_col_gpios; //多少个列线unsigned int    col_scan_delay_us; //扫描列线时间隔时间unsigned int    debounce_ms; //防抖动的间隔时间unsigned int    clustered_irq; //行线是否共用一个中断, 设0则每个行线的中断是独立的unsigned int    clustered_irq_flags;bool        active_low; //键按下时,行线是否为低电平bool        wakeup;bool        no_autorepeat; //按键按下时是否重复提交按键, 设1就是不重复,设0重复
};

根据我们的原理图:

行线接: KEY_ROW0, KEY_ROW1, KEY_ROW2, KEY_ROW4,KEY_ROW5
列线接: KEY_ROW0, KEY_ROW1, KEY_ROW2, KEY_ROW4,KEY_ROW5

2、添加设备信息的具体步骤

Imx_keypad平台层函数的添加

  1. 在board-mx6q_sabresd.c中添加
//注意键值,可以根据自己项目的需求自己更改
static int mx6_sabresd_keymap[] = {KEY(0, 0, KEY_UP),KEY(0, 1, KEY_F9),KEY(0, 2, KEY_F3),KEY(0, 4, KEY_DOWN),KEY(0, 5, KEY_PRINT),KEY(1, 0, KEY_RIGHT),KEY(1, 1, KEY_F8),KEY(1, 2, KEY_F4),KEY(1, 4, KEY_HOME),KEY(1, 5, KEY_PAGEDOWN),KEY(2, 0, KEY_F12),KEY(2, 1, KEY_F7),KEY(2, 2, KEY_F5),KEY(2, 4, KEY_END),KEY(2, 5, KEY_PAGEUP),KEY(4, 0, KEY_F11),KEY(4, 1, KEY_F1),KEY(4, 2, KEY_F6),KEY(4, 4, KEY_NUMLOCK),KEY(4, 5, KEY_ESC),KEY(5, 0, KEY_F10),KEY(5, 1, KEY_F2),KEY(5, 2, KEY_LEFT),KEY(5, 4, KEY_SCROLLLOCK),KEY(5, 5, KEY_PAUSE),};static const struct matrix_keymap_data mx6_sabresd_map_data __initconst= {.keymap		= mx6_sabresd_keymap,.keymap_size	= ARRAY_SIZE(mx6_sabresd_keymap),
};
  1. 在mx6_sabresd_board_init函数中添加:
imx6q_add_imx_keypad(&mx6_sabresd_map_data);   //KEYBOARD 

这个函数是在Platfprm-imx-keypad.c定义的,需要在Devices-imx6q.h中添加宏定义:

extern const struct imx_imx_keypad_data imx6q_imx_keypad_data ;  //lyy 
#define imx6q_add_imx_keypad(pdata)   \imx_add_imx_keypad(&imx6q_imx_keypad_data,pdata);
  1. 在Platfprm-imx-keypad.c中添加:
//lyy
#ifdef CONFIG_SOC_IMX6Q
const struct imx_imx_keypad_data imx6q_imx_keypad_data __initconst =imx_imx_keypad_data_entry_single(MX6SL, SZ_16);
#endif /* ifdef CONFIG_SOC_IMX6Q */
  1. 在Board-mx6_sabresd.h中添加并将所有复用引脚注释掉

有可能有其它设备复用了下面这些引脚,一定要先将他们注释掉

/* keyboaed lyy */MX6Q_PAD_KEY_COL0__KPP_COL_0,MX6Q_PAD_KEY_ROW0__KPP_ROW_0,MX6Q_PAD_KEY_COL1__KPP_COL_1,MX6Q_PAD_KEY_ROW1__KPP_ROW_1,MX6Q_PAD_KEY_COL2__KPP_COL_2,MX6Q_PAD_KEY_ROW2__KPP_ROW_2,MX6Q_PAD_KEY_COL4__KPP_COL_4,MX6Q_PAD_KEY_ROW4__KPP_ROW_4,MX6Q_PAD_CSI0_DAT4__KPP_COL_5,MX6Q_PAD_CSI0_DAT5__KPP_ROW_5,
  1. 在arch\arm\mach-mx6\Clock.c中的lookups[]中加入:
static struct clk_lookup lookups[] = {
。。。。。。。
。。。。。。。
_REGISTER_CLOCK(NULL, "kpp", dummy_clk),  //这是加入的
}

3、测试

重新编译内核后,烧写到开发板,然后测试按键是否可以正常使用:

首先在板子启动后,在板子的终端输入;

$ cat /proc/bus/input/devices

查看当前的设备,找到我们的按键设备,假设为evet0。

则在终端中输入

$ hexdump /dev/input/event0

所有按键都按一遍,会发现终端中打印了按键的值(显示的内容好像是某一种编码,不知道怎么转换为按键的值)

4、总结

已经转行做互联网了,现在把实验室相关的事做一下,之前没补完的博客补一下,以后可能就不写嵌入式相关的内容了。当然,还会写关于Linux内核的相关知识。

做嵌入式,如果做的不深,如果不是去深度定制Linux内核,或者深度开发驱动,其实就没什么可做的了。希望看到这里的朋友,加油,不管在做什么,不要放弃,下一步就会成功!!!

学习探讨加:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IMX6移植Linux4.1.15内核时需要添加矩阵按键的设备树信息

之前在Linux3.0.35内核移植过按键的信息&#xff0c;请点击链接查看&#xff1a;3.0.35内核移植 本篇文章记录在IMX6开发板移植4.1.15内核时&#xff0c;添加矩阵按键的设备树信息。 1、具体添加的设备树信息 下面是我们的开发板中按键与核心板的引脚链接情况&#xff1a; …

【原创】简单轻松浏览FTP

笔者之前都是用浏览器浏览FTP的&#xff08;笔者用的是360安全浏览器&#xff09;&#xff0c;可后来不知道为什么不能正常浏览了&#xff0c;如下图&#xff1a; 虽然这样也可以下载和浏览FTP上的资源&#xff0c;但总觉得没有像Windows的资源管理器那样来得方便。 上网找了找…

微服务认证解决方案

之前整理的微服务认证文档&#xff0c;分享一下 微服务认证解决方案1.Token认证有两种方式&#xff1a;OAuth2.0&#xff0c;JWT2. oAuth2.0授权方式2.1授权码模式&#xff1a;2.2简化模式:简化模式详细介绍2.3密码模式&#xff1a;密码模式详细介绍2.4客户端模式&#xff1a;2…

I.MX6开发板移植Linux4.1.15内核之TSC2007触摸屏设备树信息的添加

之前写过一篇3.0.35内核移植关于TSC2007触摸屏驱动移植的文章。里面对TSC2007.c驱动程序的分析比较清晰&#xff0c;点击链接查看&#xff1a;点击链接查看 本篇文章&#xff0c;主要记录在4.1.15内核移植的过程中&#xff0c;对于TSC2007设备的添加&#xff0c;需要如何添加设…

C#中使用DES和AES加密解密

代码usingSystem;usingSystem.Text;usingSystem.Security.Cryptography;usingSystem.IO;namespaceMyCryptography{ ///<summary>///DES加密解密 ///</summary>publicclassDES { ///<summary>///获取密钥 ///</summary>privates…

java思维导图

Java思维导图1. java 基础知识思维导图2. juc知识点总结3. 缓存相关知识4. 性能调优5.深入理解java 虚拟机&#xff08;感谢分享&#xff09;6. javaNIO&#xff08;IO&#xff09;1. java 基础知识思维导图 2. juc知识点总结 3. 缓存相关知识 4. 性能调优 5.深入理解java 虚拟…

【剑指offer - C++/Java】1、二维数组中的查找

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 题目链接&#xff1a; 二维数组中的查找 文章目录题目描述&#xff1a;解题思路方法1方法2总结题目描述&#xff1a; 在一个二维数组中&#xff08;每…

【剑指offer - C++/Java】2、替换空格

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 题目链接&#xff1a; 替换空格 文章目录题目描述解题思路总结题目描述 请实现一个函数&#xff0c;将一个字符串中的每个空格替换成“%20”。例如&am…

数据仓设计

TOC 数据仓库&#xff0c;这里采用层级的设计方式&#xff0c;设计的粒度&#xff0c;依据业务的复杂度而定&#xff1b; 这里只是介绍 数据仓库的设计&#xff0c;后续补充一下&#xff0c;具体的实现细节和使用工具&#xff1b;

【OS学习笔记】一 处理器、内存和指令

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 我们已经知道&#xff0c;处理器是一台电子计算机的核心&#xff0c;它会在振荡器脉冲的激励下&#xff0c;从内存中获取指令&#xff0c;并发起一系列…

AS3 CookBook学习整理(八)

1. AS3的事件机制 事件流机制即为捕获--目标--冒泡,分别对应event.eventPhase的值1(EventPhase.CAPTURING_PHASE)&#xff0c;2(EventPhase.AT_TARGET)&#xff0c;3(EventPhase.BUBBLING_PHASE) 假设有3个Sprite&#xff0c;分别为绿、蓝、黄(如图),层叠关系为绿色包含蓝色&am…

边缘计算+云计算

后续更新中 边缘计算云计算&#xff1a; 促进企业数字化向数智化发展概念1.以下是边缘计算的四个组织2. 边缘设备对IoT的增强作用 &#xff08;更新&#xff09;3. 边缘计算应用于IoT的四个层次4. AI在边缘设备计算领域的三种应用场景5. 云服务架构6.案例解析6.1国家电网&#…

【剑指offer - C++/Java】3、从尾到头打印链表

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 牛客网题目链接&#xff1a; 从尾到头打印链表 文章目录题目描述1、递归解法1.1、 递归解法一java代码&#xff1a;C代码分析&#xff1a;1.2 递归解法…

网络协议之http和tcp思维导图

http协议和tcp协议之前学的整理一部分&#xff0c;后续更新

【剑指offer - C++/Java】4、重建二叉树

牛客网题目链接&#xff1a;重建二叉树 文章目录0 题目描述&#xff1a;1、题目分析2、代码2.1、java代码2.2 C代码3、总结0 题目描述&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字…

Windows下Android开发环境 搭建

1、 下载Android SDK &#xff08;1&#xff09;官网下载解压后即可用。 在http://androidappdocs.appspot.com/sdk/index.html 下选择 合适自己的平台下载&#xff0c;下载后解压 运行 【SDK Setup.exe】 出现在线安装包。 会出现“Failed to fetch URL https://dl-ssl.google…

【OS学习笔记】二 汇编语言和汇编软件

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章讲解了处理器&#xff0c;内存&#xff0c;和指令。学习了Intel 8086处理器的相关知识&#xff0c;如Intel通用寄存器的作用&#xff0c;程…

【软件开发底层知识修炼】一 深入浅出处理器之一 微处理器与微控制器

学习交流加&#xff08;可免费帮忙下载CSDN资源&#xff09;&#xff1a;个人微信&#xff1a; liu1126137994学习交流资源分享qq群1&#xff08;已满&#xff09;&#xff1a; 962535112学习交流资源分享qq群2&#xff1a; 780902027 深入浅出处理器这几篇文章可能你觉得对软件…

【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章我们学习了微处理器与微控制器的区别。点击链接查看上一篇文章的内容&#xff1a;微处理器与微控制器 本篇文章我们学习中断的概念与意义。…