【问题标题】:How to make the touch sensor work in Linux kernel?如何使触摸传感器在 Linux 内核中工作?
【发布时间】:2015-07-02 00:33:49
【问题描述】:

我的平台: Beagle Bone Black,Ubuntu,内核:3.14.29-ti-r46

传感器: MPR121,连接到 Beagle 的 i2c-2

我想让触摸传感器 MPR121(飞思卡尔触摸键芯片)在我的 Beagle Bone Black 上工作。内核驱动程序在那里准备就绪。但它需要与设备树一起使用。

首先,我为 MPR121 制作了一个设备树 dts 文件,如下所示:

tomxue@ubuntu:~/Tom/Source_Code/BBB/Ubuntu/ti-linux-kernel-dev/KERNEL/arch/arm/boot/dts$ cat am335x-bone-i2c2-mpr121.dts 
/*
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
/dts-v1/;

#include "am33xx.dtsi"
#include "am335x-bone-common.dtsi"
#include "am335x-bone-common-pinmux.dtsi"

/ {
        model = "TI AM335x BeagleBone Black";
        compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
};

&ocp {
        /* i2c2 */
        P9_19_pinmux {
                mode = "i2c";
        };
        P9_20_pinmux {
                mode = "i2c";
        };
};

&i2c2 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <>; /* pinctrl-0 = <&i2c2_pins>; */

        clock-frequency = <100000>;

        touchkey: mpr121@5a {
                compatible = "fsl,mpr121";
                reg = <0x5a>;
        };
};

#include "am335x-bone-i2c2-cape-eeprom.dtsi"

dts目录下的Makefile如下:

dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \
    ...
    am335x-base0033.dtb \
    am335x-bone-i2c2-mpr121.dtb \
    am3517-craneboard.dtb \

然后我将内核与设备树文件一起重新编译。并使用官方脚本将内核映像、模块和设备树刷入我的 Beagle Bone Black。

重启 Beagle 后,我检查了我的新内核版本:

root@arm:/dev/input# uname -a
Linux arm 3.14.29-ti-r46 #2 SMP PREEMPT Tue Apr 21 14:30:14 CST 2015 armv7l armv7l armv7l GNU/Linux

然后insmod模块:

root@arm:~# insmod mpr121_touchkey.ko

dmesg 与 mpr121 无关。 然后我检查了 i2c-2,传感器确实连接到 Beagle 的 i2c-2 在 0x5a 地址(与设备树设置相同):

root@arm:~# i2cdetect -y -r 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- UU UU UU UU -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

最后,我检查了输入设备是这样的:

root@arm:/dev/input# ls
mice

与传感器无关! 我想念什么?如何使传感器内核驱动程序工作? 谢谢!

【问题讨论】:

标签: kernel driver


【解决方案1】:

看驱动源(mpr121_touchkey.c)好像是普通的输入驱动。

首先要检查,像这样的输入驱动程序一旦加载(insmod必须出现在/proc/bus/input/devices/proc/bus/input/handlers中,设备节点进入/dev取决于在您使用的设备管理器上(udev ...)它可能无法创建节点,必须有一种方法可以知道次要手动创建节点(专业可能总是 13(我不确定))并使用 hexdump 之类的内容从中读取以检查硬件和驱动程序是否正常工作。

如果驱动程序出现在上述/proc 节点中,您应该检查您的设备管理器的配置。

如果它没有出现,您可能需要在驱动程序的源代码中添加一些 printk 并检查 dmesg 是否有问题(驱动程序已经显示了一些 dev_err 但可能没有涵盖某些流程)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多