One Image Adapt for Multiple Touch Application Notes

Preface
• 需求描述
受制于供应链的情况,客户会采用选择多种类型的touch。如果软件上不做改动,就可以烧写在不同touch的板子上,带来研发和生产的便利。
• 解决方案

把所有的touch driver都编译成module,列之于module.alias。系统启动时,ueventd会根据已经注册的device名称,寻找对应的driver进行insmod。

Solution

1. driver编译成module
把支持的touch对应的driver都编译成module,只需要把KERNEL里的CONFIG设定成m即可。
linux/kernel/arch/x86/configs/i386_byt_defconfig:CONFIG_TOUCHSCREEN_GOODIX_GT9XX=m


2. 使module列之于modules.alias
在touch driver中添加MODULE_DEVICE_TABLE语句,id table中列明该driver支持的device名称。
linux/modules/drivers/input/touchscreen/gt9xx/gt9xx.c
static struct acpi_device_id goodix_acpi_match[] = {
{ "GODX0911", 0 },
{ },
};
MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);

3. 不可出现于黑名单(blacklist)
确保所有的touch driver,没有出现在blacklist文件中
device/intel/common/ueventd.modules.blacklist
@@ -1,6 +1,5 @@
-blacklist gt9xx_ts


原理介绍

1. MODULE_DEVICE_TABLE(acpi, id_table)
该宏会在/modules.alias中生成一个条目:alias acpi*:GODX0911:* gt9xx_ts


2. ueventd insmod module流程
1) 函数调用关系:
ueventd_main -> device_init -> coldboot(“/sys/devices”) ->
do_coldboot -> handle_device_fd ->
parse_event/handle_device_event -> handle_module_loading ->
get_module_dep/get_mod_args/insmod_s


2) coldboot(“/sys/devices”)会找到所有其子目录下的uevent进行处理。
/sys/devices/LNXSYSTM:00/device:00/80860F41:03/GODX0911:00/uevent
ACTION=add
DEVPATH=/devices/LNXSYSTM:00/device:00/80860F41:03/GODX0911:00
SUBSYSTEM=acpi
MODALIAS=acpi:GODX0911:PNP0C50:

3) uevent中的MODALIAS模式匹配于/modules.alias的条目,就会load
modules.alias里指定的driver。
【uevent】 MODALIAS=acpi:GODX0911:PNP0C50:
【/modules.alias】 alias acpi*:GODX0911:* gt9xx_ts


3. uevent中MODALIAS来源
kernel启动时跑到acpi_device_uevent,调用:
add_uevent_var(env, “MODALIAS=“)
create_modalias()
MODALIAS由”acpi:”和&acpi_dev->pnp.id拼接而成。其中&acpi_dev->pnp.id由firmware定义。
NOTE: 关键在于device uevent MODALIAS和/modules.alias中条目的匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值