酷比魔方KNote go适配性问题

硬件型号:酷比魔方KNote go

CPU 类型:赛扬N3350

显卡类型:intel HD Graphics 128MB

所使用的 FydeOS 的版本号及使用方法: v6.0 U盘启动,黑屏,左上角有光标。 v5.31 U盘启动,正常进入系统,但触摸屏无法使用。 非常喜欢FydeOS并觉得它非常适合平板,希望未来的版本能够像v5.31一样适配酷比魔方Knote go同时触摸屏可用。

在命令行里用evtest看了一下接入设备。问题应该在于触摸板的驱动不适配,而触摸屏压根没有驱动。看了linux仓库里有那么多hid接口驱动,也不清楚哪个是什么用途。考虑自己编译chromium os太麻烦了,还是期待官方适配。

触摸屏型号:mssl1680 折腾了一天,研究出了Ubuntu下怎么用gslx680_ts_acpi开源驱动适配这块触摸屏。

1.使用dism++提取出windows下的触摸屏驱动SileadTouch.sys;

2.https://github.com/onitake/gsl-firmware 使用这里面的tools下的scanwindrv工具提取出SileadTouch.sys里的固件信息得到firmware_00.fw文件;

3.使用tools下的fwtools工具将firmware_00.fw文件转换为silead_ts.fw文件,参数参考firmware\cube\i1101里的参数;

4.将silead_ts.fw拷贝到ubuntu的\lib\firmware目录下;

5.https://github.com/onitake/gsl-firmware 将该仓库克隆到ubuntu,ubuntu命令行里make,然后sudo insmod ./gslx680_ts_acpi.ko

6.执行dmesg命令查看输出,应该会提示找到设备mssl1680,测试触摸屏可用。

理论上,GSLx68y系列触摸屏控制器都可以用这个方法适配linux,只需要设置好参数即可。2的仓库地址里列出了一些平板设备的适配情况,还提供了使用silead_ts开源驱动的方法,适配性应该更好,有需要可以自行研究。

折腾了那么久,分享给需要给这个系列触摸屏控制器的平板装linux的人,linux相较于win10更简洁省电适合平板和办公。希望fydeOS官方考虑加入这两个驱动,让fydeOS适配更多机器,更受欢迎。

给出knote go上提取出来的触摸屏固件文件,希望官方适配。链接: https://pan.baidu.com/s/166dJgaDvxYcWv8QxvsLAUw 提取码: nyte

https://github.com/dnschneid/crouton/wiki/Build-chrome-os-kernel-and-kernel-modules 这个仓库给出了向chrome os kernal里添加模组的方法,我没试过,我觉得可以添加上述的gslx680_ts_acpi.ko实现chromeos上mssl1680触摸屏的适配。然而我现在连fydeOS v6.0都刷不进啊!以后的版本也不一定能刷入。官方这个月的更新可以把兼容性弄成和v5.31一样吗qwq,这样我就有兴趣抽时间继续折腾了。

这个方法有个很麻烦的点是每次chromeOS更新都要自己重新编译一遍。

感谢你如此投入的帮助FydeOS。slead的触摸芯片被广泛应用于国产低端触摸设备上。大部分国产低端设备并不认真的按照acpi的规范在填写硬件适配信息。而是将驱动程序参数硬性写到driver里面。因此,一个标准的acpi驱动,无法驱动大部分国产设备,因为不仅需要相应的firmware,还需要适合这个触摸屏的相关参数,比如长宽picel点数,x或y轴反转等等。我们其实在6.0中已经内置了多款国产触摸屏的驱动,但是,各种型号多如牛毛,大部分设备都不写参数。这可能就是省成本的后果吧。

1 Like

型号众多难以适配的话,我有一个想法,在检测到用户的触摸芯片是silead系列后,提示用户自行导入windows下的sys驱动文件,输入需要的参数,然后利用我上面提到的工具自动编译驱动。适配成功后询问用户是否允许上传驱动信息,以后再安装或其他同款机器安装就可以自动适配了。其他难以适配的国产触摸屏也是如此,只需研究如何提取和转化Windows驱动为linux驱动即可。这样就引入了一波中低端平板用户。

我尝试在fydeOS里用sudo make命令编译驱动但是提示没有该命令,是原本就没有这个命令,只能根据内核版本交叉编译吗?还是要用什么特殊方法编译吗?

原来是没装编译器傻了傻了。。。

楼主楼主,我有个酷比iwork10,触摸屏倒是能触摸,就是左右反向,而且没有重力,用上面的方法有解决的可能吗?

不行,我发现chrome os的shell没有安装任何包管理工具,也就不能下载编译器,不能用make命令编译驱动。还可以考虑自己重新编译整个系统来加入自定义驱动,或者交叉编译驱动。都太麻烦了,搞不来,还是等官方适配吧。

如果你能在ubuntu或者其它带包管理的linux发行版的下面,成功编译这个触摸屏驱动,并且正确运行,我们会很高兴协助将你的代码以你的名义提交到linux内核中,并优先整合到FydeOS中。

楼主楼主,救命啊,我的触摸屏好像就是这个型号啊,不过分辨率是1920*1200的,现在触摸屏没用。楼主有没有原版安装包啊?另外我这个装上后声音文件打不开,视频文件打不开。。

。等等。。。。楼主最后没解决吗???那你那个提示找到驱动是什么鬼??我看懵逼了

官方,三个人在等这个驱动了,赶紧适配吧。。。哈哈哈。

嘿,老兄,这有一份待收录驱动~ https://fydeos.com/community/topic/19331/

嗯,那个帖子被我一不小心改失效了,这个是新的...https://fydeos.com/community/topic/19361/

偶然发现Linux内核从4.8版本开始就自带silead驱动!于是心血来潮研究了一番。

silead系列触摸屏在设计之初没有考虑脱离设备的固件生态的情况,因此使用该驱动需要添加额外的参数。添加的参数就写在linux内核源码的drivers/platform/x86/touchscreen_dmi.c里。添加好参数后,需要重新编译内核。进入系统后将从windows提取的.fw固件文件复制到lib\firmware\silead目录下即可(如果没有silead文件夹则自己创建一个),注意fw文件名要与添加参数里定义的文件名对应。这个固件完全可以让用户自己去提取。

另外如果touchscreen_dmi.c里已经有你的设备名称,那么你只需要把提取的fw固件放到lib\firmware\silead目录下即可。

下面是对酷比魔方Knote Go,touchscreen_dmi.c里应该添加的参数代码。

static const struct property_entry cube_knote_i1101S_props[] = {
    PROPERTY_ENTRY_U32("touchscreen-min-x", 20),
    PROPERTY_ENTRY_U32("touchscreen-min-y",  22),
    PROPERTY_ENTRY_U32("touchscreen-size-x", 1961),
    PROPERTY_ENTRY_U32("touchscreen-size-y", 1513),
        PROPERTY_ENTRY_STRING("firmware-name", "gsl3692-cube-knote-i1101S.fw"), // fw文件名
    PROPERTY_ENTRY_U32("silead,max-fingers", 10),
    PROPERTY_ENTRY_BOOL("silead,home-button"),
    { }
};

// touchscreen_dmi_table在比较下面的位置
static const struct dmi_system_id touchscreen_dmi_table[] = {
    /* ...... */
    {
        /* Cube KNote i1101S */
        .driver_data = (void *)&cube_knote_i1101S_data,
        .matches = {
            DMI_MATCH(DMI_PRODUCT_NAME, "i1101S"),
            /* Above matches are too generic, add bios-date match */
            DMI_MATCH(DMI_BIOS_DATE, "01/16/2019"),
        },
    },
    /* ...... */
}

放出我在manjaro上测试成功的touchscreen_dmi.c和fw固件文件: 链接: https://pan.baidu.com/s/1wpq81E2r27RHDNnZ0qOmIg 提取码: zgej

只需要官方大人在下次编译内核的时候复制粘贴这两段代码到touchscreen_dmi.c里,即可让fydeOS又多适配一台机器,求求官方了!

参考资料:https://github.com/onitake/gsl-firmware