gpt4 book ai didi

kernel - 如何使触摸传感器在 Linux 内核中工作?

转载 作者:行者123 更新时间:2023-12-01 06:25:02 25 4
gpt4 key购买 nike

我的平台: 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

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

最佳答案

查看驱动程序源 (mpr121_touchkey.c),它似乎是一个常见的输入驱动程序。

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

如果驱动出现在/proc上面提到的节点你应该检查你的设备管理器的配置。

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

关于kernel - 如何使触摸传感器在 Linux 内核中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com