启用Mediacom WinPad W700的触摸屏
这款平板电脑默认运行Windows 10,但我安装了Lubuntu 18.04。 我试图用这个问题作为指导,但我的情况有所不同。
ELAN
设备用于触摸板,每个命令都不会返回任何内容。 命令sudo dmesg | grep i2c
sudo dmesg | grep i2c
返回:
[ 3.211266] i2c /dev entries driver [ 3.328881] i2c_designware 80860F41:04: I2C bus managed by PUNIT [ 37.847473] axp20x-i2c i2c-INT33F4:00: AXP20x variant AXP288 found [ 37.872164] silead_ts i2c-MSSL1680:00: i2c-MSSL1680:00 supply vddio not found, using dummy regulator [ 37.872202] silead_ts i2c-MSSL1680:00: i2c-MSSL1680:00 supply avdd not found, using dummy regulator [ 37.872740] silead_ts i2c-MSSL1680:00: Silead chip ID: 0xB4820000 [ 37.928036] axp20x-i2c i2c-INT33F4:00: AXP20X driver loaded [ 38.024519] silead_ts i2c-MSSL1680:00: Direct firmware load for silead/mssl1680.fw failed with error -2 [ 38.024529] silead_ts i2c-MSSL1680:00: Firmware request error -2 [ 38.027163] silead_ts: probe of i2c-MSSL1680:00 failed with error -2 [ 39.030645] input: axp20x-pek as /devices/platform/80860F41:04/i2c-4/i2c-INT33F4:00/axp221-pek/input/input6
我发现Mediacom的驱动程序与TrekStor的驱动程序相同,TrekStor也是与Mediacom合作的公司,并且在github上发现了这个精彩的项目。 Mediacom WinpadW700对应于SurfTab wintron 7.0(ST70416-6)。
该项目是关于平板电脑和Ubuntu并指出:
此存储库包含各种平板电脑(和其他)设备中Silead触摸屏控制器的固件映像[。 。 ]
固件文件是从Android和Windows设备驱动程序中提取的,由设备制造商发布。 它们适用于那些喜欢用通用的Linux发行版(如Debian或Ubuntu)替换出货的操作系统的用户。
我认为我应该使用silead_ts.fw
文件(这是从firmware.fw获得的gslx680-acpi
的firmware.fw
,它是从原始驱动程序中提取的固件)。
所以silead_ts.fw
固件专门针对我的问题而设计。 我怎么用呢? 来自https://github.com/onitake/gsl-firmware#silead_ts的这一部分应该解释它是如何做到的:
我必须编辑源代码中的drivers/platform/x86/silead_dmi.c
文件。 然后重新编译内核(使用该文件),并在某处添加我在修改后的文件中引用的固件。
我该如何重新编译内核? 我正在尝试这个指南。
我使用apt-get source linux-headers-4.15.0-33-generic
并获得了800 MB的linux-4.15
文件夹。 那里有路径drivers/platform/x86/silead_dmi.c
,其中我已经创建了drivers/platform/x86/silead_dmi.c
文件。 按照指南我使用apt-get source linux-image-$(uname -r)
并获得了118 kB的linux-signed-4.15.0
文件夹。
现在使用fakeroot debian/rules editconfigs
我收到一个错误:
dh editconfigs dh: Unknown sequence editconfigs (choose from: binary binary-arch binary-indep build build-arch build-indep clean install install-arch install-indep) debian/rules:35: recipe for target 'editconfigs' failed make: *** [editconfigs] Error 2
如何修复此错误并重新编译内核?
silead_ts.fw
适用于此已弃用的项目https://github.com/onitake/gslx680-acpi 。
您应该至少使用https://github.com/onitake/gsl-firmware/blob/master/firmware/trekstor/surftab7new/firmware.fw ,仅为旧项目提取并且未修改的fimrware。
但是你必须使用这个https://github.com/onitake/gsl-firmware/blob/master/firmware/linux/silead/gsl1686-surftab-wintron70-st70416-6.fw ,把文件放在/lib/firmware/silead
(创建文件夹silead
)。 还制作了名为mssl1680.fw
(备份固件)的副本。
现在按照本指南重新编译内核https://debian-handbook.info/browse/squeeze/sect.kernel-compilation.html 。
使用apt-cache search ^linux-source
查找内核的源代码(如指南所述)。
在silead_dmi.c
文件中添加:
static const struct property_entry mediacom_w700_props[] = { PROPERTY_ENTRY_U32("touchscreen-size-x", 884), PROPERTY_ENTRY_U32("touchscreen-size-y", 632), PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-surftab-wintron70-st70416-6.fw"), PROPERTY_ENTRY_U32("silead,max-fingers", 10), PROPERTY_ENTRY_BOOL("silead,home-button"), { } };
最重要的是在DMI_MATCH中添加:
{ /* Mediacom WinPad 7.0 W700 */ .driver_data = (void *)&surftab_wintron70_st70416_6_data, .matches = { DMI_MATCH(DMI_SYS_VENDOR, "MEDIACOM"), DMI_MATCH(DMI_PRODUCT_NAME, "WinPad 7 W10 - WPW700"), }, },